Почему мой кортеж для временных точек прерывания [m, m + 1] не работает? - PullRequest
1 голос
/ 31 мая 2019

Я надеюсь, что кто-нибудь может мне помочь. Я смоделировал проблему маршрутизации автомобиля с временными окнами и опцией аутсорсинга, кроме того, я хочу сделать модель зависимой от времени. Для этого я сделал несколько часовых поясов, которые нужно подключить

 {<0,120>,<120,600>,<600,720>,<720,1400>}. 

Эти часовые пояса необходимы, потому что в каждом часовом поясе автомобиль движется с разной скоростью.

Проблема, с которой я сталкиваюсь, заключается в моделировании ограничения, при котором время отправления транспортного средства k у клиента i

<code>a[i][k]</code> 
должен быть связан с правильным часовым поясом. Как только я инициализирую часовые пояса, модель дает мне неправильное решение.
 tuple timezone{
 int m;
 int mend;
 };

{timezone} timezones = {<0,120>,<120,600>,<600,720>,<720,1400>};

forall (i in N, k in K, m in timezones)
  a[i][k] <=   m.mend * sum (j in N) G[i][j][k][m]; 

forall (i in N, k in K, m in timezones)
  a[i][k] >=   m.m * sum (j in N) G[i][j][k][m];

Где G[i][j][k][m] - логическая переменная, сообщающая, проходит ли дуга с транспортным средством k в часовом поясе m. И m.m - это начало часового пояса, а m.mend - это конец часового пояса.

Кортеж работает, когда я заявляю, что есть только один часовой пояс, как

{timezone} timezones = {<0,900>};

Но только для первого ограничения

a[i][k] >=   m.m * sum (j in N) G[i][j][k][m];

Когда я добавляю это ограничение к модели:

a[i][k] >=   m.m * sum (j in N) G[i][j][k][m];

Модель больше не работает

Я ожидаю, что у некоторых клиентов у меня есть работа на стороне, а некоторые доставляются с частным парком. Как только я пытаюсь работать с часовыми поясами, модель прямо говорит, что каждый клиент передается на внешний подряд.

Кто-нибудь знает, что не так с кортежем? Потому что я думаю, что само ограничение довольно простое и должно работать.

...