Python мякоть, добавляющая штраф - PullRequest
0 голосов
/ 16 января 2020

В настоящее время я работаю над проблемой минимизации пульпы. Переменная 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

Может ли кто-нибудь помочь мне с этим?

Большое спасибо заранее.

1 Ответ

1 голос
/ 16 января 2020

Чего вам не хватает, так это ограничения на 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
...