Можно ли суммировать IloNumVar с константой в Java? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь суммировать IloNumVar с постоянной переменной в Java, используя библиотеку Cplex. Проблема в том, что из-за разницы между этими переменными их невозможно суммировать. Поэтому мне интересно, как можно сложить эти две разные переменные. Как я знал в Opl с использованием Cplex, вы можете легко это сделать, но как насчет Java? Есть ли способ для суммирования одного IloNumVar (Decision Variable) со значением константы Java?

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

    int [] a = new int [10];
    IloNumVar deltatest = model.numVar(3, 5);
    int m = 2;

как присвоить результат целому числу? Например, я хочу сделать эту строку.

     a[m+deltaset] = 1000;

Я хочу использовать значение (m + deltaset) как целое число в других уравнениях.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы не можете использовать a[m + deltatest] точно, но, возможно, вам помогут следующие методы.

Во-первых, вы можете создать массив переменных и использовать индексы этого массива для индексации в a. Например:

     final int NumVars = 10;
     int[] a = new int[NumVars];
     IloNumVar[] varArray = cplex.numVarArray(NumVars, 3, 5);
     int m = 2;

     for (int i = 0; i < (NumVars - m); ++i) {
        // i corresponds to the variable at varArray[i].
        a[m + i] = 1000;
     }

В качестве альтернативы вы можете построить Карту, например, так:

     int[] a = new int[10];
     Map<IloNumVar, Integer> varMap = new Hashtable<IloNumVar, Integer>();
     int currentIndex = 0;
     IloNumVar deltatest = cplex.numVar(3, 5);
     varMap.put(deltatest, currentIndex++);
     int m = 2;

     a[m + varMap.get(deltatest)] = 1000;
0 голосов
/ 24 октября 2019

Не совсем понятно, что вы имеете в виду. Есть две интерпретации вашего вопроса:

  1. Вы хотите иметь выражение типа a[m + deltatest] в вашей модели , что невозможно в CPLEX (но вы можете использовать CP, которыйэто позволяет).
  2. После решения вы хотите использовать значение, найденное CPLEX для deltatest. В этом случае вы можете просто a[m + Math.round(cplex.getValue(deltatest))].
...