Я только начал использовать 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)
Других решений пока нет …