У меня есть модель MILP, которую я пытаюсь решить. У меня есть новая константа, которую я объяснял ранее на этот вопрос Мое новое ограничение:
if: 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 )
Но запуск моей модели с этой новой константой приводит к очень медленному решению моей модели . Что-то не так с моим ограничением или есть способ изменить его таким образом, чтобы моя модель могла быть решена быстрее?
Редактировать: Когда я задаю свое условие таким образом, запускается время быстро, но модель не учитывает ограничение «если то, то» в решениях. мой код:
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))