CPLEX: Как запустить ограничения подмножества в OPL? - PullRequest
0 голосов
/ 13 июля 2020

CPLEX; Смешанное целочисленное линейное программирование; Формулировка ограничения:

В наборе данных 150 городов, каждый из которых имеет несколько рынков (или «манди»). Общее количество мандисов в наборе данных = 1800. У меня есть двоичная переменная решения y [mandi] [days]. Я хочу добавить ограничение, которое гласит, что y [mandi] [days] одинаково для всех mandi в любом заданном городе в любой заданный день. y [mandi] [days] могут быть разными / одинаковыми для mandis в разных городах в один и тот же день.

Пример данных

Я ввожу данные из Excel. См. Прикрепленное изображение. Не могли бы вы мне помочь с формулировкой этого ограничения в OPL?

Один из способов добиться вышеизложенного - указать индивидуальные ограничения для набора mandis в каждом городе. Однако в этом случае количество ограничений составит 150, каждое из которых относится к одному городу. Кроме того, мы могли бы получить от клиента дополнительный список mandis для некоторых городов, который исказил бы нумерацию отображения mandi-town, и мне пришлось бы снова изменить отображение в CPLEX. Есть ли лучший способ сделать это, который мог бы использовать отображение непосредственно из Excel в прикрепленном формате изображения?

1 Ответ

0 голосов
/ 13 июля 2020

Вместо переменной решения

dvar boolean y[mandi][days]

почему бы не использовать

dvar boolean y[town][days]

?

А затем, когда вам понадобится y для данного манди, вы сначала получить город этого манди, а затем получить его y.

...