AMPL: моделирование терминалов в городе назначения

Я столкнулся с проблемой, решения которой я не нашел для чтения документации наборов AMPL.

Я хочу смоделировать, что в городе, скажем, Кир, должно быть, например, 9 доставок из другого города, например Сто. Однако эти поставки должны прибывать в Кир на некоторые конкретные терминалы, каждый из которых открыт только на небольшое количество времени (около 2 минут) каждый день. То же самое должно быть верно для исходного узла. Маршрут от Sto должен быть указан с определенного терминала (чтобы в результатах можно было «проследить» путь).

Я начал моделировать, используя операцию «установить V в K» для наборов, но для этого требуется, чтобы V был тем же набором или подмножеством K, где K - это набор, представляющий «узлы» - Kir, Sto и т. Д. on и V - это набор названий терминалов «Терминал1», «Терминал2» и т. д.

Я начал проверять, например, «установить размер K 4», определяемый, например, как:

 set K dimension 4;

 data;

 set K:=
 Sto Kir Terminal1 Terminal2
 Bod Kir Terminal3 Terminal2;

Где набор K представляет, из какого города (например, Sto) должна осуществляться доставка (например, в Kir), где терминал отправления в Sto - это Terminal1, а терминал доставки в Kir - это Terminal2. У этого есть обратная сторона, заключающаяся в том, что необходимо указывать большое количество комбинаций (только в Kir около 22 терминалов и т. Д.) Вручную. Тогда я тоже не знаю, как моделировать ограничения. Например, набор "одного измерения", который у меня был ранее:

subject to yvar{i in V, j in V}:
    sum{k in H} x[i,j,k] <= maxVisits[i,j];

где V - это набор только городов, а H - набор транспортных средств, maxVisits представляет максимальное количество доставок из города i в город j, а x равен 1, если доставка осуществляется из i в j с использованием транспортного средства k. Я не понимаю, как это можно смоделировать, используя четырехмерное множество К.

С уважением,


person Cenderze    schedule 06.10.2014    source источник


Ответы (1)


Один из способов смоделировать это - проиндексировать x над K и H и изменить суммирование, чтобы включить терминалы:

var x{K, H} binary;
subject to yvar{i in V, j in V}:
  sum{(i,j,t,u) in K, k in H} x[i,j,t,u,k] <= maxVisits[i,j];

Индексирование (i,j,t,u) in K в суммировании будет проходить по парам терминалов, которые являются конечными точками маршрутов из города i в город j. Обратите внимание, что i и j здесь зафиксированы, потому что они определены в индексировании ограничений {i in V, j in V}.

person vitaut    schedule 06.10.2014
comment
В течение последнего вечера я очень много думал об этой проблеме, размышляя о реализации четырехмерного набора K, и понял, что в нем есть некоторые недостатки. Это каким-то образом запретит программе находить новые решения, то есть новые комбинации терминальных маршрутов и так далее, поскольку это скорее предопределенные решения. Хм ... ну, если подумать, я думаю, это вопрос того, как указать данные. Обязательно попробую адаптировать свой код для этого ответа! Большое спасибо за ответ! - person Cenderze; 07.10.2014