Переменная решения MiniZinc, несмежный диапазон

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

Пример: enum PRODUCTS = {product_1, product_2, product_3, product_4};

массив [ПРОДУКТЫ] переменных 0..2: x; // непрерывный массив [ПРОДУКТЫ] var 0,3,10: y; /// несмежная последовательность и ошибка

Я также пробовал с набором int

например набор int: y_range = 0,1,3;

enum PRODUCTS = {product_1, product_2, product_3, product_4};

массив [ПРОДУКТЫ] переменных 0..2: x; // непрерывный массив [ПРОДУКТЫ] var y_range: y; /// несмежная последовательность и ошибка

но не сложилось ..


person user2829319    schedule 30.08.2018    source источник


Ответы (1)


В MiniZinc разрешены прерывистые домены. Похоже, вы только что ошиблись в синтаксисе. Следующий код работает:

enum PRODUCTS ={product_1,product_2,product_3,product_4};
array [PRODUCTS] of var {0,3,10} : y;

Обратите внимание, что для прерывистого литерала набора, который инициализирует домены ваших переменных, нужны фигурные скобки ({}).

person Dekker1    schedule 30.08.2018