如何从 Java 中的多个 IntExpr 创建 IntExpr,使用 OR-Tools,与 Python 中相同

How to create IntExpr from multiple IntExpr in Java, using OR-Tools, same as in Python

在 Github 的这个问题中,设置约束的解决方案要求用户从两个表达式创建一个新表达式 https://github.com/google/or-tools/issues/685

像这样

dur_expr = time_dimension.CumulVar(delivery_index) - time_dimension.CumulVar(index)
solver.Add(dur_expr <= max_dur)

但是尝试在 Java 中做一些类似的事情会出现以下错误

The operator - is undefined for the argument type(s)com.google.ortools.constraintsolver.IntVar, com.google.ortools.constraintsolver.IntVar

知道如何在 Java 中执行此操作吗?

我设法找到了关于 IntExpr 的文档,但找不到关于如何组合表达式的任何信息

http://google.github.io/or-tools/java/classcom_1_1google_1_1ortools_1_1constraintsolver_1_1IntExpr.html

我想要实现的是确保总持续时间(即 driver 的 on-duty 时间)不超过时间限制....因为可能会有大量等待由于时间 windows,第一个仓库节点的时间,我不能简单地将时间维度限制在允许的 on-duty 时间,因为松弛将超过总允许时间。

这就是为什么我要添加以下条件

for (int i = 0; i < data.vehicleNumber; ++i) {
    solver.addConstraint(solver.makeLessOrEqual(timeDimension.cumulVar(routing.end(i))-timeDimension.cumulVar(routing.start(i)), onDutyTimeLimit));
 }

Java 不支持重载运算符。您需要在 Solver class.

上使用工厂方法

你的情况:

http://google.github.io/or-tools/java/classcom_1_1google_1_1ortools_1_1constraintsolver_1_1Solver.html#a420d96c79d5d8c45667706d19d1942d9