Choco 求解器传播和搜索策略交互

Choco solver propogation and search strategy interaction

我已经开始在我的工作中使用 choco-solver 并且不明白传播者和搜索策略如何相互影响。

我认为 choco 有一些标志可以显示在传播过程中是否有任何约束变量域发生变化。如果存在,则传播会一次又一次地开始,直到没有域发生变化。之后,如果约束仍然不满足或失败,搜索策略将连接到求解过程。

但是我的程序输出显示我错了。 Propogator 确实工作了 2 或 3 次,每次都更改域,然后调用搜索策略。

请帮帮我,我的结论哪里错了? 或者它应该按照我的想法工作并且我的代码中存在一些错误,导致错误的输出?

抱歉我的英语不好

Choco 是一个约束规划求解器,这些求解器都根据相同的原理工作。

与强力搜索不同,约束求解器将首先调用所有(相关)传播器以从变量域中删除它知道变量不能采用的值。调用一个传播者可能会触发新值变得不可能,因此可能会触发其他传播者再次 运行。

一旦所有传播者报告他们不能再删除值(我们称之为固定点),将咨询搜索策略以查看下一步该做什么。 (一般来说,这是对解决方案的猜测,我们可能需要回溯)。

如果所有变量只有一个可能值,这就是一个解。然而,在我们的搜索中,变量可能会丢失所有可能的值。在这种情况下,传播者将失败。如果我们已经使用了搜索,我们将需要回溯。如果这是在根节点,那么这意味着问题是不可满足的。

更多信息,请尝试几个约束求解器的教程。 Wikipedia 上可以找到很多。您也许还可以找到在线课程。

要完成 Dekker 的回答,根据我的经验,在实践中通常在相当少的迭代次数内达到固定点。这仍然可能很慢(因为有很多约束或因为 "global constraints" 传播速度可能很慢)但乒乓效应很少见。 Choco Solver 和类似的求解器有很多技巧可以有效地传播...

所以每个传播器在分支之前只被调用2-3次是完全可以的。