我希望在 Gurobi 中添加约束 n1 = x1 * x2 *x3
,其中 x1
、x2
和 x3
是带有 0 或 1 的变量。不幸的是,找不到解决方案。
有人可以帮助我吗?
最佳答案
您正在尝试对二元变量创建看似非线性的约束。您可以通过记下 n
将其建模为一系列线性约束。当且仅当 x1、x2 和 x3 均为 1 时,值为 1。
// only if part
model.addConstr(n, GRB.LESS_EQUAL, x1);
model.addConstr(n, GRB.LESS_EQUAL, x2);
model.addConstr(n, GRB.LESS_EQUAL, x3);
// if part
GRBLinExpr all_three;
all_three.addTerm(1.0, x1);
all_three.addTerm(1.0, x2);
all_three.addTerm(1.0, x3);
all_three.addConstrant(-2);
model.addConstr(n, GRB.GREATER_EQUAL, all_three);
这增加了约束
n >= x1 + x2 + x3 - 2
和n <= min(x1, x2, x3)
.
关于java - Gurobi:如何添加约束x1*x2*x3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012778/