首页 > 解决方案 > Gurobi - 构建约束时的问题(Java)

问题描述

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

Sum(s1) - Sum(s2) + constantValue <= someValue

我的实现(为便于阅读而修改):

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)应该是可能的。我错过了什么?有没有更好的方法来实现这个约束?

此致

标签: javagurobi

解决方案


表达式 likeexpr1 += expr2 + 50仅由支持运算符重载的编程语言支持,如文档中所示:

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

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


推荐阅读