1
我想向隨機編程問題的第一階段添加一些懶惰約束。舉例來說,最佳的解決方案表明我的位置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] for i = 16,20 –