我正在尝试在Ubuntu VM(Azure)上运行我的第一个Pyomo模型。我在此机器上安装了Python3和COIN-OR求解器。无论我尝试使用哪种求解器,都可以得到相同的结果。
编辑:将求解器更改为couenne(这是一个非线性问题),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
答案 0 :(得分:0)
引发“包罗万象”异常是因为求解程序是作为一个单独的非Python进程运行的,因此Python确实无法分辨出它到底出了什么问题,它只是看到该进程已异常退出。 / p>
因此,求解器日志是必须解决的事情,因为这是求解器本身写入其状态更新的地方,因此,无论发生什么具体错误,都应在其中反映出来。
如果求解器日志为空,则很可能意味着求解器根本无法启动(如果使用流重定向运行求解器进程,则在求解器命令{{ 1}},因此,这是程序启动时出现的常见症状。由于exec
是启动求解器的事物,因此答案的出处在于获取求解器启动时确切发生的情况的详细信息。
根据pyomo solve
command — Pyomo 5.6.6 documentation,您可以使用pyomo
或--info
命令行选项来增加--verbose
日志的详细程度。
如果那仍然无法产生任何启示,那么就该抽出大手枪了:
pyomo
下运行pyomo
(pdb
只是一个脚本,因此您可以像其他任何脚本一样将其传递给pyomo
;请确保使用相同的{ {1}}(如脚本的shebang中的可执行文件),并逐步通过python -m pdb
机制中的代码来查看其对求解器进程的确切作用(传递的信息,调用方式)
python
下运行命令(以监视求解程序的子进程),并查看是否存在任何明显的错误,例如pyomo
的错误,或者打开文件等错误。 / li>