Я использую CPLEX Consert Technology с C ++ API. Я пытаюсь изменить модель после того, как решил ее с помощью обратного вызова с отложенным ограничением. Точнее, сначала я решаю модель с помощью обратного вызова с отложенным ограничением, затем добавляю дополнительные ограничения к модели, а затем снова пытаюсь решить новую модель с помощью того же обратного вызова с отложенным ограничением. Вот код:
model.add ( Some_Constraints ) ;
cplex.extract(model) ;
cplex.use( MyLazyCallback (env) );
if ( cplex.solve() )
{
cout << endl << endl << cplex.getObjValue () << endl << endl ;
}
else
{
cout << endl << endl << cplex.getCplexStatus() << endl << endl ;
}
model.add (More_Constraints) ;
cplex.extract(model) ;
cplex.use( MyLazyCallback (env) ); // Not sure if we need this command again
if ( cplex.solve() )
{
cout << endl << endl << cplex.getObjValue () << endl << endl ;
}
else
{
cout << endl << endl << cplex.getCplexStatus() << endl << endl ;
}
Исходная модель решена без ошибок, но новая модель не решена из-за ошибки Segmentation fault (core dumped)
. Ошибка происходит от второй команды cplex.extract(model) ;
. Не могли бы вы подсказать мне, почему возникает эта ошибка и как ее исправить?
РЕДАКТИРОВАТЬ:
Из комментариев я понял, что с MoreConstraints
что-то не так. Я создаю MoreConstraints
в цикле, и содержимое цикла выглядит следующим образом:
IloRange RConstraint = SomeThing >= SomeValue ;
string RConstName = "RC" + to_string (Constraint_ID) ;
RConstraint.setName(RConstName.c_str()) ;
cout << "\n\n\nRconstraint " << RConstraint << endl ;
MoreConstraints.add(RConstraint) ;
cout << "\n\n\nMoreConstraints " << MoreConstraints << endl ;
Вот результат вышеупомянутого:
На каждой итерации предполагается добавление нового ограничения к MoreConstraints
, но это не так.