как приостановить CPLEX во время выполнения B

#cplex

#cplex

Вопрос:

Я хотел бы найти способ снабжать CPLEX решениями, пока он решает MIP минимизации. Эти решения основаны на эвристике, которую я запускаю параллельно с CPLEX. Весь подход смоделирован на Java, и я вызываю CPLEX с помощью IloCplex.

Я попытался установить ограничение по времени для CPLEX и, после паузы, передать новое решение модели CPLEX с помощью MIPStarts. Однако, когда я снова запускаю модель CPLEX, в ней говорится, что предоставленные мной решения невыполнимы, хотя я уверен, что они есть. На самом деле, CPLEX принимает эти решения, когда я полностью перезапускаю модель, чего я не хочу, потому что при этом исследование дерева b amp; b начинается заново с корневого узла.

Ответ №1:

Вместо того, чтобы полностью останавливать CPLEX для обеспечения mip-запуска, вы можете использовать обратные вызовы и вводить решения во время поиска. Соответствующий раздел Руководства пользователя https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/progr_adv/callbacks/introCallbacks.html , а ссылка на Java API находится по адресу https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/refjavacplex/html/ilog/cplex/IloCplex.Callback.html.

Кажется странным, что решение будет принято в качестве mip-запуска в начале поиска, но не тогда, когда поиск уже запущен и CPLEX прерывается. Если вы можете воспроизвести это поведение с помощью интерактивного CPLEX, я предлагаю вам опубликовать вопрос по адресу https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000002059 и приложите файлы, которые позволили бы воспроизвести проблему.

Комментарии:

1. Спасибо за ваш ответ. Я реализовал свой подход, используя эвристический обратный вызов, и столкнулся с той же проблемой. Я использую функцию setSolution(vars, vals) для загрузки решения, которое я получаю из своей эвристики, и когда я это делаю, я не получаю никаких ошибок или предупреждений. Однако, когда модель CPLEX продолжает выполняться после обратного вызова, она просто не учитывает мое решение (решение выполнимо, потому что оно работает при подаче как mip-start в новой модели). Вы знаете, должно ли это решение рассматриваться немедленно ?, или есть задержка по времени, прежде чем оно будет рассмотрено CPLEX ?.

2. Пожалуйста, взгляните на ibm.com/developerworks/community/forums/html /. … В частности, вы хотите выполнить шаги Даниэля, упомянутые в его первом ответе.

Ответ №2:

если вы хотите обойти все проверки, вы можете использовать nocheck в качестве уровня усилия запуска MIP

NoCheck CPLEX принимает запуск MIP без каких-либо проверок.

https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.9.0/ilog.odms.ide.help/refjavaopl/html/ilog/opl/IloCplex.MIPStartEffort.html