2015-02-07 185 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