Моделирование целевой функции в CPLEX Java API - PullRequest
0 голосов
/ 13 января 2020

Я # пытаюсь смоделировать целевую функцию сумма (i на сайтах, j на сайтах, k в маршрутизации) (c [i] [j] * x [i] [j] [k] * TruckKmCost ) в Cplex с использованием java.

IloLinearNumExpr expr = cplex.linearNumExpr();
            for (int i = 1; i <= nbFarmer; i++) {
                for (int j = 1; j <= nbFarmer; j++) {
                    for (int k = 1; k <= nbRouting; k++) {
                  expr.addTerm(truckKmCost, c[i][j],x[i][j][k]);   
               }
            }
}

Это была моя попытка, но метод addTerm принимает только (double, IloNumVar), и я не могу преобразовать c [i] [j] в IloNumVar, потому что он мне нужен как int, чтобы я мог добавить к нему свои значения int.

Должно быть довольно простое решение, может быть, кто-то может мне помочь, я сейчас немного озадачен.

Большое спасибо!

1 Ответ

1 голос
/ 13 января 2020

Вы не указали, является ли c[i][j] переменной или числом. В зависимости от этого существует два различных решения вашей проблемы:

  1. В случае, если c[i][j] - это число, просто напишите expr.addTerm(truckKmCost * c[i][j], x[i][j][k]), то есть объедините два числа в один аргумент с addTerm.
  2. Если c[i][j] является переменной, тогда ваша цель не линейная, а квадратичная c. В этом случае вы не можете использовать IloLinearNumExpr, но должны использовать IloQuadNumExpr. addTerm() этого класса принимает в качестве аргументов две переменные.
...