openmdao - 使用 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
在几种情况下我会看到此错误:
当我在我的 Dymos 问题上使用带有腮腺炎的 IPOPT run_driver() 时收到此错误,我还没有设法开始工作。
每当我在使用带有 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 正在使用哪个?
解决方案
该错误是由允许您从操作系统发送终止信号并从 SNOPT 干净退出的功能引起的。该功能似乎会导致某些操作系统出现问题,我们应该默认将其关闭。
您可以通过设置解决此问题:
prob.driver.options['user_terminate_signal'] = None
那应该绕过异常。不过,我不知道 IPOPT 附带问题的答案。
推荐阅读
- php - Laravel 在 where 子句中加入两个表的列 id 不明确
- laravel - Laravel Eloquent 使用 where on 数据特定字段
- sql - 从定价表中获取每个季度的第一个价格
- excel - 如何将带有逗号的数字作为千位分隔符从单元格复制到电子邮件?
- asp.net - datagridviewcombox 中的默认值
- c++ - 将私有继承的 Base 的类构造函数带入 Derived 的公共范围
- c++ - 使用 istringstream 的 str 方法解析文本
- woocommerce - 来自 SKU 的不同属性和价格的简码
- sapui5 - sapui5 - 变体管理 - 延迟 smartVariant '自动应用'
- android - 在 React Native 0.64.0 上构建 android 失败