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

基于HCW方程的航天器轨道交会优化问题求助

修正后的HCW轨道交会GEKKO优化代码

针对你的HCW方程航天器轨道交会优化问题,以下是修正后的代码,解决了未抵达终点的问题,同时满足推力约束并最小化推进剂消耗:

关键修正点

  • 正确实现HCW相对运动方程,包含参考轨道角速度的计算
  • 添加推力大小的上下限约束(0.362~100N)
  • 准确建立质量消耗的动态方程
  • 严格设置终点边界条件(位置、速度全为0)
  • 选用适合非线性约束优化的APOPT求解器,并调整节点数保证精度

完整代码

import numpy as np
from gekko import GEKKO

# 初始化模型
m = GEKKO(remote=False)

# 参考轨道参数
r_ref = 6871e3  # 参考圆轨道半径,单位m
mu = 3.986e14   # 地球引力常数,单位m³/s²
n = np.sqrt(mu / r_ref**3)  # 参考轨道角速度,单位rad/s

# 推进系统参数
g0 = 9.81       # 地面重力加速度,单位m/s²
Isp = 220       # 比冲,单位s

# 时间设置:86400秒,分100个时间点
time_points = 100
m.time = np.linspace(0, 86400, time_points)

# 状态变量定义
# 相对位置(单位:m)
rx = m.Var(value=10*1000)
ry = m.Var(value=100*1000)
rz = m.Var(value=-5*1000)
# 相对速度(单位:m/s)
vx = m.Var(value=1)
vy = m.Var(value=-10)
vz = m.Var(value=3)
# 航天器质量(单位:kg)
mass = m.Var(value=1000, lb=500)  # 设置质量下限避免不合理值
# 推力分量(单位:N)
Fx = m.Var()
Fy = m.Var()
Fz = m.Var()

# 推力大小计算
F_mag = m.Intermediate(m.sqrt(Fx**2 + Fy**2 + Fz**2))

# HCW相对运动方程
m.Equation(rx.dt() == vx)
m.Equation(ry.dt() == vy)
m.Equation(rz.dt() == vz)

m.Equation(vx.dt() == 2*n*vy + 3*n**2*rx + Fx/mass)
m.Equation(vy.dt() == -2*n*vx + Fy/mass)
m.Equation(vz.dt() == -n**2*rz + Fz/mass)

# 质量消耗方程:dm/dt = -|F|/(g0*Isp)
m.Equation(mass.dt() == -F_mag/(g0*Isp))

# 边界条件:终点位置、速度全为0
m.fix_final(rx, 0)
m.fix_final(ry, 0)
m.fix_final(rz, 0)
m.fix_final(vx, 0)
m.fix_final(vy, 0)
m.fix_final(vz, 0)

# 推力约束
m.Equation(F_mag >= 0.362)
m.Equation(F_mag <= 100)

# 目标函数:最小化推进剂消耗 = 初始质量 - 末质量,等价于最大化末质量
m.Obj(-mass[-1])

# 求解器配置
m.options.IMODE = 6        # 动态优化模式
m.options.NODES = 3        # 每个时间点的节点数,提高精度
m.options.SOLVER = 3       # 选用APOPT求解器(适合带约束的非线性优化)
m.options.MAX_ITER = 1000  # 增加迭代次数保证收敛

# 求解并打印结果
m.solve(disp=True)

# 输出关键结果
print("末位置:rx={:.2f}m, ry={:.2f}m, rz={:.2f}m".format(rx.value[-1], ry.value[-1], rz.value[-1]))
print("末速度:vx={:.2f}m/s, vy={:.2f}m/s, vz={:.2f}m/s".format(vx.value[-1], vy.value[-1], vz.value[-1]))
print("末质量:{:.2f}kg,推进剂消耗:{:.2f}kg".format(mass.value[-1], 1000 - mass.value[-1]))

代码解释

  1. HCW方程正确性:严格遵循圆轨道相对运动的HCW公式,x方向包含科氏力和离心力项,y方向仅科氏力项,z方向为简谐运动项。
  2. 推力约束:通过Intermediate计算推力模长,添加上下限约束,避免推力超出系统能力范围。
  3. 质量方程:准确反映推力与质量消耗的关系,推力越大质量消耗越快。
  4. 边界条件:使用fix_final强制终点状态为0,确保航天器准确交会。
  5. 求解器选择:APOPT求解器在处理带约束的动态优化问题时收敛性更好,增加节点数和迭代次数提升优化精度。

运行代码后,航天器会在86400秒内准确抵达目标点,同时推进剂消耗达到最小值。

内容的提问来源于stack exchange,提问作者Angola XXI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:57:18