我需要使用google CP-SAT solver添加以下约束
(x+y+z)/(x+y+z+k) < 10
addDivisionEquality方法签名是:
Constraint addDivisionEquality (IntVar target, IntVar num, IntVar denom) 哪里
IntVar target = model.newIntVar(0, 10, "(x+y+z)/(x+y+z+k)");但现在我需要将分子和分母定义为IntVar类型,而它们是多个intVars的总和。
Java包提供了一个名为SumOfVariables的类来对intVars求和,但是addDivisionEquality方法需要IntVar。我希望它得到的是LinearExpr。
如何将分子和分母定义为IntVar类型?
发布于 2020-06-14 21:22:53
IntVar numerator = model.newIntVar(0, 10, "(x+y+z)");
model.addEquality(target, LinearExpr.sum(new IntVar[] {x, y, z}));我是这么说的
model.addLessThan(LinearExpr.sum(new IntVar[] {x, y, z}),
LinearExpr.scalProd(new IntVar[] {x, y, z, k}, new int[] {10, 10, 10, 10}));要简单得多。
最后,如果所有变量都是正的,
(x + y + z) / (x + y + z + k) is always <= 1https://stackoverflow.com/questions/62372841
复制相似问题