我收到以下形式的警告:
DerivativesWarning:Constraints or objectives ['traj.linkages.stage_1_grav_turn:alpha_final|coast_1:alpha_initial', 'traj.phases.stage_1_maneuver.path_constraints.path:q_alpha'] cannot be impacted by the design variables of the problem.
不知道第一个约束是什么,即链接约束。 Alpha是grav_turn和coast阶段的一个参数,它设置为0。第二个没有意义,因为在stage_1_maneuver阶段alpha是一个控制,所以你绝对可以控制动态压力* alpha。也许是因为该阶段结束时的 alpha 被限制为 0?
无论如何,优化器收敛得很好,并产生看起来正确且在交叉检查时有意义的结果。只是对此感到好奇。
在 OpenMDAO V3.9.0 中添加了一个功能,可以检测全导数雅可比行列式中全 0 的行和列。一行全 0 表示目标或约束不受任何设计变量的影响。全 0 的列表示设计变量不会影响任何约束或目标值。
这两种情况都可能存在问题。 0 列意味着自由度比您想象的要少,因为 DV 不会影响任何东西。这并不是致命的,但仍然值得警告用户。
0 行的问题要大得多。如果该行与约束相关联,则意味着优化器无法满足该约束。您可能会“幸运”,发现约束恰好在初始条件下满足约束,因此您可以从技术上解决优化问题(您的具体情况可能就是其中之一)。然而,从数学上讲,这个问题是单一的,除非您使用的优化器有特定的代码来处理这个极端情况,否则事情可能会变得困难。
添加此功能的主要原因之一是 OpenMDAO 开发团队注意到 Dymos 用户在添加链接和路径约束时特别容易意外创建 0 行。通常这些 0 行似乎不会造成伤害,但我们肯定也看到过它们给优化器带来影响的情况。
该警告可帮助您识别问题,以便您可以纠正它。
在本例中,看起来您有两个单独的 0 行。
-
traj.linkages.stage_1_grav_turn:alpha_final|coast_1:alpha_initial
意味着您提供给优化器的任何设计变量都不会影响该约束。这可能意味着您已经指定了两者alpha_final
and alpha_initial
分别为fixed_final和fixed_initial。你可以侥幸逃脱,因为你提供的初始条件必须具有两个相同的 alpha 构造。
您最好还是删除约束,或者添加至少连杆的一端或另一端作为设计变量。
-
traj.phases.stage_1_maneuver.path_constraints.path:q_alpha
意味着路径约束中至少有一个条目不受任何 DV 的影响。它可能不是整个路径约束,而只是它的一端是固定的,因为它是根据固定的边界条件计算的。在这种情况下,您只需将索引添加到add_path_constraint https://openmdao.github.io/dymos/api/phase_api.html调用以从约束中排除第一个或最后一个点。
由于您的优化正在运行,因此 0 行不会杀死您。然而,清理它是一个很好的做法。现在没有它们可能会提高性能,或者可能会避免将来出现优化“神秘地”停止工作的情况,因为您以某种方式触发优化器无法再处理 0 行的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)