Какую функцию cplex я должен использовать для записи этой переменной? - PullRequest
0 голосов
/ 12 мая 2019

У меня проблема с набором номера, написанная на Java (cplex). Сейчас я пытаюсь написать расслабление. В задаче есть двоичная переменная xijk, которая равна 1, если автомобиль k идет от i к j, иначе 0. Если я хочу узнать общий поток по каждой дуге, я должен написать: xij = сумма k∈K xijk. Как правильно написать cplex?

enter code here IloIntVar[][][] x = new IloIntVar[P][P][];
                       for (int i = 0; i < P; i++) {
                           for (int j = 0; j < P; j++) {
                               x[i][j] = cplex.boolVarArray(V);
                               for (int k = 0; k < V; k++) {
                                   x[i][j][k].setName("x." + i + "." + j + "." + k);
                               }
                           }
                       }

1 Ответ

2 голосов
/ 12 мая 2019

Как это сделать, зависит от того, хотите ли вы использовать сумму в другом ограничении или просто хотите получить эту сумму в результате.

Если вы хотите использовать сумму в другом ограничении, используйте cplex.sum(x[i][j]).Это вычисляет выражение, которое является суммой всех переменных в x[i][j].

. Если вы хотите вычислить значение этой суммы в решении (после вызова cplex.solve()), тогда выполните цикл, подобный этому:

double sum = 0.0;
for (double d : cplex.getValues(x[i][j])) sum += d;

Я не уверен, почему вы упоминаете «расслабление» в своем вопросе.Однако, если вы хотите создать релаксацию модели, вы можете обратиться к справочной документации IloCplex.conversion().

...