如何使用 openmdao 1.x 设置多级 MDO 公式?
How to setup multi-level MDO formulation with openmdao 1.x?
作为一个 openmdao 1.x 问题只处理一个驱动程序,并且优化器仍然应该是驱动程序,如何实现多级公式?我应该使用两个问题吗?我应该直接在 solve_nonlinear 组件方法中调用优化器吗?谢谢。
处理此问题的计划方法是使用嵌套问题实例。这在问题class中还没有实现,但是很容易手工实现。
您需要做的就是在问题子类中定义自己的 solve_nonlinear 方法。如果你打算使用解析导数,你还需要实现 Jacobian 和 apply_linear 方法,并且如果你有嵌套优化器,请使用 post-optimiality sensitivities。或者您可以强制在包含的父组中发生有限差分。
您的 solve_linear 将接收参数、未知数和残差字典,并将相关变量向下传递到问题向量中。本质上,该框架旨在不知道您是否在使用嵌套问题。顶层框架认为内部框架只是一个常规组件。
发生了一些变化,Problem
不再是一个系统。现在执行此操作的最佳方法是创建一个包含子问题的 Component
,告诉它何时 运行,并传入和传出数据。请参阅此处的示例:
作为一个 openmdao 1.x 问题只处理一个驱动程序,并且优化器仍然应该是驱动程序,如何实现多级公式?我应该使用两个问题吗?我应该直接在 solve_nonlinear 组件方法中调用优化器吗?谢谢。
处理此问题的计划方法是使用嵌套问题实例。这在问题class中还没有实现,但是很容易手工实现。
您需要做的就是在问题子类中定义自己的 solve_nonlinear 方法。如果你打算使用解析导数,你还需要实现 Jacobian 和 apply_linear 方法,并且如果你有嵌套优化器,请使用 post-optimiality sensitivities。或者您可以强制在包含的父组中发生有限差分。
您的 solve_linear 将接收参数、未知数和残差字典,并将相关变量向下传递到问题向量中。本质上,该框架旨在不知道您是否在使用嵌套问题。顶层框架认为内部框架只是一个常规组件。
发生了一些变化,Problem
不再是一个系统。现在执行此操作的最佳方法是创建一个包含子问题的 Component
,告诉它何时 运行,并传入和传出数据。请参阅此处的示例: