我目前在实施约束时遇到问题。
我有两组特定的GRBVar(s1和s2),并尝试实现以下约束:

总和(s1)-总和(s2)+ constantValue
我的实现(为了便于阅读而进行了修改):

GRBVar[][] vars;
....

GRBLinExpr expr1 = new GRBLinExpr();
GRBLinExpr expr2 = new GRBLinExpr();

for (Edge edge : s1) {
expr1.addTerm(1.0, vars[edge.getVertex1][edge.getVertex2]);
}

for (Edge edge : s2) {
expr2.addTerm(-1.0, vars[edge.getVertex1][edge.getVertex1]);
}

expr1 += expr2 + 50;


最后一行expr1 + = expr2 + 50被标记为错误,没有任何有用的信息。根据文档(https://www.gurobi.com/documentation/9.0/refman/cs_lex.html),这应该是可能的。我想念什么?
有没有更好的方法来实现这一约束?

最好的祝福

最佳答案

expr1 += expr2 + 50这样的表达式仅受编程语言支持,该编程语言支持运算符重载,如the documentation中所示:


在支持运算符重载的.NET语言中,通常使用重载运算符来构建线性表达式。 [...]


链接https://www.gurobi.com/documentation/9.0/refman/cs_lex.html引用.NET语言的.NET API Details。您要查看用于https://www.gurobi.com/documentation/9.0/refman/java_lex.htmlJava API Details。那里有可以使用add*()方法添加两个表达式/术语的文档。

10-07 18:23