1

我回到了使用 Google 或 Tools CP Sat 在 Java 中的线性表达式。Clunky 甚至没有详细描述它,Java 在这里是一团糟。

我的目标是向我的 IntVar 添加一个常量,并为下一个 IntVar 排除该值。

(顺便说一句。我如何向我的 IntVar 添加一个常数已经很尴尬了,还有其他方法吗?)

IntVar a = model.newIntVar(0, someValue, "a");
IntVar b = model.newIntVar(0, someValue, "b");
IntVar one = model.newIntVar(1, 1, "I have to do this");

LinearExpr expr = LinearExpr.scalProd(new IntVar[] {a, one}, new int[] {1, constant}) // a + constant
model.addDifferent(b, expr) // Error because addDifferent is only usable with (IntVar, IntVar)

如何使用 IntVar 和 LinearExpression 实现 addDifferent?

4

1 回答 1

1

的确。API 太严格了。

选项 1:您将需要创建一个新变量,将其绑定到表达式并在 addDifferent 中使用它

选项2:

 // write  b - a != constant 
 model.addDifferent(LinearExpr::scalProd(new IntVar[] {a, b}, new long[] {-1, 1}), constant); 
    
于 2021-06-15T12:32:28.400 回答