Подсчет общего количества решений с помощью minizinc

Допустим, я хочу подсчитать количество 80 подмножеств элементов {1,2, .. 100}, чтобы их сумма была 3690.

У меня такая модель:

array[1..100] of var 0..1: b;

constraint (sum (i in 1..100) (i*b[i])) == 3690;
constraint (sum (i in 1..100) (b[i])) == 80;

solve satisfy;

Чтобы подсчитать общее количество решений, я запускаю

$ ./minizinc --all-solutions ~/Documents/code/xmas.mzn > sol.out
$ wc -l sol.out

По сути, я распечатываю все решения и считаю их. Есть ли более простой оператор minizinc вместо solve satisfy, который позволяет мне подсчитывать решения, а не искать их?


person Agnishom Chattopadhyay    schedule 24.12.2016    source источник


Ответы (1)


Не существует инструкции MiniZinc, позволяющей это сделать.

Однако многие решатели FlatZinc, такие как Gecode, показывают количество решений, когда установлен параметр статистики (обычно "-s"). В стандарте MiniZinc / FlatZinc нет точного представления этой статистики.

person hakank    schedule 24.12.2016