У меня простой вопрос по синтаксису Minizinc. Мой входной файл .dzn содержит набор из 2-х мерных массивов (примерно до 30 массивов), объявленных следующим образом:
rates_index_0 = array2d(1..3, 1..501, [ 15, 20, 23, ....
rates_index_12 = array2d(1..3, 1..501, [ 21, 24, 27, ....
...
примечание: в индексных номерах есть пробелы (например, 12 -> 20)
В моей модели мне нужно использовать один из этих массивов в зависимости от значения переменной. На обычном языке программирования я бы решил это, используя карту или структуру данных словаря. Но в Minizinc я жестко это кодирую следующим образом:
function var int: get_rate(int: index, var int: load, int: dc_size) =
if index == 0 then
rates_index_0[dc_size, load]
else if index == 12 then
rates_index_12[dc_size, load]
else if index == 16 then
rates_index_16[dc_size, load]
else if index == 20 then
rates_index_20[dc_size, load]
else
assert(false, "unknown index", 0)
endif endif endif endif;
Одна очевидная проблема с этим кодом заключается в том, что мне нужно менять модель каждый раз, когда я меняю ввод. Есть ли лучший способ, как я могу кодировать это обычным способом?
Спасибо!