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

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

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

Я начал моделировать, используя операцию "набор V в K" для наборов, но для этого необходимо, чтобы V был тем же набором, или подмножеством K, где K - набор, представляющий "узлы" - Kir, Sto и т. Д. и V - это набор имен терминалов "Terminal1", "Terminal2" и т. д.

Я начал проверять, например, "установить 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. Я не понимаю, как это можно смоделировать, используя четырехмерный набор К.

С Уважением,

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},

Другие вопросы по тегам