使用 IPOPT 时 Pyoptsparse 'signal handler' 错误

Pyoptsparse 'signal handler' error when using IPOPT

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

  2. 每当我 运行 run_driver() 将 IPOPT 与 HSL 而不是腮腺炎用于任何动力学问题时,包括来自 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 使用?

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

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

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

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