2015-02-07 157 views
0

编写我的第一个非平凡的MiniZinc应用程序,我一直遇到错误“无法确定边界”。人们通常如何解决这个错误?MiniZinc“无法确定边界”

+0

如果您显示模型(或仍然会出现此错误的段),则更容易回答此问题。你使用什么FlatZinc解算器? – hakank 2015-02-07 17:15:56

回答

0

一般而言,“无法确定边界”意味着求解器无法确定决策变量的边界(域)。

如果可能,应避免使用“var int”作为决策变量的域,因为它可能会减慢求解过程。有时候求解器可以找出域,例如在例如

% ... 
var int: z = sum(x); 

当“x”具有声明的域时。但是,通常,尝试定义域。

+0

我意识到“无法确定边界”意味着求解器无法确定边界。但是这是什么时候发生的 - 也许一个简单的例子就会有一些亮点。此外,我认为“var”表示一个决策变量,并且它们是CP的整个点 - 指定对未知值的约束 - 所以为什么建议避免它们?我正在使用G12 fd。 – 2015-02-07 21:55:47

+0

那么,“var int”是具有巨大(最大可能)域的决策变量,这将使解算器尝试该域中值的所有可能值。 “var 0..10”也是一个决策变量,但具有可能值更小的域。您应该尝试限制域名尽可能小,因为这会加快速度。如果你限制决策变量的领域会发生什么?你使用什么MiniZinc版本?我知道在MiniZinc 2的一些早期版本中,有一些这些错误是在稍后修复的。 – hakank 2015-02-07 22:59:10

+0

啊,我使用了很多数组,如var int:X的“array [1 .. n]”;并没有意识到它应该是“var 1 ... 10:X”的“array [1 ..n]”。谢谢。使用0.9.6。但求解器是否真的尝试“所有”值?我认为他们比这更聪明。 – 2015-02-08 08:44:09