【问题标题】:OpenMDAO efficiency with using multiple compOpenMDAO效率与使用多个comp
【发布时间】:2018-07-11 13:11:19
【问题描述】:

我最近在a paper看到这句话:

OpenMDAO 的一个重要特性是能够细分一个 问题转化为具有少量输入和输出的组件 并包含相对简单的分析。

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

这是否意味着使用 execcomp 从显式组件中获取两个输入并输出约束而不是在显式组件中执行所有操作会更有效。我试着在这里举个例子:

x1,x2 --> ExplicitComp -->y1 

y1    --> Execcomp --->constraint

OR

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

【问题讨论】:

    标签: openmdao


    【解决方案1】:

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

    我们的想法是,通过将计算分解为更小的步骤,偏导数可以让您更轻松地手动计算。然后 OpenMDAO 将compute the total derivatives across the model for you.

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

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

    关于ExecComp,该组件专门用于简单且廉价的计算。它使用复杂的步骤计算其导数,如果涉及大型数组输入,这可能会很昂贵。它可以使添加变量等简单的步骤更容易。但是对于昂贵的计算,你不应该使用它。

    在您的具体情况下,我建议您考虑是否难以自己将 x1,x1 的导数传播到约束。如果链式法则不难处理,那么我可能会把它全部归为一个计算。如果由于某种原因,当您合并所有计算时,导数很糟糕,那么只需将它们分开即可。

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2013-11-22
      • 2015-03-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多