我目前在实施约束时遇到问题。
我有两组特定的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.html的Java API Details。那里有可以使用add*()
方法添加两个表达式/术语的文档。