有没有办法在 minizinc 中自定义 int_search?
Is there a way to customize int_search in minizinc?
我正在处理图形着色问题,想知道是否可以指定搜索策略。
我找到了搜索注释,例如 int_search(q, first_fail, indomain_min)
,但是例如,我希望算法选择具有最高节点度数的下一个节点,假设它会导致更快的失败,因为具有高度数的节点删除了来自许多变量(其邻居)域的颜色。那我可以这样做吗?
(这里我假设 degree
是指连接到特定变量的变量数。)
遗憾的是,MiniZinc 不支持用户定义的搜索策略。查看支持的搜索注释的完整列表:https://www.minizinc.org/doc-2.5.5/en/fzn-spec.html#annotations .
(MiniSearch
, https://www.minizinc.org/minisearch/documentation.html, 是一个旧项目,本来是要提供这个功能的,但是它没有集成在当前版本的 MiniZinc 中。我希望 MiniZinc v3 有这个功能.)
此外,MiniZinc 没有任何反射函数来获取变量的度数,否则可以使用它来进行搜索。
最接近的现有搜索策略可能是:
dom_w_deg
:选择域大小除以加权度的最小值的变量,其中加权度是变量在约束中失败的次数
occurrence
:选择附加约束数量最多的变量`
请注意,并非所有 FlatZinc 求解器都支持这些搜索策略。
(如果 first_fail
对传统 CP 求解器的效果不如预期,occurence
一直是最喜欢尝试的人。)
另一件事:有一些 FlatZinc 求解器 - 特别是 Chuffed,Google OR-tools CP-SAT,也许还有 PicatSAT - 使用 SAT / Lazy 子句技术,使用免费搜索通常速度更快标志 (-f
),即忽略搜索注释,并且它们 - 如果可能的话 - 通常至少尝试一下是好的。您可以在去年的 MiniZinc 挑战赛中看到 FlatZinc 求解器的性能:https://www.minizinc.org/challenge2020/results2020.html
现在,我倾向于使用几个 FlatZinc 求解器来测试更大的模型,尤其是上面提到的那个。
我正在处理图形着色问题,想知道是否可以指定搜索策略。
我找到了搜索注释,例如 int_search(q, first_fail, indomain_min)
,但是例如,我希望算法选择具有最高节点度数的下一个节点,假设它会导致更快的失败,因为具有高度数的节点删除了来自许多变量(其邻居)域的颜色。那我可以这样做吗?
(这里我假设 degree
是指连接到特定变量的变量数。)
遗憾的是,MiniZinc 不支持用户定义的搜索策略。查看支持的搜索注释的完整列表:https://www.minizinc.org/doc-2.5.5/en/fzn-spec.html#annotations .
(MiniSearch
, https://www.minizinc.org/minisearch/documentation.html, 是一个旧项目,本来是要提供这个功能的,但是它没有集成在当前版本的 MiniZinc 中。我希望 MiniZinc v3 有这个功能.)
此外,MiniZinc 没有任何反射函数来获取变量的度数,否则可以使用它来进行搜索。
最接近的现有搜索策略可能是:
dom_w_deg
:选择域大小除以加权度的最小值的变量,其中加权度是变量在约束中失败的次数occurrence
:选择附加约束数量最多的变量`
请注意,并非所有 FlatZinc 求解器都支持这些搜索策略。
(如果 first_fail
对传统 CP 求解器的效果不如预期,occurence
一直是最喜欢尝试的人。)
另一件事:有一些 FlatZinc 求解器 - 特别是 Chuffed,Google OR-tools CP-SAT,也许还有 PicatSAT - 使用 SAT / Lazy 子句技术,使用免费搜索通常速度更快标志 (-f
),即忽略搜索注释,并且它们 - 如果可能的话 - 通常至少尝试一下是好的。您可以在去年的 MiniZinc 挑战赛中看到 FlatZinc 求解器的性能:https://www.minizinc.org/challenge2020/results2020.html
现在,我倾向于使用几个 FlatZinc 求解器来测试更大的模型,尤其是上面提到的那个。