目前,我正在研究纸浆生产线最小化问题。该变量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
和惩罚应为Penalty = 5
有人可以帮我吗?
提前谢谢了。
您缺少的是对的约束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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句