在 Dymos 中保存数据更改优化和模拟结果

问题描述

我遇到了与 this question 中所述类似的问题。我遵循了 Rob Flack 的回答,但遇到了问题。如果有人可以帮助我,我将不胜感激。

我使用了答案中建议的代码,但遇到了一个问题:它改变了模拟结果。我在脚本中为 min_time_climb 示例添加了一行,如下所示:

phase.add_timeseries_output('aero.mach',units=None,shape=(1,),output_name = "recorded_mach")

我使用名称“recorded_mach”是为了不覆盖 Dymos 可能已经或可能没有记录的任何其他内容。问题是认的高度 (h) 与时间图实际上发生了变化,离散点和模拟曲线都发生了变化。我最终使用与我刚刚展示的命令类似的命令记录了 4 个变量,并且通过图表上的离散优化点以某种方式使模拟跟踪更好。当我在此之上记录另外 4 个变量时,它使它变得更糟。我觉得这很奇怪,因为我不明白为什么记录模拟应该改变它的输出

你有没有遇到过这种情况?您可以提供有关该问题的任何见解,我们将不胜感激。

注意事项:

在实现上述代码之前,我对示例进行了一些修改,以适应不同的情况(不同的推力和燃油消耗数据、不同的升力和阻力极坐标、不同的高度和速度目标)。但是,它仍然运行良好。

解决方法

没有一些例子可以看,我只能做出有根据的猜测。所以请对我的回答持保留态度。

某些优化问题的雅可比矩阵和/或 KKT 矩阵的条件非常差(您作为用户通常不会看到,但仍然存在问题)。这种病态的潜在原因有很多,但一些常见的原因是非常大的导数(即接近无穷大)或不同导数之间的幅度非常大。另一个常见的原因是引入了一个鞍点,在那里你有无数同样好的答案。有时您可以通过缩放来解决问题,有时您需要重新制定问题。

不良条件对优化器有两个不良影响。首先,它使得内部的数字很难计算计算步长所需的逆。它将得到一个答案,但可能会受到数字噪声的影响。其次,它可能会阻止某些近似(如 BFGS)首先表现良好。

在这些情况下,执行顺序或额外步骤(例如案例重新编码)的微小变化可能会导致优化器采用不同的路径。如果您发现该路径最终会导致一个案例成功而另一个案例失败,那么您可能会遇到一个稍微稳定的问题,您一次幸运而不是另一个。

仔细查看雅可比文件中是否有任何类似奇异的东西。 0 行/列?如果您在添加约束时忘记添加额外的自由度,则碰巧满足但仍有 0 行的约束是 Dymos 情况下出现的问题。如果您谨慎对待目标,也会出现鞍点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...