我有一个我正在尝试解决的 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 )
但是用这个新的constriant运行我的模型会使我的模型求解速度很慢。我的约束是否有问题,或者有没有办法改变它以使我的模型可以更快地解决?
编辑: 当我以这种方式放置条件时,运行时间很快,但模型不尊重解决方案中的 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))