如何使用 OR 工具的 CP-SAT 求解器构建我自己的全局约束?

dja*_*bkh 2 data-mining solver constraint-programming or-tools cp-sat

我是数据挖掘领域的博士候选人,我必须使用 ORtools 创建一个全局约束以用于数据挖掘目的。

问题是互联网上缺乏关于使用 CP-Sat 创建自己的全局约束的文档,我不知道如何开始。

Lau*_*ron 5

这显然是可能的,但是非常乏味,而且非常复杂。

编写一个新的约束意味着:

  • 扩展原型以支持约束
  • 编写输入验证
  • 编写解决方案检查器
  • 编写加载(进入 CP-SAT 引擎)代码
  • 编写预求解规则
  • 编写传播代码。这很复杂,因为每一项推论都需要充分解释。
  • 编写线性化/切割生成代码

最后 3 项非常容易出错,并且很难调试,因为剪切和解释的效果会延迟,有时甚至从未使用过。

出于这些原因,我建议将约束扩展到更小的约束。事实上,大多数 CP 约束都得到了扩展(alldiff、元素、表、存储库、逆、自动机、一些乘积、一些模)。

您还可以提交新约束的功能请求。如果它足够有用/通用的话,它就会发生。

谢谢