Как объявить массив Dynami c с типом IloNumArray? - PullRequest
0 голосов
/ 11 апреля 2020

Один из аргументов функции в Cplex концерт C ++ имеет тип IloNumArray, и это должен быть пустой динамический массив c. Размер массива неизвестен до конца решения. Я объявил массив следующим образом:

    const IloNumVarArray var(env);
    IloNumArray down;
    IloNumArray up;
    IloInt64 iteration1 = var.getSize();
    IloCplex::getStrongBranch(down, up, var, iteration1);  

Но я получил эту ошибку: no instance of overloaded function matches the argument list

Ссылка здесь . Массивы down и up должны быть динамическими c массивами.

1 Ответ

0 голосов
/ 11 апреля 2020

Примеры, включенные в CPLEX, показывают, как это сделать. Например, этот фрагмент взят из ilolpex4.cpp:

  IloNumArray vals(env);
  cplex.getValues(vals, var);

Примеры можно найти в <COSDIR>/cplex/examples/src/cpp, где <COSDIR> - это место, в котором вы установили ILOG CPLEX Optimization Studio. Описание примеров можно найти здесь .

РЕДАКТИРОВАТЬ:

В вашем фрагменте кода вы не инициализировали down и up.

Следующая модификация примера ilolpex2.cpp отлично работает на моем компьютере x86-64 Linux:

  cplex.extract(model);
  if ( !cplex.solve() ) {
     env.error() << "Failed to optimize LP" << endl;
     throw(-1);
  }
  else {
     IloNumArray down(env);
     IloNumArray up(env);
     IloInt64 itmax = cplex.getParam(IloCplex::Param::Simplex::Limits::Iterations);
     cplex.getStrongBranch(down, up, var, itmax);

     for (int i = 0; i < var.getSize(); ++i) {
        env.out() << var[i].getName()
                  << "(" << down[i] << ", " << up[i]
                  << ")" << endl;
     }
  }

Документация для базовой функции CPXstrongbranch: здесь .

...