首页 > 解决方案 > 算法微分与具有分析导数的多个显式组件

问题描述

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

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

据我了解,提前说出这两种方法之间可能的计算性能差异并不容易。它可能取决于反向模式情况下的算法微分工具功能,但可能系统将非常大,具有多个显式组件,使用算法差异仍然可以。

我的问题是:

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

标签: openmdao

解决方案


从 OpenMDAO v2.4 开始,OpenMDAO 开发团队还没有在任何纯 Python 组件上大量使用 AD 工具。我们对其进行了一些试验,发现计算组件与手动区分组件相比大约增加了 2 倍。虽然预计会增加一些计算成本,但我不想表明我希望 2x 是最终的经验法则。我们根本没有足够的数据来提供这样的估计。

基于 Python 的 AD 工具的开发程度远不如编译语言的工具。动态类型和通用语言灵活性都使得编写好的 AD 工具变得更具挑战性。

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

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

对小型串行组件的 AD 支持是我们将来考虑支持的东西,但我们在短期内没有任何东西可以为您提供(从 OpenMDAO v2.4 开始)


推荐阅读