1
確率的プログラミング問題の第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は依然として最適解です。この問題をどのように攻撃すべきか教えてください。
if sol[16] + sol[20] == 2:
コードで
range()関数の使用を確認してください。 –
指定した範囲のmodel._vars [s]をチェックすると、各場所の最適値(0-1)が正しく与えられます。範囲を確認する方法をさらに指定してください。 – user36729
上記のコードでは、_vars [i]!= sol [i] for i = 16,20 –