Dymos/OpenMDAO阶段链接解读取时出现KeyError问题求助
问题原因分析
这个KeyError的核心原因是显式指定链接变量时,Dymos不会自动将生成的linkage变量添加到案例数据库的输出记录中,而通配符vars=['*']模式下会自动完成这个操作。
具体来说:
- 当用
vars=['*']链接阶段时,Dymos会为每个被链接的变量(比如质量m)自动创建一个名为traj.linkages.phase0:m_final|phase1:m_initial的linkage变量,同时将这个变量标记为轨迹的输出,最终写入到dymos_solution.db中。 - 改为显式指定变量列表后,虽然阶段间的约束(把phase0的最终质量和phase1的初始质量绑定)能正常生效,模型可以运行优化,但Dymos不会自动把这些linkage变量加入到输出集合里,因此案例数据库中根本没有这个键,调用
CaseReader读取时自然会触发KeyError。
解决办法
有两种可行的处理方式:
手动添加linkage变量到轨迹输出
在定义轨迹后,显式将需要的linkage变量加入到输出中:traj.add_output('traj.linkages.phase0:m_final|phase1:m_initial')这样优化完成后,该变量会被写入数据库,CaseReader就能正常读取。
绕过linkage变量,直接读取阶段变量
不需要依赖自动生成的linkage变量,直接读取两个阶段的对应变量:cr = om.CaseReader('dymos_solution.db') final_case = cr.get_case('final') m_phase0_final = final_case.get_val('traj.phase0.timeseries.m')[-1] m_phase1_initial = final_case.get_val('traj.phase1.timeseries.m')[0]这种方式更直接,也能避免依赖自动生成的linkage变量命名规则。
内容的提问来源于stack exchange,提问作者jordi nosaurio
相关产品推荐
相关产品推荐

