我正在处理图形着色问题,想知道是否可以指定搜索策略。
我找到了搜索注释,比如int_search(q, first_fail, indomain_min)
,但例如,我希望算法选择具有最高节点度数的下一个节点,假设这会导致更快的失败,因为具有高度数的节点从许多变量(其邻居)的域中删除了颜色。那么我可以这样做吗?
(这里我假设通过degree
您的意思是连接到特定变量的变量数量。)
不幸的是,MiniZinc 不支持用户定义的搜索策略。查看支持的搜索注释的完整列表:https://www.minizinc.org/doc-2.5.5/en/fzn-spec.html#annotations https://www.minizinc.org/doc-2.5.5/en/fzn-spec.html#annotations .
(MiniSearch
, https://www.minizinc.org/minisearch/documentation.html https://www.minizinc.org/minisearch/documentation.html,是一个旧项目,旨在提供此功能,但它没有集成到当前版本的 MiniZinc 中。我希望 MiniZinc v3 也有这个功能。)
此外,MiniZinc 没有任何反射函数来获取变量的度数,否则可以使用它来进行搜索。
最接近的现有搜索策略可能是:
请注意,不确定所有 FlatZinc 求解器都支持这些搜索策略。
(occurence
顺便说一下,如果first_fail
传统 CP 求解器的工作效果不如预期。)
另一件事:有一些 FlatZinc 求解器 - 特别是 Chuffed、Google OR-tools CP-SAT,也许还有 PicatSAT - 使用 SAT / Lazy 子句技术,使用免费搜索标志通常会更快(-f
),即忽略搜索注释,如果可能的话,至少尝试一下通常是好的。您可以在去年的 MiniZinc 挑战赛中看到 FlatZinc 求解器的表现:https://www.minizinc.org/challenge2020/results2020.html https://www.minizinc.org/challenge2020/results2020.html
如今,我倾向于使用几个 FlatZinc 求解器来测试更大的模型,尤其是上面提到的那个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)