解決しようとしている MILP モデルがあります。この質問について前に説明した 新しい制約があります。私の新しい制約は次のとおりです。
場合: y[(i,j,k)]==1
次に : y[(j,i,k+1)] ,y[(j,i,k+2)],y[(j,i,k+3)] ,y[(j,i,k+ 4)],y[(j,i,k+5)],y[(j,i,k+6)],y[(j,i,k+7)],y[(j,i, k+8)==0 .
この制約を次のようにモードに設定します。
mdl.add_constraints((y[(i,j,k)]+y[(j,i,k+1)] +y[(j,i,k+2)]+y[(j,i,k+3)]
+y[(j,i,k+4)]+y[(j,i,k+5)]+y[(j,i,k+6)]+y[(j,i,k+7)]+y[(j,i,k+8)] )<=1 for k in K4 for i in T for j in T )
しかし、この新しい制約条件でモデルを実行すると、モデルの解決が非常に遅くなります。制約に何か問題がありますか?それとも、モデルをより速く解決できるように制約を変更する方法はありますか?
編集: このように条件を設定すると、実行時間は速くなりますが、モデルはソリューションの if then 制約を尊重しません。私のコード:
for i in T:
for j in T:
if i!=j:
for k in K4:
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+1)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+2)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+3)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+4)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+5)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+6)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+7)]==0))
mdl.add( mdl.if_then( y[(i,j,k)]==1 , y[(j,i,k+8)]==0))