OR-Tools:一个 IntVar 是一个 IntVar 减去 Java 中的另一个 IntVar?

OR-Tools: An IntVar that is one IntVar minus another IntVar in Java?

我在 Java 中使用 CP-SAT 求解器,我的 objective 是最小化 IntVars 数组的最大值和最小值的范围。

为 Java 中的数组中的最大值和最小值创建 IntVars 没有问题。挑战在于在 Java 中创建范围 IntVar。在 Python 中很简单:

range = model.NewIntVar(1, 1000, "range")
model.Add(range == max - min)
model.Minimize(range)

我知道在 Java 中使用 OR-Tools 我需要使用 model.addEquality,而不是 ==。但是如何完成减法得到'range' IntVar呢?我想在包含最大值和最小值的负值的 IntVar[] 上使用 LinearExpr.sum,其中最小值的负值来自:LinearExpr.term(min, -1)。但是 LinearExpr.term returns 一个 LinearExpr,而 LinearExpr.sum 只接受 IntVars 数组。

如何在 Java 中完成?

繁琐的java方式:-)

model.AddEquality(LinearExpr.Sum(new IntVar[] {x, y}), 1);

这是兔子+野鸡的表现sample