"Солвер не вышел нормально" - 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 команда решателя или любые ошибки открытия файлов и тому подобное.
Другие вопросы по тегам