基于改进灰狼优化算法的无人机三维航迹规划(附源码)

​   多无人作战飞机(UCAV)协同航迹规划是多 UCAV 协同作战的重要组成部分,对协同作战的结果有 很多的指引作用。多UCAV协同航迹规划属于多峰值优化函数求解问题,其求解稳定性比较差。为解决多 UCAV 协同航迹规划求解稳定性较差的问题,首先在对影响多机协同约束条件研究分析的基础上,结合单 机航迹规划求解中的核心指标,建立了多 UCAV 协同航迹优化函数;利用多种群灰狼算法(MP-GWO) 在求解多峰值优化函数问题上比较稳定的特点进行求解。

 1、部分代码

%%%   灰狼优化算法航迹规划   %%%
clc, close all


%--- 算法选择 1:GWO算法  2:MP-GWO算法  3:CS-GWO算法 
options = 2;


%--- 算法参数设置          
SearchAgents = 60;           % 搜索智能体个数/狼群数量/可行解的个数 (>= 20)
Max_iter = 145 ;                  % 最大搜索步数     


%--- 协同无人机设置
UAV = UAV_SetUp1;            % 在 UAV_SetUp.m 文件进行设置


%--- 灰狼算法
if options < 2
    solution = GWO(UAV, SearchAgents, Max_iter);  % GWO算法
elseif options < 3
    solution = MP_GWO(UAV, SearchAgents, Max_iter);  % MP-GWO算法
else
    solution = CS_GWO(UAV, SearchAgents, Max_iter);  % CS-GWO算法
end


%--- 绘图
IMG_AutoPlot(solution, UAV) % 自适应绘图(全自动绘图)
% IMG_Plot(solution, UAV) % 手动绘图(需手动添加无人机)

function UAV = UAV_SetUp
%UAV_SETUP 在此设置多无人机协同航迹规划任务
% 10个无人机协同突防


% 航迹点设置
% (每行为一个无人机的参数)
UAV.S = [ 1.5,        1.5,        15;
                  0,           1.5,       15;
                  1.5,        0,          15;
                  0,           3,          15; 
                  3,           0,          15;
                  
                  0,           0,          15;
                  0,           4.5,       15;
                  4.5,        0,          15;
                  1.5,        3,          15;
                  3,           1.5,       15;  ];     % 起点位置 (x,y)或(x,y,z)

UAV.G = [  20,       20,      4;
                   16,       20,      5;
                   20,       16,      5;              
                   18,       20,      4.5; 
                   20,       18,      4.5;
                   
                   18,       18,      5;
                   16,       18,      5.5;
                   18,       16,      5.5;
                   14,       20,      5.5;
                   20,       14,      5.5;  ];      % 目标位置 (x,y)或(x,y,z)

UAV.PointNum = [  30;
                                  26;
                                  24;  
                                  26;  
                                  24;
                                  
                                  30;
                                  24;
                                  24;
                                  24;
                                  24;  ];                 % 每个无人机导航点个数(起始点之间点的个数)

UAV.PointDim = size(UAV.S, 2);        % 坐标点维度 (由 起点 坐标决定)
UAV.num = size(UAV.S, 1);                 % UAV数量 (由 起点 个数决定)


% 威胁点设置 (x,y,r) 或 (x,y,z,r)
% (每行为一个威胁的坐标和半径)
UAV.Menace.radar = [   5,      5,    17,     2.5;
                                        15,    7,    10,     2;  
                                        17,    18,   8,      2; 
                                        8,      8,     0,      6.8;  
                                        8,      17,   8,      3;      ];   % 雷达威胁(数学模型和其余威胁不同)

UAV.Menace.other = [   4,     11,   12,      2.5;
                                        10,    2,     10,     2;
                                        5,      6,     10,     1.5;
                                        10,    8,     12,     1.8;
                                        11,   13,    13,     2.3;
                                        13,   14,     9,      1.8;  
                                        18,   13,    10,     2.2; 
                                        16,   16,     0,      4;     ];   % 导弹、火炮、气象等威胁


% 无人机约束设置(min,max)
% (可单独为每个无人机设置,每行为一个无人机约束的上下限)
UAV.limt.v = 0.34*repmat([0.3, 0.7], UAV.num, 1);                 % 速度约束 (0.3Ma ~ 0.7Ma)
UAV.limt.phi = deg2rad(repmat([-60, 60], UAV.num, 1));      % 偏角约束 (-60° ~ 60°)
UAV.limt.theta = deg2rad(repmat([-45, 45], UAV.num, 1));   % 倾角约束 (-45° ~ 45°)
UAV.limt.h = repmat([0.02, 20], UAV.num, 1);                         % 高度约束 (0.02km ~ 20km)
UAV.limt.x = repmat([0, 20], UAV.num, 1);                            % 位置x约束 (0 ~ 875km)
UAV.limt.y = repmat([0, 20], UAV.num, 1);                            % 位置y约束 (0 ~ 875km)
UAV.limt.z = UAV.limt.h;                                                            % 位置z约束 (忽略地球弧度)
UAV.limt.L = zeros(UAV.num, 2);                                              % 航程约束 (最短航迹片段2km,最大航程1.5倍起始距离)
for i =1:UAV.num
    zz.max = 1.6 * norm(UAV.G(i, :) - UAV.S(i, :));
    zz.min = 0.5;
    UAV.limt.L(i, :) = [zz.min, zz.max];
end


% 多无人机协同设置
% (说明略)
UAV.tc = 160;         % 协同时间 (单位s)
UAV.ds = 0.5;          % 安全距离 (单位km)


% 报错
ErrorCheck(UAV)
end





%% 程序自检
function ErrorCheck(UAV)

dim = UAV.PointDim; 
if dim ~= size(UAV.G,2) || dim ~= size(UAV.Menace.radar,2)-1 || dim ~= size(UAV.Menace.other,2)-1
    if dim ~= size(UAV.G,2)
        error('仿真维度为%d,但目标点坐标为%d维', dim, size(UAV.G,2))
    else
        error('仿真维度为%d,但威胁点坐标为%d维', dim, size(UAV.Menace.radar,2)-1)
    end
end

num = UAV.num;
if num ~= size(UAV.G,1) || num ~= size(UAV.limt.v,1) || num ~= size(UAV.limt.phi,1) ...
        || num ~= size(UAV.limt.theta,1) || num ~= size(UAV.limt.h,1) || num ~= size(UAV.limt.x,1) ...
        || num ~= size(UAV.limt.y,1) || num ~= size(UAV.limt.z,1) || num ~= size(UAV.limt.L,1)
    if num ~= size(UAV.G,1)
        error('无人机个数为%d, 但目标点有%d个', num, size(UAV.G,1))
    else
        error('约束条件个数与无人机个数不一致')
    end
end

if num ~= size(UAV.PointNum, 1)
    error('无人机个数为%d, 但为%d个无人机设置了导航点', num, size(UAV.PointNum, 1))
end

MaxPoint = floor(UAV.limt.L(:,2) ./ UAV.limt.L(:,1)) - 1;   % 每个无人机支持的最大航迹点数量
for i = 1 : UAV.num
    if UAV.PointNum(i) > MaxPoint(i)
        error('%d号无人机导航点个数超出任务需求,请尝试减少导航点个数', i)
    end
end

end

2、结果展示

 
 
 
 

 ​

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是基于改进优化算法的路径规划的Python代码示例: ```python import numpy as np # 定义问题 start = [0, 0] # 起点坐标 end = [100, 100] # 终点坐标 obstacles = [[30, 50], [60, 80], [20, 70]] # 障碍物坐标列表 class Wolf: def __init__(self, position): self.position = position self.fitness = self.calculate_fitness() def calculate_fitness(self): # 计算适应度函数 distance = np.sqrt((self.position[0] - end[0])**2 + (self.position[1] - end[1])**2) return distance def initialize_population(population_size): # 初始化种群 population = [] for _ in range(population_size): x = np.random.uniform(start[0], end[0]) y = np.random.uniform(start[1], end[1]) wolf = Wolf([x, y]) population.append(wolf) return population def update_position(wolf, alpha, beta, delta): # 更新位置 x1 = wolf.position x2 = alpha.position x3 = beta.position x4 = delta.position a1 = 2 * np.random.rand(2) - 1 a2 = 2 * np.random.rand(2) - 1 a3 = 2 * np.random.rand(2) - 1 a4 = 2 * np.random.rand(2) - 1 new_position = (x1 + a1 * (x2 - x3) + a2 * (x4 - x3)) / 2 + a3 * (x4 - x1) # 检查新位置是否在合法范围内 new_position[0] = max(min(new_position[0], end[0]), start[0]) new_position[1] = max(min(new_position[1], end[1]), start[1]) # 检查新位置是否与障碍物发生碰撞 for obstacle in obstacles: if np.sqrt((new_position[0] - obstacle[0])**2 + (new_position[1] - obstacle[1])**2) < 5: new_position = wolf.position break return new_position def improve_wolves(population): # 改进位置 sorted_population = sorted(population, key=lambda x: x.fitness) alpha = sorted_population[0] beta = sorted_population[1] delta = sorted_population[2] for i in range(len(population)): population[i].position = update_position(population[i], alpha, beta, delta) population[i].fitness = population[i].calculate_fitness() return population def optimize_path(population_size, num_iterations): # 优化路径 population = initialize_population(population_size) for _ in range(num_iterations): population = improve_wolves(population) sorted_population = sorted(population, key=lambda x: x.fitness) best_path = sorted_population[0].position return best_path # 示例用法 best_path = optimize_path(population_size=50, num_iterations=100) print("Best path:", best_path) ``` 这是一个简单的基于改进优化算法的路径规划代码示例。代码中定义了问题(起点、终点和障碍物),并实现了的初始化、位置更新和改进等功能。最后,通过调用`optimize_path`函数来优化路径,并返回最佳路径。 请注意,这只是一个简单的示例代码,您可能需要根据您的具体问题进行适当的修改和调整。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值