首页 > 解决方案 > 蟒蛇浆加罚

问题描述

目前我正在研究纸浆线性空气最小化问题。该变量X等于该问题中数字列表的总和。如果 X 为正,则不应向目标添加任何惩罚。但是,如果X为负数,则应将其添加到目标的 as 惩罚中。这意味着在这种情况下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

有人可以帮我解决这个问题吗?

提前谢谢了。

标签: pythonpulpminimization

解决方案


您缺少的是对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

推荐阅读