Python纸浆增加了罚款

时间:2020-01-16 17:32:05

标签: python pulp minimization

目前,我正在研究纸浆生产线最小化问题。变量{{ 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

有人可以帮我吗?

非常感谢。

1 个答案:

答案 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