【问题标题】:Understanding the reasons behind Openmdao design了解 Openmdao 设计背后的原因
【发布时间】:2020-07-15 10:14:33
【问题描述】:

我正在阅读有关 MDO 的内容,我发现 openmdao 真的很有趣。但是,我无法理解/证明一些基本选择背后的原因。

  1. 为什么选择基于梯度的优化?由于基于梯度的优化器永远不能保证全局最优,为什么它是首选。我知道,对于具有众多设计变量的 MDO 问题,找到全局最小值确实很困难,并且局部最优值远优于人工设计。但是考虑到该应用程序通常用于飞机或卫星等昂贵的系统,为什么要满足于局部最小值呢?在梯度方法之上使用元启发式或元启发式来收敛到全局最优不是更好吗?因此计算时间会很长,但现在几乎每所大学/领先行业都可以使用超级计算机,我认为这是一个可以接受的权衡。

  2. 谈到计算时间,为什么选择 python ?我同意 python 使脚本编写方便并且可以与编译语言交互。仅此一项就可以使天平有利于 Python 吗?但是,如果计算时间是导致很难找到全局最小值的主要原因之一,那么使用 C++ 或任何其他节能语言不是更好吗?

澄清这篇文章的唯一目的是证明(对我自己)使用 Openmdao 的合理性,因为我刚刚开始学习 MDO。

【问题讨论】:

    标签: openmdao


    【解决方案1】:
    1. 没有算法可以保证它在有限时间内找到全局最优值,但是基于梯度的方法通常比无梯度方法更快地找到局部值。 OpenMDAO 专注于基于梯度的方法,因为它们能够比无梯度方法更快地遍历设计空间。

      无梯度方法通常有利于更广泛地探索设计空间以获得更好的局部最优,并且没有什么可以阻止用户将基于梯度的优化驱动程序封装在无梯度调用程序下。 (例如,参见有关单调盆地跳跃等算法的文献)

    2. 选择 Python 是因为,虽然它在运行时不是最高效的,但它大大减少了开发时间。由于使用 OpenMDAO 意味着编写代码,Python 相对较低的学习曲线、易于访问和跨平台特性使其具有吸引力。还有很多用 Python 编写的开源代码,这使得整合 3rd 方求解器和驱动程序等内容变得更加容易。 OpenMDAO 之所以成为可能,是因为我们站在了很多肩膀上。

    尽管是用 Python 编写的,但我们实现了相对较好的性能,因为所涉及的算法非常高效,并且我们尝试通过通过 Numpy 而非 Python 循环使用向量化等方法来尽量减少 Python 的性能问题。

    此外,Python 在 OpenMDAO 的核心处理的计算通常成本非常低。对于像 PDE 求解器(例如 CFD 或 FEA)这样的复杂工程计算,代码的昂贵部分可以用 C、C++、Fortran 甚至 Julia 编写。这些语言很容易与 python 交互,许多 OpenMDAO 用户就是这样做的。

    OpenMDAO 在许多应用程序中得到积极使用,这些应用程序的需求推动了它的设计。虽然我们现在没有内置的单调水池跳跃功能(例如),但如果我们的利益相关者确定这是需要的,我们会考虑添加它。随着我们的发展继续,如果我们如果遇到可以通过切换使用不同语言来克服的障碍,我们会考虑,但向后兼容性(用户使用现有基于 Python 的模型的能力)将是一项要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2023-04-11
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多