在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
链接为here。上下数组必须是动态数组。
CPLEX附带的示例说明了如何执行此操作。例如,此代码段来自ilolpex4.cpp
:
IloNumArray vals(env);
cplex.getValues(vals, var);
您可以在<COSDIR>/cplex/examples/src/cpp
下找到示例,其中<COSDIR>
是您安装ILOG CPLEX Optimization Studio的位置。可以在here中找到示例的描述。
编辑:
在您的代码段中,您尚未初始化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
函数的文档是here。