影响搜索注释在 MiniZinc 中有什么作用?

What does the impact search annotation do in MiniZinc?

在MiniZinc中可以使用search annotation impact,官网解释如下:

annotation impact

Choose the variable with the highest impact so far during the search

这在实践中意味着什么?影响最大的是什么?这是怎么计算的?

要理解基于 impact 的变量 selection,您必须理解 first_fail。在约束规划中,我们通常希望首先解决最难的 sub-problem,如果找不到解决方案,则很快就会失败。 first_fail 的问题是它没有考虑变量所涉及的约束的数量,更多的是表明对变量 "harder" 的决定,或者选择对该变量在 search-tree.

的其他部分

作为旁注,dom_w_deg 可以看作是 first_failimpact 之间的折衷,其中考虑了约束条件,但过去的决定不是。

impact 变量 selection 应该是对 first_fail 的改进,其中不仅考虑了域大小,还考虑了它涉及的约束以及有多少 "impact"历史选择了。考虑到所有这些信息,影响最大的变量预计是最难分配正确值的变量。

如您所见,MiniZinc 没有提供必须如何选择变量的确切规范。 select 适合求解器的启发式由求解器实现者决定。请注意,很难提供精确的启发式指南,因为它在很大程度上取决于求解器如何跟踪其变量和约束。

关于基于影响的启发式方法的可能实现的想法,我建议阅读 Marco Correia 和 Pedro Barahona 的论文 "On the Efficiency of Impact Based Heuristics"。您还可以检查您的特定 MiniZinc/FlatZinc 求解器是否实现了启发式算法。