4

尝试学习 minizinc,但在通过示例之后,我可以确认如果我想获得多个输出,我实际上必须编写一些程序语言,或者有一种更“自然的 minizinc”方式来获得它。

例如,假设我想让所有不同的数字加起来为 3,答案应该是 0+3 1+2 2+1 3+0 ...

我的迷你锌在这里:

% how to generate more than one result meeting the constraints

int: n=3;

var 0..9: a;
var 0..9: b;

include "alldifferent.mzn";
constraint all_different([a, b]);
constraint a + b = n;

solve satisfy;

output [
"a + b = n \t\n",
 show(a), " + ",
 show(b), " = ",
 show(n)];

只产生 3+0。如何获得其他答案?感谢您提前提供任何建议。

我查看了 minizinc 1.6 的帖子,似乎说省略输出语句会产生所有输出(在 minizinc 中打印完整解决方案(所有决策变量)的简单方法)。这没用。只有一个输出。

4

2 回答 2

3

首先,默认是打印解决方案的所有变量及其值,而不是所有解决方案。

使用该选项-a获取所有解决方案。mzn-gecode --help查看所有选项。在你的情况下mzn-gecode -a test.mzn,它给出:

a + b = n   
3 + 0 = 3
----------
a + b = n   
0 + 3 = 3
----------
a + b = n   
2 + 1 = 3
----------
a + b = n   
1 + 2 = 3
----------
==========
于 2016-03-26T09:04:36.610 回答
1

在配置下,有一个选项可以在满意后从打印第一个解决方案中更改默认值。将其更改为用户定义的行为:打印所有解决方案......您也可以有输出语句,顺便说一句。

于 2016-03-26T03:12:54.653 回答