"Солвер не вышел нормально" - Jupyter / Python3 / Ubuntu
Я пытаюсь запустить мою первую модель Pyomo на моей Ubuntu VM (Azure). У меня есть Python3 и решатели COIN-OR, установленные на этой машине. Независимо от того, какой решатель я пробую, я получаю одинаковый результат.
Изменить: изменение решателя на Куэнне (это нелинейная проблема), вывод Jupyter выглядит следующим образом. Когда я открываю файлы журнала в каталоге tmp, в файле couenne.log ничего нет, а файлы pyomo являются формулировкой проблемы. Итак, я предполагаю, что Pyomo вообще не общается с решателем Couenne?
Solver log file: '/tmp/tmpezw0sov2_couenne.log'
Solver solution file: '/tmp/tmpq6afa7e8.pyomo.sol'
Solver problem files: ('/tmp/tmpq6afa7e8.pyomo.nl',)
ERROR: Solver (asl) returned non-zero return code (-1)
ERROR: See the solver log above for diagnostic information.
---------------------------------------------------------------------------
ApplicationError Traceback (most recent call last)
<ipython-input-6-486e3a9173f4> in <module>()
20 #instance = model.create_instance()
21 opt = SolverFactory('couenne', executable = solverpath_exe)
---> 22 opt.solve(model,tee=True,keepfiles=True)
23 #solver=SolverFactory(solvername,executable=solverpath_exe)
/home/ralphasher/.local/lib/python3.6/site-packages/pyomo/opt/base/solvers.py in solve(self, *args, **kwds)
598 logger.error("Solver log:\n" + str(_status.log))
599 raise pyutilib.common.ApplicationError(
--> 600 "Solver (%s) did not exit normally" % self.name)
601 solve_completion_time = time.time()
602 if self._report_timing:
ApplicationError: Solver (asl) did not exit normally
1 ответ
Возникает исключение "поймать все", потому что решатель работает как отдельный, не-Python процесс, поэтому Python действительно не может сказать, что именно с ним не так, он просто видит, что процесс завершился ненормально.
Таким образом, журнал решателя - это то, к чему нужно обратиться, поскольку именно здесь решатель сам записывает обновления своего состояния, поэтому конкретная ошибка, какой бы она ни была, должна отражаться там.
Если журнал решателя пуст, это, скорее всего, означает, что решателю вообще не удалось запуститься (если процесс решателя запущен с перенаправлением потока, файл журнала открывается - таким образом, создается - до того, как будет решена команда решателя). exec
'd, так что это общий симптом, когда есть проблема с запуском программы). поскольку pyomo
это то, что запускает решатель, где ответ лежит в деталях о том, что именно происходит во время запуска решателя.
Согласно с pyomo solve
Команда - документация Pyomo 5.6.6, вы можете использовать --info
или же --verbose
параметры командной строки для увеличения многословия pyomo
журнал.
Если это все еще не дает ничего показательного, пора вывести большие пушки:
- бегать
pyomo
подpdb
(pyomo
это просто скрипт, так что вы можете передать егоpython -m pdb
как и любой другой; убедитесь, что используете то же самоеpython
исполняется, как в сценарии Шебанга) и шаг за шагом кода вpyomo
механизм, чтобы увидеть, что именно он делает с решающим процессом (какую информацию он передает, как он его вызывает)- вы сможете увидеть дефекты в этом процессе, если они есть (например, информация фактически не передается) или повторите те же операции вручную, чтобы увидеть результат из первых рук; и / или
- запустить команду под
strace -f
(также контролировать дочерний процесс решателя) и посмотреть, есть ли какие-либо очевидные ошибки, такие как ошибкаexec
команда решателя или любые ошибки открытия файлов и тому подобное.