Dymos中如何处理仅需推导输出的非动态状态?
解决Dymos中无状态率的推导量作为路径约束的问题
不用额外创建OpenMDAO组件,直接利用现有动力学组件的输出就能搞定,这是最简洁的方案:
- 第一步,在你的动力学计算组件里,把
y作为输出变量实现:在组件的compute方法里,基于已有的动态状态(x、v等)完成y的推导计算,然后赋值给输出端口。 - 第二步,在Dymos Phase定义阶段,直接给
y添加路径约束,不用把它注册成状态或参数:# 假设你的动力学组件输出y的变量路径是'dynamics.y' phase.add_path_constraint('dynamics.y', lower=0.0, upper=5.0) - 如果后续需要查看
y的时序结果,还可以用add_timeseries_output把它加入输出集合:phase.add_timeseries_output('dynamics.y')
为什么不用状态或参数?
- 状态要求指定
rate_source是因为Dymos需要对状态变量做积分求解,但y是实时推导的结果,不需要积分过程,硬凑rate_source(比如设为0)只会增加不必要的计算开销。 - 参数是需要外部传入的输入变量,而
y是由模型内部推导得到的,完全不符合参数的使用场景,强行设置会打破模型的数据流逻辑。
内容的提问来源于stack exchange,提问作者LordCat
相关产品推荐
相关产品推荐

