0
のコールバックでインデックスVARとの誤差が
は、誰かがこのエラーで私を助けてもらえ:Gurobiパイソン:怠惰な制約
Exception TypeError: 'Var' object does not support indexing in 'gurobipy.callbackstub' ignored
:
私は怠惰な制約を追加のためのコールバックを使用
が、私はこの次のメッセージを受け取りました。エラーは「選択済み」を含む行から発生します。私は成功していないコールバックの2つのバージョンをテストしようとします。私はalosがGurobi上でTSPの例を実行しようとしているが、model._vars.keys()は動作しません。私はGurobi 6.5.2とPython 2.7を使用します。印刷model._vZは与える:
[<gurobi.Var vZ_j((9, 6, 6), 3)_i((4, 7, 6), 3)_e(3, 'P2')>, <gurobi.Var vZ_j((9, 6, 6), 3)_i((4, 7, 6), 3)_e(3, 'P3')>, <gurobi.Var vZ_j((9, 6, 6), 3)_i((4, 7, 6), 3)_e(3, 'P4')>, <gurobi.Var vZ_j((9, 6, 6), 3)_i((4, 7, 6), 3)_e(3, 'P5')>, <gurobi.Var vZ_j((3, 8, 6), 2)_i((10, 7, 5), 3)_e(3, 'P1')>, <gurobi.Var vZ_j((3, 8, 6), 2)_i((10, 7, 5), 3)_e(3, 'P2')>, <gurobi.Var vZ_j((3, 8, 6), 2)_i((10, 7, 5), 3)_e(3, 'P3')>, <gurobi.Var vZ_j((3, 8, 6), 2)_i((10, 7, 5), 3)_e(3, 'P4')>, <gurobi.Var vZ_j((3, 8, 6), 2)_i((10, 7, 5), 3)_e(3, 'P5')>, <gurobi.Var vZ_j((10, 10, 6), 3)_i((4, 7, 6), 3)_e(3, 'P1')>, <gurobi.Var vZ_j((10, 10, 6), 3)_i((4, 7, 6), 3)_e(3, 'P2')>, <gurobi.Var vZ_j((10, 10, 6), 3)_i((4, 7, 6), 3)_e(3, 'P3')>, <gurobi.Var vZ_j((10, 10, 6), 3)_i((4, 7, 6), 3)_e(3, 'P4')>, <gurobi.Var vZ_j((10, 10, 6), 3)_i((4, 7, 6), 3)_e(3, 'P5')>]
[、、、、、、、、、、、、、]
おかげ
def subtourelim(model, where):
if where == GRB.Callback.MIPSOL:
vZs = model.cbGetSolution(model._vZ)
vXs = model.cbGetSolution(model._vX)
opeqp= model._OpEqP
nz=model._nz
for e in opeqp:
selected = [(model._vZ[i][0],model._vZ[i][1]) for i in range(nz) if model._vZ[i][2]==e and model._vZ[i][1]!=(b1,T)]
bti=b0
chaine_primo=[]
while True:
bti=[bt for bt in BlocsEPT if vZs[bti,bt,e]>0.5][0]
if bit!=(b1,T):
chaine_primo.append(bti)
else:
break
unvisit=[bt for bt in Blocs_EP if vXs[bt,e]>0.5 and bt not in chaine_primo]
if len(unvisit)>0:
tour = subtour(selected,unvisit,chaine_primo,Blocs_EP)
ArcsTour=[(bt0,bt1) for bt in tour for bt1 in tour if (bt0,bt1) in CBloc_T and vZs[bt0,bt1,e]>0.5]
model.cbLazy(quicksum(model._vZ[ct[0],ct[1],e] for ct in ArcsTour) <= len(tour)-1)