自定义约束 OR-Tools // 约束编程

Posted

技术标签:

【中文标题】自定义约束 OR-Tools // 约束编程【英文标题】:Custom constraint OR-Tools // Constraint programming 【发布时间】:2018-06-17 05:11:07 【问题描述】:

我正在使用 OR-Tools 约束编程工具解决几何问题。

谁能告诉我创建自定义约束的过程? 我不太了解恶魔,模型访问者行为......

另外,可以插入任何类型的约束吗?

提前谢谢你

【问题讨论】:

请详细说明您的问题:您要添加什么样的约束?您尝试了哪些方法,得到了哪些反馈? 我使用 Or-tools 在某些约束下生成多边形。我想知道是否可以使用其他库的函数创建自定义约束(我认为尤其是在我的情况下是 Boost,尤其是 Boost 几何)。考虑 (Xi, Yi) 多边形点的坐标。我想创建这种类型的约束: void AreaConstraint (Solver * solver, IntVar * X1, IntVar * Y1, IntVar * X2, IntVar * Y2, IntVar * X3, IntVar * Y3, IntVar * X4, IntVar * Y4, IntVar * X5, IntVar * Y5, IntVar * X6 , IntVar * Y6) int64 x [] = X1 -> Value (), X2 -> Value (), X3 -> Value (), X4 -> Value (), X5 -> Value (), X6 -> 值(); int64 y [] = Y1->Value(),Y2->Value(),Y3->Value(),Y4->Value(),Y5->Value(),Y6->Value(); -> 还有一个问题,我显然没有“权限”访问 Xi -> Value()。 我尝试创建一个与以下样式相同的类:class AllDifferentExcept : public Constraint .... 【参考方案1】:

要编写约束,您需要了解在搜索期间,变量不会被实例化(域被简化为单个值)。因此,调用 Value() 不起作用。

您可以访问当前域(最小值、最大值、可能值列表,然后您可以从那里编写扣除规则)。

见https://github.com/google/or-tools/blob/stable/examples/cpp/dobble_ls.cc。

现在,CP 求解器被 CP-SAT 求解器取代,它不允许编写自定义约束。在这种情况下,也许你可以用布尔逻辑和算术运算符来表达你的约束。

【讨论】:

以上是关于自定义约束 OR-Tools // 约束编程的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView 中删除以编程方式自定义的 UITableViewCell 时约束中断

自定义 tableviewcell 动态高度未根据约束更新(以编程方式自动布局)

以编程方式约束 Dynamic ViewController 中的自定义 UIView

以编程方式添加控制器视图时自定义自动布局约束被破坏

我在自定义 UITableViewCell 中以编程方式设置布局约束时遇到问题

如何以编程方式将纵横比约束应用于自定义 UICollectionViewCell?