#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 без каких-либо проверок.