一、内容介绍
本节旨在使用优化算法的方法,旨在利用最小的燃耗实现目标的交会,变量为目标的转移时间。整个问题描述为:
本节拟采取粒子群优化的算法,matlab中自带的粒子群函数为particleswarm,其用法不详细介绍,首先写出粒子群算法优化的函数。
函数一为双脉冲求解函数
%% 本代码旨在使用TH方程求解双脉冲转移问题
function [dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,t)
% 输入:
% ecc : 偏心率 0<=ecc<1
% Perigee: 近地点高度 (km)
% TA : 真近地点角 (deg)
% delta_r: 追踪星相对于目标的距离 (km)
% delta_v: 追踪星相对于目标的速度 (km/s)
% t : 转移时间
% 输出
% dv1 : 第一次施加脉冲的速度分量 (km/s)
% dv2 : 第二次施加脉冲的速度分量 (km/s)
% TH求出状态转移矩阵
[v,Phi,vv]=TH_solver(ecc,Perigee,TA,delta_r,delta_v,t);
% 求出状态转移矩阵的每个部分
Phi_rr = Phi(1:3,1:3);
Phi_rv = Phi(1:3,4:6);
Phi_vr = Phi(4:6,1:3);
Phi_vv = Phi(4:6,4:6);
% 求出第一次脉冲施加的大小
vv_0 = inv(Phi_rv)*(r_f-Phi_rr*delta_r);
dv1 = vv_0-delta_v;
% 求出第二次施加脉冲的大小
vv_f = Phi_vr*delta_r+Phi_vv*vv_0;
dv2 = v_f-vv_f;
end
函数二为粒子群优化函数
function J = ParticleFun(x)
% 粒子群优化的函数
% x : 即为时间的变量
global ecc Perigee TA delta_r delta_v r_f v_f
[dv1,dv2] = TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,x)
J = norm(dv1)+norm(dv2);
end
调用主函数求出最小值
%
clc;clear
global ecc Perigee TA delta_r delta_v r_f v_f
ecc = 0.1;
Perigee = 500;
TA = 45;
delta_r = [0.1;0.01;0.01];
delta_v = [0.0001;0.0001;0.0001];
r_f = [0;0;0];
v_f = [0;0;0];
lb=[0];
ub=[3600];
options=optimoptions('particleswarm','SwarmSize',500,'HybridFcn','fmincon','MaxIterations',500,'PlotFcn','pswplotbestf');
[x,fval,exitflag,output] = particleswarm(@ParticleFun,1,lb,ub,options);
% 检验一下正确性
[dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,x);
for j=1:3600
[dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,j);
J(j)=norm(dv1)+norm(dv2);
end
find(J==min(J))
% 对比索引与x值是否相等
使用粒子群函数求出的最优时间是3270s,转移消耗的速度变量位0.21815m/s。