How to use IloExprArray in code?

Я только начал использовать cplex library and get stuck in defining 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>

    }
}   

But whenever i am running this code it get stuck at diff[j] += .. линия. I also searched on net but didn't get good documentation except of official one. Another question What about if i use IloArray <IloExpr> вместо IloExprArray?

1 ответ

Решение

Ваш код инициализации

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)

Другие вопросы по тегам