使用多个comp的OpenMDAO效率

时间:2018-07-11 13:11:19

标签: openmdao

我最近在a paper中读过这句话:

  

OpenMDAO的一个重要功能是可以细分   问题变成具有少量输入和输出的组件   并包含相对简单的分析。

此外,查看手册中的示例,每个组件的输入和输出数量很少。

这将意味着使用execcomp效率更高,该execcomp从显式组件中获取两个输入并输出约束,而不是在explicitcomp中进行所有操作。我在这里尝试举一个例子:

x1,x2 --> ExplicitComp -->y1 

y1    --> Execcomp --->constraint

OR

x1,x2 --->ExplicitComp -->y1,constraint

1 个答案:

答案 0 :(得分:2)

该论文中所指的不是计算效率,而是使模型更加模块化和可维护性给用户带来的好处。此外,当您的组件较小且输入较少时,为它们计算解析导数就容易得多。

这个想法是,通过将计算分解为较小的步骤,偏导数使它们更容易手动计算。然后,OpenMDAO将compute the total derivatives across the model for you.

因此,从某种意义上讲,您依靠的是OpenMDAO跨大型模型计算导数的功能,以减轻您的工作量。

从计算成本的角度来看,组件更多而不是更少会带来一些成本。极端地讲,如果在庞大的计算中每一行代码只有一个组件,那么框架开销可能会成为问题。 OpenMDAO中的某些功能可以帮助减轻串行模型的部分成本specifically the in-memory assembly of Jacobians

具体来说,关于ExecComp,该组件用于简单而廉价的计算。它使用复杂步骤来计算其导数,如果涉及大型数组输入,这可能会很昂贵。它在那里使简单的步骤(如添加变量)变得更加容易。但是对于昂贵的计算,您不应该使用它。

在您的特定情况下,我建议您考虑是否很难将导数从x1,x1传递到约束。如果链式规则不难处理,那么我可能会将其全部汇总到一个计算中。如果由于某种原因,当您将所有计算组合在一起时,导数是讨厌的,然后将它们拆分即可。