繁体   English   中英

Python 纸浆加罚

[英]Python pulp adding a penalty

目前我正在研究纸浆线空气最小化问题。 变量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=15Penalty=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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM