【问题标题】:Multiply / add Google OR Tools IntVar's and Constants in Java在 Java 中乘/加 Google OR Tools IntVar 和常量
【发布时间】: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 优化问题并知道解决方法?

【问题讨论】:

    标签: java optimization or-tools cp-sat-solver


    【解决方案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。我不想支持嵌套表达式。
    • 就是这样。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2020-07-10
    • 2020-04-21
    相关资源
    最近更新 更多