#python #cplex #docplex #docplexcloud
#python #cplex #docplex #docplexcloud
Вопрос:
Я решаю свою проблему с ILP, используя docplex IBM package для Python в рамках модели CP Optimizer. Он работает правильно, и я получаю целевой результат; однако, когда я вызываю Model.solve()
много раз. т. Е. Более 10000 циклов, вначале все работает правильно, но через некоторое время происходит сбой программы, и я получаю следующую ошибку::
Исключение LocalSolver: нечего читать из локального решающего процесса. Возможно, не запущен, поскольку cplex dll недоступен.
У меня установлена CPLEX Studio 12.10 на настольном компьютере под управлением операционной системы Windows 10 с процессором I7.4 3,40 ГГц, памятью 32 ГБ, средой anaconda. Я хочу решить проблему локально, а не в облаке.
Комментарии:
1. Здравствуйте. Локальное решение выполняется с использованием отдельного подпроцесса, который создается каждый раз, когда вы вызываете solve() . В конце он завершается, но из-за высокой частоты ваших запросов возможно, что у ОС нет времени для правильной очистки этих процессов. Не могли бы вы проверить с помощью монитора Windows, что из-за этого ваша память не увеличивается до предела?
2. спасибо за ваш ответ, я проверил монитор Windows, объем памяти не увеличился, только немного увеличился.
3. У меня может быть решение вашей проблемы. При создании подпроцесса есть таймер, чтобы проверить, был ли процесс запущен и отправил сообщение подтверждения. Таймер (одна секунда), по-видимому, слишком короткий в некоторых средах, в частности, если ваш диск работает медленно (например, если удаленный). Я уже исправил это, настроив задержку ожидания и добавив более явную ошибку в этом случае. Это будет доступно в pypi в ближайшее время.
4. Чтобы обойти эту проблему (и проверить, является ли она реальной причиной вашего поведения), вы можете изменить файл docplex.cp.solver.solver_local.py , расположенный там, где вы установили docplex. Найдите строку «таймер = поток. Таймер (1, лямбда: self.process.kill() если self.version_info больше ничего нет)» (около строки 120), а затем замените «1» на «10», например. Держите меня в курсе результата. 🙂
5. да, я сделал, как вы сказали. Я меняю таймер «1» на «10», но у меня все та же проблема.