如何在代码中使用IloExprArray?

时间:2013-12-30 08:22:00

标签: c++ mathematical-optimization linear-programming cplex ilog

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

1 个答案:

答案 0 :(得分:2)

您的初始化代码

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

创建一个空handles数组。句柄本质上是ILOG的smart pointers。当你在空句柄上执行+ =时,你基本上是在空指针上执行它。您需要初始化所有句柄。

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)