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

如何修改Dymos的traj.simulate()参数以开展蒙特卡洛分析?

调整Dymos中traj.simulate()的运行参数方法

要在traj.simulate()中修改初始条件、推力、气动系数这类参数,核心是通过传递仿真用的输入参数或修改模型的状态/参数值来实现,以下是具体操作方式:

1. 修改初始状态(比如初始燃油量)

在调用simulate()前,先从最优解中获取基线状态,再修改目标初始值,通过simulate()的initial_guesses参数传入:

# 先获取最优解的初始燃油量
baseline_fuel = prob.get_val('traj.phase0.timeseries.states:fuel_mass')[0]
# 扰动初始燃油量(示例:减少10%)
perturbed_fuel = baseline_fuel * 0.9
# 构造初始猜测字典,覆盖原初始值
initial_guess = {'traj.phase0.states:fuel_mass': perturbed_fuel}
# 传入simulate函数执行仿真
traj.simulate(initial_guesses=initial_guess)

2. 修改模型参数(比如推力系数、气动系数)

如果你的Dymos模型中通过add_parameter()定义了可调整参数(如params:thrust_coeff),可以直接在仿真前修改参数值,再执行仿真:

# 修改推力系数为原最优值的1.05倍
baseline_thrust_coeff = prob.get_val('traj.phase0.parameters:thrust_coeff')
prob.set_val('traj.phase0.parameters:thrust_coeff', baseline_thrust_coeff * 1.05)
# 执行仿真,模型会使用修改后的参数运行
traj.simulate()

3. 批量扰动仿真生成轨迹包络

如果要多次随机扰动参数生成轨迹包络,可通过循环结合上述方法,每次修改参数/初始状态后调用simulate()并保存结果:

import numpy as np

# 示例:生成5次随机初始燃油量扰动仿真
for i in range(5):
    # 在±5%范围内随机扰动初始燃油量
    perturb_ratio = np.random.uniform(0.95, 1.05)
    perturbed_fuel = prob.get_val('traj.phase0.timeseries.states:fuel_mass')[0] * perturb_ratio
    initial_guess = {'traj.phase0.states:fuel_mass': perturbed_fuel}
    # 执行仿真
    traj.simulate(initial_guesses=initial_guess)
    # 保存当前仿真轨迹数据
    np.save(f'simulation_result_{i}.npy', prob.get_val('traj.phase0.timeseries.states'))

关键注意点

  • 确保修改的参数/状态在Dymos模型中已正确定义:状态变量需通过add_state()声明,参数需通过add_parameter()声明。
  • simulate()默认沿用最优解作为初始猜测,仅修改部分参数时,其余值会自动继承最优解,无需全部重新定义。
  • 仿真后可通过prob.get_val()提取轨迹数据,与原最优解做对比分析。

内容的提问来源于stack exchange,提问作者Mark Garnett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:17