算法微分与带有解析导数的多个显式成分

时间:2018-09-29 15:37:55

标签: openmdao

我有一个问题,它由大约6个数学表达式组成-即[f(g(z(y(x))))),其中x是两个独立的数组。

我可以将此表达式分为带有解析导数的多个显式comp,或使用算法微分方法来获得将系统简化为单个显式成分的导数。

据我所知,要事先说出这两种方法之间可能的计算性能差异并不容易。 它可能取决于反向模式情况下的算法差异化工具功能,但也许系统将非常庞大,具有多个显式组件,因此仍然可以使用算法差异。

我的问题是:

是算法差异。开发人员/用户所使用的通用工具? 我找到了AlgoPY,但不确定其他python工具。

1 个答案:

答案 0 :(得分:1)

从OpenMDAO v2.4开始,OpenMDAO开发团队尚未在任何纯python组件上大量使用AD工具。我们对其进行了一些试验,发现计算量和手动差分量大约增加了2倍。尽管预计会增加一些计算成本,但我不想指出我希望2x是最终的经验法则。我们只是没有足够的数据来提供这样的估计。

与编译语言相比,基于Python的AD工具开发得不够完善。动态类型和通用语言的灵活性都使编写好的广告工具更具挑战性。

我们已将OpenMDAO与使用AD的已编译代码(例如CFD和FEA工具)相连接。在这些情况下,您始终会为OpenMDAO使用无矩阵派生API(apply_linearcompute_jacvec_product)。

如果您的组件足够小以适合内存,并且足够快以在单个进程上运行,则建议您手动区分代码。这将为您提供目前最佳的整体性能。

我们将在将来寻求对小型串行组件的AD支持,但是在短期内(从OpenMDAO v2.4开始)我们将无法为您提供任何支持