如何声明一个 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.
编辑:
在您的代码片段中,您尚未初始化 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。
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.
编辑:
在您的代码片段中,您尚未初始化 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。