假设我要计算 {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
它让我计算解决方案而不是找到它们?
没有MiniZinc声明可以让您这样做。
然而,许多FlatZinc 求解器(例如 Gecode)会在设置统计参数(通常为“-s”)时显示解的数量。MiniZinc/FlatZinc 标准中并未具体说明该统计数据的显示方式。
归档时间: |
|
查看次数: |
1631 次 |
最近记录: |