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)