使用 PulP、PySIMPLE 和古罗比解决混合问题

CBC

使用 PuLP 在 Python 中使用 https://github.com/coin-or/CbcCBC 解算器。

什么是 PuLP?

PuLP 是一个 LP 建模器,由 Python 编写。
PuLP 生成 MPS 或 LP 文件,然后
可以调用 GLPK、COIN-OR CLP/CBC、CPLEX、GUROBI、MOSEK、XPRESS、CHOCO、MIPCL、SCIP 来求解线性问题。

安装

$ pip install pulp

兼容的 Python 版本

  • Python 2.7
  • Python >= 3.4.

使用示例

使用 LpVariable() 创建新变量。

0 <= x <= 3:

x = LpVariable("x", 0, 3)

0 <= y <= 1:

y = LpVariable("y", 0, 1)

使用LpProblem() 创建新问题。 创建我的项目“。

prob = LpProblem("myProblem", LpMinimize)

组合变量以创建表达式和约束,并将其添加到问题中。

prob += x + y <= 2

添加表达式(不是约束)时,它将成为目标函数。

prob += -4*x + y

解决。

status = prob.solve()

查看解决方案的状态。

LpStatus[status]

使用值 () 获取变量的值。

value(x)

配方问题示例

import pulp

• 将函数设置为最小化
problem = pulp. LpProblem(“配合问题”,pulp. LpMinimize)

• 设置变量(变量名称、最小值、最大值、类型)
• 9 种合金的比例
x1 = pulp. LpVariable('X1', 0, 1, 'Continuous')
x2 = pulp. LpVariable('X2', 0, 1, 'Continuous')
x3 = pulp. LpVariable('X3', 0, 1, 'Continuous')
x4 = pulp. LpVariable('X4', 0, 1, 'Continuous')
x5 = pulp. LpVariable('X5', 0, 1, 'Continuous')
x6 = pulp. LpVariable('X6', 0, 1, 'Continuous')
x7 = pulp. LpVariable('X7', 0, 1, 'Continuous')
x8 = pulp. LpVariable('X8', 0, 1, 'Continuous')
x9 = pulp. LpVariable('X9', 0, 1, 'Continuous')

• 目标函数(定义要最小化的成本)
problem += 7.3*x1 + 6.9*x2 + 7.3*x3 + 7.5*x4 + 7.6*x5 + 6.0*x6 + 5.8*x7 + 4.3*x8 + 4.1*x9

• 设置约束
• 总计为 1(100%)
problem += x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 == 1

• 铅混合比
problem += 20*x1 + 50*x2 + 30*x3 +30*x4 + 30*x5 + 60*x6 + 40*x7 + 10*x8 + 10*x9 == 30
• 锌混合比
problem += 30*x1 + 40*x2 + 20*x3 +40*x4 + 30*x5 + 30*x6 + 50*x7 + 30*x8 + 10*x9 == 30
• 锡混合比
problem += 50*x1 + 10*x2 + 50*x3 +30*x4 + 40*x5 + 10*x6 + 10*x7 + 60*x8 + 80*x9 == 40

• 检查问题定义
print(problem)

• 运行
result = problem.solve()

• 查看结果
print("X1:" ,pulp.value(x1))
print("X2:" ,pulp.value(x2))
print("X3:" ,pulp.value(x3))
print("X4:" ,pulp.value(x4))
print("X5:" ,pulp.value(x5))
print("X6:" ,pulp.value(x6))
print("X7:" ,pulp.value(x7))
print("X8:" ,pulp.value(x8))
print("X9:" ,pulp.value(x9))
print("Cost:" ,pulp.value(problem.objective))

Numerical optimizer


http://www.msi.co.jp/nuopt/ 使用 SIMPLE 在 Python 中使用数字优化器解算器。

什么是 SIMPLE?

PySIMPLE 是数字优化器的 Python 接口。
PySIMPLE 为线性规划问题、
目标函数和约束表达式都是线性问题提供了与数字优化器的连接接口

安装

$ pip install pysimple

兼容的 Python 版本

  • Python3.6
  • Python3.7
  • Python3.8

配方问题示例

from pysimple import *

problem = Problem(name='配合問題', type=min)

# 变量
x1 = 可变(索引=1,lb=0,名称='混合比率')
x2 = 可变(索引=2,lb=0,名称='混合比率')
x3 = 可变(索引=3,lb=0,名称='混合比率')
x4 = 可变(索引=4,lb=0,名称='混合比率')
x5 = 可变(索引=5,lb=0,名称='混合比率')
x6 = 可变(索引=6,lb=0,名称='混合比率')
x7 = 可变(index=7,lb=0,名称='混合比率')
x8 = 可变(索引=8,lb=0,名称='混合比率')
x9 = 可变(索引=9,lb=0,名称='混合比率')

• 目标函数
problem += 7.3*x1 + 6.9*x2 + 7.3*x3 + 7.5*x4 + 7.6*x5 + 6.0*x6 + 5.8*x7 + 4.3*x8 + 4.1*x9

• 铅混合比
problem += 20*x1 + 50*x2 + 30*x3 +30*x4 + 30*x5 + 60*x6 + 40*x7 + 10*x8 + 10*x9 == 30
• 锌混合比
problem += 30*x1 + 40*x2 + 20*x3 +40*x4 + 30*x5 + 30*x6 + 50*x7 + 30*x8 + 10*x9 == 30
• 锡混合比
problem += 50*x1 + 10*x2 + 50*x3 +30*x4 + 40*x5 + 10*x6 + 10*x7 + 60*x8 + 80*x9 == 40

• 运行
problem.solve()

• 输出
print()
print("Cost:", problem.result.optValue())

Gurobi


https://www.engineering-eye.com/GUROBI/index.html 使用古罗比使用 40000000000000000000000000000000000000000000000000000000000000000000000000000000

安装

$ pip install gurobipy

配方问题示例

from gurobipy import *

m = Model()

X1 = m.addVar()
X2 = m.addVar()
X3 = m.addVar()
X4 = m.addVar()
X5 = m.addVar()
X6 = m.addVar()
X7 = m.addVar()
X8 = m.addVar()
X9 = m.addVar()

• 目标函数(定义要最小化的成本)
• 设置约束

m.setObjective(
    7.3*X1 + 6.9*X2 + 7.3*X3 + 7.5*X4 + 7.6*X5 + 6.0*X6 + 5.8*X7 + 4.3*X8 + 4.1*X9,
    GRB. MINIMIZE
)

• 总计为 1(100%)
m.addConstr(X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 == 1)

• 铅混合比
m.addConstr(20*X1 + 50*X2 + 30*X3 +30*X4 + 30*X5 + 60*X6 + 40*X7 + 10*X8 + 10*X9 == 30)
• 锌混合比
m.addConstr(30*X1 + 40*X2 + 20*X3 +40*X4 + 30*X5 + 30*X6 + 50*X7 + 30*X8 + 10*X9 == 30)
• 锡混合比
m.addConstr(50*X1 + 10*X2 + 50*X3 +30*X4 + 40*X5 + 10*X6 + 10*X7 + 60*X8 + 80*X9 == 40)

• 检查问题定义
print(m)

• 运行
m.optimize()

print("X1:" ,X1.x)
print("X2:" ,X2.x)
print("X3:" ,X3.x)
print("X4:" ,X4.x)
print("X5:" ,X5.x)
print("X6:" ,X6.x)
print("X7:" ,X7.x)
print("X8:" ,X8.x)
print("X9:" ,X9.x)
print("Cost:" ,m.objVal)

深度技术杂志在这里“深度杂志”

https://deep-recommend.com/magazine