首页 > 解决方案 > 使用 IPOPT 时出现 Pyoptsparse“信号处理程序”错误

问题描述

Traceback (most recent call last):
  File "/home/rory/Documents/coloring_test/problemSolver.py", line 151, in <module>
    p.run_driver()
  File "/home/rory/.local/lib/python3.6/site-packages/openmdao/core/problem.py", line 663, in run_driver
    return self.driver.run()
  File "/home/rory/.local/lib/python3.6/site-packages/openmdao/drivers/pyoptsparse_driver.py", line 493, in run
    signal.signal(sigusr, self._signal_cache)
  File "/usr/lib/python3.6/signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
TypeError: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object

在几种情况下我会看到此错误:

  1. 当我在我的 Dymos 问题上使用带有腮腺炎的 IPOPT run_driver() 时收到此错误,我还没有设法开始工作。

  2. 每当我在使用带有 HSL 的 IPOPT 而不是 mumps 时运行 run_driver() 来解决任何动态问题,包括 Dymos 的基本示例。

此错误之前是每个节点的约束列表,所有这些约束的值都是 0.00(它们的参考值)。

   1251  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1252  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1253  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100
   1254  traj.phases.phase0.path_constraints.path:c_fl                          i  -1.000000E+30    0.000000E+00    1.000000E+00              9.00000E+100

IPOPT 似乎没有解决任何迭代问题。

另外,作为一个附带问题,我看到 HSL 在安装目录中有许多求解器,例如 ma27、ma77。如何指定正在安装哪个,或者如果它们都安装了,IPOPT 正在使用哪个?

标签: openmdao

解决方案


该错误是由允许您从操作系统发送终止信号并从 SNOPT 干净退出的功能引起的。该功能似乎会导致某些操作系统出现问题,我们应该默认将其关闭。

您可以通过设置解决此问题:

  prob.driver.options['user_terminate_signal'] = None

那应该绕过异常。不过,我不知道 IPOPT 附带问题的答案。


推荐阅读