通常在Gurobi的Java界面中,我通过向模型添加变量来创建模型,例如:
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++) {
XobjectiveCoef = distance(i, j);
X[i][j] = model.addVar(0.0, 1.0, XobjectiveCoef, GRB.BINARY, "x" + String.valueOf(i) + "_" + String.valueOf(j));
}
}
当我完成时,我的模型是i和j上所有X的总和,我可以在任何我想要的约束中使用X[i][j]
:
for (int j = 0; j < n; j++) {
GRBLinExpr expr = new GRBLinExpr();
for (int i = 0; i < n; i++){
expr.addTerm(1.0, X[i][j]);
}
model.addConstr(expr, GRB.EQUAL, 1.0, "Name_of_constraint");
}
现在我正在寻找的是一种仅在约束中而不是在模型定义中使用决策变量的方法。我检查了addVar
GRBLinExpr
是否可用,但事实并非如此。
由于
答案 0 :(得分:0)
您可以创建GRBLinExpr并重复使用它。例如:
model.addConstr(expr, GRB.EQUAL, 1.0, "ct1");
expr.addTerm(1.0, Y);
expr.addTerm(1.0, Z).
model.addConstr(expr, GRB.GREATER_EQUAL, 2.0, "ct2");
这可能会或可能不会比创建新的GRBVar对象更有效。