目前,我正在研究纸浆生产线最小化问题。变量{{ form(form) }}
等于此问题中的数字列表的总和。如果X为正,则不应将任何惩罚加到目标上。但是,如果X
为负,则应将此作为目标的惩罚加到。这意味着在这种情况下,X
应该等于Penalty
。
例如:
-X
在这种情况下,X = lpvariable('X'-1000,1000,cat='Integer')
Penalty =lpvariable('Penalty', 0,1000,cat='Integer')
prob += Penalty # Objective
prob += 10 + 11 + -2 + -4 == X
和X=15
但是总和会是什么时候
Penalty=0
变量prob += -10+11-2-4 ==X
和罚款应为X=-5
有人可以帮我吗?
非常感谢。
答案 0 :(得分:1)
您缺少的是对Penalty
的约束。您几乎说出了这个问题。
您要强制将Penalty
设为>=
至-X
。
当X
为正数时将不起作用-Penalty
的下限已经为零,因此添加-X
的另一个下限,其中X
是一个正数什么都不做。
当X
为负数时,它就可以满足您的要求:
from pulp import *
X = LpVariable('X',-1000,1000,cat='Integer')
Penalty =LpVariable('Penalty', 0,1000,cat='Integer')
prob = LpProblem ("MinimisePenaltye", LpMinimize)
prob += Penalty # Objective
prob += Penalty >= -X
prob += X == -15
prob.solve()
# Dislay the optimums of each var
for v in prob.variables ():
print (v.name, "=", v.varValue)
返回
Penalty = 15.0
X = -15.0