1

我刚刚开始使用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呢?

4

1 回答 1

3

你的初始化代码

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

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

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

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

于 2013-12-30T20:37:59.603 回答