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)
创建布尔变量
OR
是 solver.makeMax(boolvar_1, boolvar_2)
和
AND
是 solver.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 约束析取的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中使用 google or-tools 进行除法不等式约束
addDivisionEquality with Java google or-tools CP-SAT