как «поймать» сигнал обрыва и вернуть лучшее решение, найденное до сих пор - PullRequest
1 голос
/ 21 февраля 2020

Я использую Ilog Cplex с Visual C ++ 2015 для решения своей проблемы. Как я могу отправить сигнал перерыва в решатель и заставить его вернуть лучшее решение, найденное до сих пор?

1 Ответ

1 голос
/ 21 февраля 2020

Я так понимаю, вы используете Concert C ++. Обработка Ctrl- C (или прерывание) не входит в сферу применения CPLEX.

Но есть класс IloCplex :: Aborter . Вы можете установить обработчик для Ctrl- C (см., Например, здесь ). Затем также установите прерыватель с классом IloCplex и из обработчика прервите этот прерыватель.

Конечно, если ваш сигнал прерывания поступает из другого источника, вы можете использовать одну и ту же стратегию: зарегистрироваться и отменить и вызвать его функция abort() для прерывания CPLEX.

После того, как CPLEX был прерван, лучшее решение, найденное до сих пор, можно запросить, используя getValues() и getObjectiveValue(). Эти функции всегда запрашивают лучшее из возможных решений, найденных до сих пор, независимо от того, было ли оно доказано оптимальным или нет.

...