【问题标题】:How to setup multi-level MDO formulation with openmdao 1.x?如何使用 openmdao 1.x 设置多级 MDO 公式?
【发布时间】:2015-09-16 15:09:43
【问题描述】:

由于 openmdao 1.x 问题只处理一个驱动程序,并且优化器仍然应该是驱动程序,所以如何实现多级公式?我应该使用两个问题吗?我应该直接在solve_nonlinear 组件方法中调用优化器吗?谢谢。

【问题讨论】:

    标签: multi-level openmdao


    【解决方案1】:

    发生了一些变化,Problem 不再是一个系统。现在最好的方法是创建一个包含子问题的Component,告诉它何时运行,并传入和传出数据。请参阅此处的示例:

    How to use nested problems in OpenMDAO 1.x?

    【讨论】:

      【解决方案2】:

      处理此问题的计划方法是使用嵌套的问题实例。这还没有在问题类中实现,但是很容易手动实现。

      您需要做的就是在问题子类中定义自己的solve_nonlinear 方法。如果您要使用解析导数,您还需要实现 Jacobian 和 apply_linear 方法,并且如果您有嵌套优化器,请使用后优化敏感性。或者您可以强制在包含的父组中发生有限差分。

      您的 solve_linear 将接收参数、未知数和残差字典,并将相关变量向下传递到问题向量中。本质上,该框架旨在不知道您是否使用嵌套问题。顶层框架认为内部只是一个常规组件。

      【讨论】:

      • 哦,你指出了一个问题是一个系统的事实(不确定除了代码之外的任何地方都提到过)!所以我们确实可以使用嵌套问题和solve_nonlinear方法。谢谢。
      • 嗨,我对这个答案有疑问 - 我们是否在问题子类或所述子类的根中定义了solve_nonlinear,因为它的solve_nonlinear最初是在组件和组中定义的函数,所以方法重载应该只为他们的子类工作。如果可能,请提供此类嵌套类的示例定义。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2019-01-05
      相关资源
      最近更新 更多