gpt4 book ai didi

python - 为什么使用静态输入变量的有限差分来计算雅可比行列式? (OpenMDAO 2.4)

转载 作者:行者123 更新时间:2023-12-01 01:29:48 25 4
gpt4 key购买 nike

我一直在使用 SLSQP 算法仅使用 ExplicitComponents 来运行一些 MDO 问题。每个组件的运行时间约为 10 秒,有 60-100 个输入变量。大多数输入变量是静态输入变量,在整个优化过程中将保持不变。静态输入变量源自IndepVarCompExplicitComponents 是黑匣子,因此没有有关部分的信息。

我注意到,当在compute_totals()中计算雅可比行列式时,各分量相对于其所有输入值进行线性化。在compute_approximations()中,计算所有输入值(包括静态输入值)的有限差。所以,我的问题是:为什么要对这些静态输入变量进行有限差分计算?由于这些值保持不变,我不确定为什么这些信息有用?

此外,如果我理解正确的话,这些分量将被线性化以获得子雅可比行列式,然后将其用于计算总雅可比行列式。但是,是否可以直接计算整个组的有限差分,而不是对每个分量进行线性化?考虑到我的组件的运行时间和输入变量的数量,执行每个组件的线性化将需要很长时间。然而,优化问题只有 3 个设计变量。因此,如果我可以对整个 MDA 执行三个有限差分计算来计算总雅可比行列式,则总运行时间将显着减少。

最佳答案

以相反的顺序回答您的问题:

1) 您可以对整个模型而不是每个单独的组件进行 FD 吗?是的!

您可以设置FD over any group在您的模型中,包括顶级组。然后,FD 会在该组中进行,而不是在其中的每个组件中进行。我们将其称为计算半全导数,因为通常您可以在模型中选择一个子组,在这种情况下,FD 近似于该组的全导数,但该全导数实际上仍然是偏导数为整体模型。因此是半全导数。

2) 为什么要对这些静态输入变量执行有限差分计算?

理论上,您确实不需要无法更改的输入的偏导数,这是正确的。从 OpenMDAO 2.4 开始,我们不会自动处理这种情况,而且我们也没有计划在不久的将来添加这种情况。然而,该框架仅对您告诉它的部分进行 FD 处理。听起来你是这样声明你的部分的:

self.declare_partials(of=['*'], wrt=['*'], method='fd')

因此,您专门要求框架计算所有这些部分。相反,您可以在 wrt 参数中仅指定您知道实际正在更改的输入。当然,这在数学上是不正确的,因为静态输入存在导数。如果后来有人将某些内容与这些输入联系起来并尝试和优化,他们会得到错误的答案。但只要你小心,你可以专门从任何组件中只请求你想要的部分,然后简单地将不变的输入保留为 0。

关于python - 为什么使用静态输入变量的有限差分来计算雅可比行列式? (OpenMDAO 2.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com