Моделирование целевой функции в CPLEX Java API

Я#m пытаюсь смоделировать целевую функцию sum(i в Sites,j в Sites, k в Routings)(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.

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

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


person nona    schedule 13.01.2020    source источник


Ответы (1)


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

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