Dymos 棘手的相位连接
Dymos tricky phase connection
我的 Dymos 轨迹有 3 个阶段。在第一阶段和最后阶段,我使用攻角作为控制。在第二阶段,我不想控制,只是让攻角保持在第一阶段的最后一个值。我在中间阶段用 opt = False 关闭了攻角优化。我使用 add_link_constraint() 来连接第一阶段和第二阶段之间的 alpha,但这并没有像我想象的那样起作用——在第二阶段,alpha 默认为零,并在第一阶段结束时强制 alpha 为零.不确定如何使其覆盖。
在这种情况下,由于 alpha 在第二阶段不是动态的,您只是希望它保持其值,因此您应该将其设为 参数 而不是 控制.
让它的值由优化器确定(通过设置 opt=True),并使用阶段 linkage 约束来强制 dymos 驱动 alpha 值与第一个结束值之间的差异阶段和第二阶段的开始归零。
有一个测试用例可以证明这一点 here。在测试案例中,控制角 u1
在第一和第三阶段(在推进时)是动态控制,在第二阶段(滑行)保持恒定值。
此测试用例在 Trajectory 上使用 link_phases
方法来施加连续性 (linkage) 约束。或者,方法 add_linkage_constraint
更通用,但使用起来更复杂。
请注意,此功能是 Dymos 的新增功能,因此我建议使用最新版本。
将其保留为优化控件在这种情况下不起作用,因为 linkage 只会尝试 link 第二阶段端点处的值。内部值对优化没有任何影响。
我的 Dymos 轨迹有 3 个阶段。在第一阶段和最后阶段,我使用攻角作为控制。在第二阶段,我不想控制,只是让攻角保持在第一阶段的最后一个值。我在中间阶段用 opt = False 关闭了攻角优化。我使用 add_link_constraint() 来连接第一阶段和第二阶段之间的 alpha,但这并没有像我想象的那样起作用——在第二阶段,alpha 默认为零,并在第一阶段结束时强制 alpha 为零.不确定如何使其覆盖。
在这种情况下,由于 alpha 在第二阶段不是动态的,您只是希望它保持其值,因此您应该将其设为 参数 而不是 控制.
让它的值由优化器确定(通过设置 opt=True),并使用阶段 linkage 约束来强制 dymos 驱动 alpha 值与第一个结束值之间的差异阶段和第二阶段的开始归零。
有一个测试用例可以证明这一点 here。在测试案例中,控制角 u1
在第一和第三阶段(在推进时)是动态控制,在第二阶段(滑行)保持恒定值。
此测试用例在 Trajectory 上使用 link_phases
方法来施加连续性 (linkage) 约束。或者,方法 add_linkage_constraint
更通用,但使用起来更复杂。
请注意,此功能是 Dymos 的新增功能,因此我建议使用最新版本。
将其保留为优化控件在这种情况下不起作用,因为 linkage 只会尝试 link 第二阶段端点处的值。内部值对优化没有任何影响。