OpenMDAO Dymos defect_refs -- 我应该如何设置这些?



我希望获得一些有关如何以智能方式在 Dymos 中设置缺陷引用的信息。我在这里找到了以下关于缩放的说明 https://github.com/hweyandtnasa/scaling-tutorial 但它将 Dymos 中的缺陷缩放列为待办事项。我应该将它们设置为等于它们所属状态的 ref 值吗?

缩放伪谱最优控制问题很棘手。 如果你能得到一本约翰·贝茨(John Betts)的《使用非线性规划进行最优控制和估计的实用方法》,我强烈推荐它。 Betts 建议对状态设计变量值和缺陷使用相同的缩放比例。 这通常是一个很好的经验法则,但与大多数缩放方法一样,它并不通用。 决定动力学在物理上是否正确的搭配"缺陷"只是近似多项式的斜率与计算的运动方程之间的差异。

在状态值很大但变化率很小的情况下,根据我的经验,不同的缩放是必要的。 这些状态的例子是飞机航程或航天器轨道元件。就在最近,我们遇到了一种情况,航天器的低推力轨道转移与物理学不匹配。 例如,半阔直肠通常以公里为单位,因此在地球轨道上以千为单位)。 在使用的设备中,缺陷的"显着"差异小于1E-6(使用的可行性阈值)。 在这种情况下,通过将defect_scaler向上推几个数量级(相当于将defect_ref提高几个数量级)解决了这个问题。

我也推荐Ross,Gong,Karpenko和Proulx的这篇论文。 它列出了一些很好的经验法则,并在腕时线中有一个平易近人的例子。 它引用了很多共同状态。 Dymos 尚不提供自动协态估计,但它们与问题的拉格朗日乘数密切相关,如果使用 SNOPT,这些乘数将打印在 pyoptsparse 输出中。

你指出的 github 存储库是一个实习生的工作,基于 Sagliano 开发的这种扩展方法。 我们发现它在许多情况下都运行良好,但它也不是灵丹妙药。

最终,我们希望在 Dymos 和/或 OpenMDAO 中使用一些自动扩展选项,但我们不确定它们何时会进入框架。 我们过去的工作通常将缩放方法与运动方程更紧密地联系在一起,而 Dymos 的设计更加通用,因为用户可以提供他们选择的任何 EOM。

在 Dymos 中,如果在调用set_state_options时未设置defect_ref值,则默认行为是使defect_ref等于ref值。这样做的原因如下:

缺陷是多项式插值函数计算的状态速率与 ODE 计算的实际状态速率之间的差异。

正如你在这里看到的:defect = (f_approx-f_computed) * dt_dstau

dt_dstau只是将事物调整到称为tau的规范化时间空间,但它也会乘以时间单位(tau是无量纲的)。这意味着缺陷的计算单位与状态本身相同。因此,缩放的合理猜测是匹配状态和缺陷之间的缩放。正如Rob Falck的回答所指出的那样,这并不总是正确的解决方案,但这是一个很好的起点。