如何在代码中使用IloExprArray

How to use IloExprArray in code?

本文关键字:IloExprArray 代码      更新时间:2023-10-16

我刚刚开始使用cplex库,并陷入了在代码中定义IloExprArray的困境。这是我的代码片段:

IloExprArray diff;
diff= IloExprArray(iloEnv,list.size());
for( int i=1; i<=10; i++ ) {
    for( int j=0; j<9; j++ ) {
         double weight = globalObjects->value.at(j)->getmyproperty(i);
         diff[j] += ( Ycfg[i][j]*Ycfg[i][j] - 2*weight*Ycfg[i][j] + weight*weight );
//where Ycfg is IloArray<IloNumVarArray>
    }
}   

但是每当我运行此代码时,它都会卡在diff[j] += ..行上。我也在网上搜索,但除了官方文件外,没有得到很好的文档。另一个问题 如果我使用 IloArray <IloExpr> 而不是 IloExprArray 怎么办?

您的初始化代码

diff = IloExprArray(iloEnv, list.size())

创建空句柄数组。句柄本质上是 ILOG 的智能指针。 当您在空句柄上执行 += 时,您实际上是在空指针上执行此操作。 您需要初始化所有句柄。

for (int i = 0; i < list.size(); ++i)
     diff[i] = IloExpr(iloEnv);

代码中还有其他可疑部分可能会给您带来麻烦。 例如,外部 for 循环从 1 运行到 10,并且您使用 list.size() 作为 diff 的长度,但 for (j = 0; j< 9; ++j) 而不是 for (j = 0; j < list.size(); ++j)