You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。
解决办法

有两种可行的处理方式:

  1. 手动添加linkage变量到轨迹输出
    在定义轨迹后,显式将需要的linkage变量加入到输出中:

    traj.add_output('traj.linkages.phase0:m_final|phase1:m_initial')
    

    这样优化完成后,该变量会被写入数据库,CaseReader就能正常读取。

  2. 绕过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:42:38