2015-10-27 14 views
0

Я пытаюсь решить FLP используя PuLP. Я хочу добавить логическое ограничение для значения переменной.Как добавить логические ограничения в PuLP

У меня есть LpVariable f и C - список LpVariables. Я хочу добавить f к ограничению проблемы и которая зависит от значений c [i].

Ниже фрагмент кода>

prob = LpProblem("The MILP problem", LpMinimize) 

Добавлено первый ограничение:

prob += lpSum(c[i] for i in range (len(c))) == 2 

Теперь я хочу добавить следующее ограничение:

if`lpSum(c[i] for i in range (len(c))) > 1: 
`  prob += f == 1 
    else: 
     prob += f == 0 


prob += lpSum(c[i] for i in range (len(c)) + f) 

Теперь проблема является LpVariables с [я] инициализируются None и, следовательно, он выдает ошибку при вычислении lpSum().

Надеюсь, я поняла. Дайте мне знать, если вам нужна помощь в понимании этого запроса, но я думаю, что данный фрагмент кода достаточно.

ответ

1

Три точки:

(1) Ваше первое ограничение заставляет lpsum быть равен 2, так е всегда будет 1 в вашем примере - вы уверены, что ваша формулировка является правильным?

(2) Если утверждения не могут использоваться в сочетании с lpSum - вы должны сформулировать его как фактическое ограничение.

Например, можно определить как п двоичной переменной и добавить это ограничение:

prob += lpSum(c[i] for i in range (len(c))) - 1 <= M*f 

, где М представляет собой достаточно большое число. Тогда, если f == 0, мы имеем, что «lpsum() < = 1», и если f == 1, то lpsum может быть чем угодно. Играйте с такими ограничениями, чтобы заставить вас вести себя так, как вы хотите.

(3) Ограничение «prob + = lpSum (c [i] для i в диапазоне (len (c)) + f)« ничего не делает, если это не предполагается целью вашего MILP? Если это так, вы должны добавить его сразу после того, как prob = LpProblem («Проблема MILP», LpMinimize)

Удача