【问题标题】:IPOPT optimizer signal handler TypeErrorIPOPT 优化器信号处理程序 TypeError
【发布时间】:2020-06-16 04:17:43
【问题描述】:

在 OpenMDAO 中使用 pyOptSparse 中的 IPOPT 时出现以下错误。 我按照 pyoptsparse 文档安装了带有 IPOPT 的 pyOptSparse,这非常顺利。 SLSQP 优化器工作完美,但 IPOPT 给出了这个错误。 谢谢 1

【问题讨论】:

  • 我忘了说我在谷歌云中使用的是 ubuntu 20。
  • 错误信息请参考端口中的[1]或i.stack.imgur.com/cAf23.jpg
  • 您使用的是什么版本的 OpenMDAO 和 pyoptsparse?我们最近(在几周内)开始在 OpenMDAO 中支持 pyoptsparse > 2.0。我认为我们通过 OpenMDAO 的最新版本 (3.1.1) 解决了这个问题,但我可能错了。
  • 版本详情如下:python = 3.8 OpenMDAO = 3.1.1 pyOptSparse = 2.1.1 Ipopt = 3.11.7(在pyOptSparse的文档中推荐)谢谢

标签: openmdao ipopt


【解决方案1】:

用户终止信号似乎有些混乱。不过,为了调查,如果您能提供 rfalck 要求的 vesion 信息,将会有所帮助。

pyoptsparse 驱动程序,当与 SNOPT 一起使用时,支持“干净终止”,这意味着您可以发送使用“kill -SIGUSR1 pid”和您的运行进程 ID 来终止,它仍然会清理并给出摘要。 IPOPT 不支持这一点,SLSQP 也不支持。我们通常对 SLSQP 或 IPOPT 没有任何问题,但您的操作系统和 IPOPT 的某些组合可能会导致打嗝。

作为一种解决方法,请尝试以下设置:

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

这应该会关闭任何信号缓存和清理代码。优化完成后出现的错误,所以你差不多了。

【讨论】:

  • 感谢您的回复,我正在使用 python = 3.8 OpenMDAO = 3.1.1 pyOptSparse = 2.1.1 Ipopt = 3.11.7(如 pyOptSparse 文档中所建议的那样)。 ['user_terminate_signal'] 的解决方法给出了另一个错误:KeyError: "pyOptSparseDriver: Option 'user_terminate_signal' cannot be set because it has not been declared."。但与您提到的完成优化不同,它甚至没有一次调用objective。我要求提供适当的操作系统和其他软件包版本的组合,因为我使用的是云机,所以我可以轻松地使用它们。
  • 哦,天哪,我们的选项中有一个可怕的错字。现在尝试“user_teriminate_signal”,但我们会尽快修复它。
  • 是的,使用“user_teriminate_signal”后,上面发布的TypeError没有显示,但是优化器也没有执行任何迭代。
  • 我在使用 IPOPT 的前几次都遇到过这种情况,问题在于传递给 IPOPT 的选项。 OpenMDAO 使用以下选项运行: DEFAULT_OPT_SETTINGS['IPOPT'] = { 'hessian_approximation': 'limited-memory', 'nlp_scaling_method': 'user-scaling', 'linear_solver': 'mumps' }
  • 但是,我认为 pyoptsparse 可能会插入一些额外的。似乎选项错误永远不会被报告回 openmdao,但“症状”是您甚至从未评估任何目标。有关选项的更多信息:coin-or.github.io/Ipopt/OPTIONS.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2018-08-29
  • 2011-04-23
  • 2017-11-13
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多