在 Java 中乘/加 Google OR Tools IntVar 和常量
Posted
技术标签:
【中文标题】在 Java 中乘/加 Google OR Tools IntVar 和常量【英文标题】:Multiply / add Google OR Tools IntVar's and Constants in Java 【发布时间】:2021-05-07 13:45:56 【问题描述】:我目前开始使用 Java 中的 Google OR Tools CP-Sat Solver 并面临简单的数学方程式问题,包括常量和 OR-Tools 内部“IntVar”。
我的问题的一个小例子:
// Variables
IntVar a = model.newIntVar(0, 5, "a");
IntVar b = model.newIntVar(0, 5, "b");
int c = 1;
// Constraint
model.addEquality(a, a * c); // Cannot apply * with IntVar and int
model.addEquality(a, a + b); // Cannot Apply + with IntVars
// What I want to achieve
model.addEquality(a, a * c + b);
我习惯了 Python,这些类型的问题并不真正存在,有一个简单的model.Add(a == a * c + b)
完成了这项工作。
Or-Tools LinearExpr.sum 或 LinearExpr.term 根本没有帮助我。
有没有人处理过 Java 中的 CP-Sat 优化问题并知道解决方法?
【问题讨论】:
【参考方案1】:java 中没有运算符重载。 所以你被 LinearExpr 方法困住了。
【讨论】:
据我了解,我也坚持使用 LinearExpr,因为我无法将 LinearExpr 对象转换为 IntVar。使用d = LinearExpr.term(a,c)
,我做了乘法部分,最后得到了一个我不能在LinearExpr.sum(d, b)
中使用的LinearExpr 对象,因为它只需要IntVar 对象。
所以 LinearExpr.ScalProd(new IntVar[]a, b, new int[]c, 1)。笨重,但这是java。我不想支持嵌套表达式。
就是这样。非常感谢:)以上是关于在 Java 中乘/加 Google OR Tools IntVar 和常量的主要内容,如果未能解决你的问题,请参考以下文章
在 Anaconda 的 Windows 上安装 witwidget(google what-if too)时面临问题
Caused by: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
baksmali反编译出现:UNEXPECTED TOP-LEVEL ERROR:....Too many open files
Too many authentication failures for