Gurobi - проблема при построении ограничения (Java) - PullRequest
0 голосов
/ 20 марта 2020

У меня в настоящее время есть проблема с реализацией противопоказаний. У меня есть два набора (s1 и s2) спецификаций c GRBVars и я пытаюсь реализовать следующее ограничение:

Sum (s1) - Sum (s2) + constantValue <= someValue </p>

My реализация (изменена для удобства чтения):

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) это должно быть возможно. Что мне не хватает? Есть ли лучший способ реализовать это противопоказание?

С уважением

1 Ответ

0 голосов
/ 21 марта 2020

Выражение типа expr1 += expr2 + 50 поддерживается только языками программирования, которые поддерживают перегрузку операторов, как видно из документации :

In. NET языков, которые поддерживают перегрузка операторов, вы обычно строите линейные выражения, используя перегруженные операторы. [...]

Ссылка https://www.gurobi.com/documentation/9.0/refman/cs_lex.html ссылается на . NET Сведения об API для языков. NET. Вы хотите взглянуть на https://www.gurobi.com/documentation/9.0/refman/java_lex.html, который предназначен для Java API Details . Там у вас есть документация, что вы можете использовать методы add*() для добавления двух выражений / терминов.

...