【问题标题】:Custom constraint OR-Tools // Constraint programming自定义约束 OR-Tools // 约束编程
【发布时间】: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 { ....}

标签: constraint-programming or-tools


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多