Как количественно оценить все подмножества MiniZinc

Я хотел бы создать ограничение для каждого подмножества набора целых чисел в MiniZinc, в соответствии со строками этого ...

constraint forall (S subset C, k in M) (
    % Some constraint over the set S, and integer k
);

Я также хотел бы использовать в ограничении мощность S, а C - это просто набор целых чисел. Есть ли синтаксис для подмножества, который я могу использовать? (указанная выше модель не работает).


person haz    schedule 01.11.2016    source источник


Ответы (1)


В настоящее время нет генераторов массивов / наборов наборов; таким образом, не существует жизнеспособного способа перебора всех подмножеств данного набора, кроме ручного перечисления набора мощности в файле данных.

В большинстве случаев модель может быть переформулирована так, что в этих генераторах нет необходимости. Рассмотрим, например, использование вместо этого набора переменных:

var set of C: S;
% or if you want to declare S in a different way:
% var set of 0..100: S; % Different declaration
% constraint S subset C;
forall (k in M) {
  % some cool constraints
}

Это позволит вам создавать модели, включающие ограничения, заявляющие: «Существует такой набор S, при котором выполняются все ограничения».

person Dekker1    schedule 03.11.2016
comment
Но как заставить универсальную количественную оценку S? Это все (S подмножество C), а не существует. Могу ли я каким-то образом насаждать двойное отрицание? - person haz; 03.11.2016
comment
@haz Насколько мне известно, нет прямого решения, которое подходило бы к ситуации, которую вы описываете. Как я уже сказал, модель потребует переформулирования. Если бы вы могли предоставить какие-либо подробности, возможно, я мог бы вам помочь. - person Dekker1; 03.11.2016
comment
Нет, достаточно честно. Я могу заново моделировать вещи, чтобы заставить их работать, но я просто пытался оставаться верным модели MIP, указанной в учебнике, чтобы продемонстрировать прямое кодирование в MiniZinc. Для этого потребуется другой набор переменных / ограничений, но это не должно иметь большого значения. Спасибо. - person haz; 03.11.2016