如何声明一个 IloNumArray 类型的动态数组?

How to declare a dynamic array with IloNumArray type?

Cplex Concert C++ 中的一个函数的参数之一是 IloNumArray 类型,它必须是一个空的动态数组。直到解决方案结束时才知道数组的大小。我这样声明数组:

    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

link 是 here。 down 和 up 数组必须是动态数组。

CPLEX 附带的示例展示了如何执行此操作。例如,此片段来自 ilolpex4.cpp:

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

您可以在 <COSDIR>/cplex/examples/src/cpp 下找到示例,其中 <COSDIR> 是您安装 ILOG CPLEX Optimization Studio 的位置。可以找到示例的描述 here.

编辑:

在您的代码片段中,您尚未初始化 downup

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 函数的文档是 here