使用 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
我在几种情况下会看到此错误:
当我 run_driver() 在我的 Dymos 问题上使用带腮腺炎的 IPOPT 时收到此错误,我还没有设法开始工作。
每当我 运行 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 附带问题的答案。
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
我在几种情况下会看到此错误:
当我 run_driver() 在我的 Dymos 问题上使用带腮腺炎的 IPOPT 时收到此错误,我还没有设法开始工作。
每当我 运行 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 附带问题的答案。