使用 minizinc 计算溶液总数

Agn*_*yay 5 minizinc

假设我要计算 {1,2,..100} 的 80 个元素子集的数量,使得它们的总和为 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;
Run Code Online (Sandbox Code Playgroud)

为了计算解决方案的总数,我运行

$ ./minizinc --all-solutions ~/Documents/code/xmas.mzn > sol.out
$ wc -l sol.out
Run Code Online (Sandbox Code Playgroud)

本质上,我正在打印所有的解决方案并计算它们。有没有一个更简单的 minizinc 语句来代替solve satisfy它让我计算解决方案而不是找到它们?

hak*_*ank 6

没有MiniZinc声明可以让您这样做。

然而,许多FlatZinc 求解器(例如 Gecode)会在设置统计参数(通常为“-s”)时显示解的数量。MiniZinc/FlatZinc 标准中并未具体说明该统计数据的显示方式。