Я пытаюсь добавить некоторые ленивые ограничения на первый этап проблемы стохастического программирования. Например, оптимальное решение показывает мне, что места 16 и 20 выбираются вместе, которые я не хочу, так что я хочу, чтобы добавить ленивое ограничение следующим образом:Добавление ленивого ограничения в интерфейс python-Gurobi
First Stage
x1 + x2 + ... + x40 = 5
z_i,l <= x_i i=1,..,40 and l=1,2
Second Stage
....
def mycallback(model,where):
if where == GRB.Callback.MIPSOL:
sol = model.cbGetSolution([model._vars[s] for s in range(1,40)])
if sol[16] + sol[20] == 2:
Exp = LinExpr([(1,model._vars[16]),(1,model._vars[20])])
model.cbLazy(Exp <= 1)
model._vars = x
model.optimize(mycallback)
Но после запуска этой функции, места 16 и 20 все еще находятся в оптимальном решении. Не могли бы вы сообщить мне, как я должен атаковать эту проблему?
Проверьте использование функции range(). –
Когда я проверяю model._vars [s] для указанного диапазона, он дает мне оптимальное значение (0-1) для каждого местоположения правильно. Не могли бы вы указать, как проверить диапазон? – user36729
В вашем коде выше, _vars [i]! = Sol [i] для i = 16,20 –