基础知识-MDA组的求解器

时间:2018-09-28 07:42:17

标签: openmdao

我对sellar problem中连接到多学科组的求解器感到困惑。

它们本质上是在构建什么矩阵?他们正在融合到什么? 我很可能遗漏了一些非常明显的东西。是否有关于此的文献。

1 个答案:

答案 0 :(得分:1)

在您所参考的特定教程中,非线性求解器为NonlinearBlockGS。该求解器无需构造任何偏导数矩阵即可收敛其模型。它只是简单地迭代运行组件,在每次执行之后在它们之间传递数据,直到模型收敛为止。它等效于定点迭代。如果您在此求解器中使用了无梯度优化器,则无需向OpenMDAO提供任何偏导数,甚至无需调用声明的偏导器。

但是,关于what matrix are they essentially constructing的问题意味着您正在考虑一个NewtonSolver,它确实形成了一个线性系统来解决每一步的状态变量更新。如果您在Sellar问题上使用了NewtonSolver,则牛顿更新方程为

Newton update linear system

这只是牛顿更新的常规公式,其中特定变量标有来自卖方问题。在您引用的示例中,非线性求解器已专门添加到cycle组中,该组仅包含y1和y2作为子组件的输出变量。因此,牛顿更新偏导数雅可比行列式为2x2。

在OpenMDAO中,可以将求解器添加到层次结构的不同部分。在这种情况下,如果已将NewtonSolver添加到根组(而不是较低的cycle组),则Newton更新系统的大小将为8x8,因为从组件中有8个不同的输出变量根组。这8个变量是:

  • x(大小1)
  • z(大小2)
  • y_1(大小1)
  • y_2(大小1)
  • obj(大小1)
  • con1(大小1)
  • con2(大小1)

牛顿求解器的存在,无论您使用哪种类型的优化器(基于梯度或无梯度)都意味着您确实需要导数。因此,您将需要调用decalre_partials并设置method='fd'或提供解析导数。