Google Or-tools 约束析取

Posted

技术标签:

【中文标题】Google Or-tools 约束析取【英文标题】:Google Or-tools disjunction of constraints 【发布时间】:2014-03-23 13:20:31 【问题描述】:

我想使用 Google or-tools Java api,但无法分离约束。我尝试这样实现:(A==1 OR B==1) AND ((C==1 OR D==1))... 我该怎么做?

另一个问题是我如何实现 makeSumLessOrEqual(IntVar[] VARS, IntVar limit) 因为只有 makeSumLessOrEqual(IntVar[] VARS, int limit) 函数。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我想使用 Google or-tools Java api,但无法分离约束。我尝试这样实现:(A==1 OR B==1) AND ((C==1 OR D==1))... 我该怎么做?

使用solver.makeIsEqualCstVar(A, 1) 创建布尔变量

ORsolver.makeMax(boolvar_1, boolvar_2)ANDsolver.makeMin();

另一个问题是我如何实现 makeSumLessOrEqual(IntVar[] VARS, IntVar limit) 因为只有 makeSumLessOrEqual(IntVar[] VARS, int limit) 函数。

您需要将makeScalProd API 与[1, .., 1, -1]vars + [limit] 一起使用。

【讨论】:

不过,我还是推荐使用 CP-SAT 求解器。你可以看看:github.com/google/or-tools/blob/stable/ortools/sat/doc/…、github.com/google/or-tools/blob/stable/ortools/sat/doc/…和developers.google.com/optimization/cp。

以上是关于Google Or-tools 约束析取的主要内容,如果未能解决你的问题,请参考以下文章

在 google ortools 中添加析取约束

Google or-tools 库中约束的布尔运算

在 Java 中使用 google or-tools 进行除法不等式约束

addDivisionEquality with Java google or-tools CP-SAT

如何在 Google OR-Tools Route Optimization 中限制每辆车的位置数量

or-tools:将 BoundIntegerExpression 转换为 IntegerExpression