【发布时间】:2018-06-25 13:51:06
【问题描述】:
我必须用纸浆解决 Python 中的整数线性优化问题。 我解决了基本问题,现在我必须添加额外的约束。 有没有人可以帮助我添加带有逻辑指示器的条件? 逻辑限制是:B>5 if A>20
这是我的代码:
from pulp import *
prob = LpProblem("The Optimization Problem", LpMaximize)
A = LpVariable("A", 0, 100)
B = LpVariable("B", 0, 200)
C = LpVariable("C", 0, 100)
R1 = LpVariable("R1", 0)
R2 = LpVariable("R2", 0)
R1 = 0.1 * A + 0.2 * B + 0.075 * C
R2 = 0.05 * A + 0.1 * B + 0.05 * C
prob += 2 * A + 3 * B + 2.55 * C - 0.6 * R1 - 0.8 * R2
prob += 0.5 * A + 0.8 * B + C <= 100, "T1"
prob += 0.8 * A + 0.6 * B + 0.2 * C <= 100, "T2"
prob.writeLP("OptimizationModel.lp")
prob.solve()
print("Status:", LpStatus[prob.status])
for v in prob.variables():
print(v.name, "=", v.varValue)
【问题讨论】:
-
您能否验证我的想法是否正确?我已经输入了变量 f:
f = LpVariable('f', cat="binary")并添加了条件:prob += A - 20 <= f * 5, prob += B >= f可以吗? -
显然不是你想要的 B >= 5 而不是 B >= f = 0/1。此外,您将需要一些类似 bigM 的常量。
-
ok,但是我要考虑B的下界。我已经更改了f初始化函数
f = LpVariable('f',0,1,cat='Integer')和代码prob += A - 20 <= f * M, prob += B >= f*5,但我仍然不知道代码是否正确。
标签: python optimization pulp integer-programming