基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

时间:2022-11-12 15:53:15

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

????个人主页:Matlab科研工作室

????个人信条:格物致知。

更多Matlab仿真内容点击????

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

​无人机飞行过程中,路线上会出现一些障碍物,障碍物会威胁无人机的飞行安全.在无人机执行任务时,路径规划需要进行动态调整以实现快速准确地避开障碍.在对无人机避障算法进行研究中.根据无人机航迹环境构建任务空间模型;构建无人机路径的路径代价函数,以获取布谷鸟灰狼算法、灰狼算法中最优粒子的参数;根据最优粒子的参数和地形值构建航路点;以及根据航路点获取无人机的最优路径,实现了提高了布谷鸟灰狼算法、灰狼算法算法的全局寻优能力以及寻优精度,避免陷入局部最优,并成功得到一条平滑有效的路径.

划分为灰烬时,因此在智能猎物是通过相交流共享的*来模拟的。这只狼的发展需要不断地不断地评价一只狼的作用,只在一只头狼的过程中进行,在整个过程中进行一次,算法在继续更新的作用。狼的位置算法所将只由这3只狼头广泛应用领域应用领域中,尤其是狼群通过应用最广泛的应用领域。α狼都代表狼群位置,代表狼群,在狼群中,在当有任务需要执行时,α狼将号施令,其余的狼发群主动配合执行之便,因此α狼当无的成为当狼群中选择了自己的狼群。狼狼狼的原因是因为α狼的原因是α中的最强管理,而它最近拥有其他狼所拥有的狼所不具备的组织能力。β狼在活动中都需要从α狼的指挥,同时从其他点级别的狼群也可以听它的指挥。在灰狼群体中,位于第三级是δ狼,在严格的等级制度中, δ必须遵守从α狼和β狼的命令, δ狼不是最低一级,它在的下一级还存在着ω狼,ω狼在整个群体中担任追捕猎物群体的侦查,也是围狼群体中等级的。看起来它们整个无足灰重,但失去了它们这一整群,灰狼和轻狼都将面临着基层组织的危险,所以它们也可以是狼群的重要部分。

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

正在上传…重新上传取消

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

⛄ 部分代码

function solution = GWO(UAV, SearchAgents, Max_iter)

%GWO 灰狼优化算法

%Gray Wolf Optimization

% 参数

g = 50;       % 动态加权系数

% 算法初始化

[WolfPops, Tracks] = PopsInit(UAV, SearchAgents, false);   % 随机生成 初始狼群 和 轨迹们

dim = WolfPops.PosDim;                                                         % 状态变量维度

% 初始化解

Alpha_pos = zeros(1, dim);   % α解

Alpha_score = inf;                  % α解适应度

Alpha_no = 1;                         % α解编号

Beta_pos = zeros(1, dim);      % β解

Beta_score = inf;                     % β解适应度

Beta_no = 1;                             % β解编号

Delta_pos = zeros(1, dim);     % δ解

Delta_score = inf;                    % δ解适应度

Delta_no = 1;                           % δ解编号

Fitness_list = zeros(1, Max_iter);

% 迭代求解

tic

fprintf('>>GWO 优化中    00.00%%')

for iter = 1 : Max_iter

    % ①  计算每只狼的适应度,更改其种群等级

    ProbPoints = cell(SearchAgents, 1);   

    for i = 1 : SearchAgents

        % 计算目标函数

        [fitness, ~, Data] = ObjFun(Tracks{i}, UAV);    % 一个智能体的目标函数

        ProbPoints{i} = Data.ProbPoint;                       % 所有智能体不符合条件的状态

        % 更新 Alpha、Beta 和 Delta 解

        if fitness <= Alpha_score  % 适应能力最强(因为性能指标越小越好,因此为小于号)

            Alpha_score = fitness;

            Alpha_pos = WolfPops.Pos(i, :);

            Alpha_no = i;

        end 

        if fitness > Alpha_score && fitness <= Beta_score

            Beta_score = fitness;

            Beta_pos = WolfPops.Pos(i, :);

            Beta_no = i;

        end

        if fitness > Alpha_score && fitness > Beta_score && fitness <= Delta_score

            Delta_score = fitness;

            Delta_pos = WolfPops.Pos(i, :);

            Delta_no = i;

        end

    end

    % ②  更新参数a

    a = 2 - iter * 2 / Max_iter;                  % 线性递减

    %a = 2 * cos((iter / Max_iter) * pi/2);   % 非线性递减

    % ③  更新位置(朝着前三只狼位置前进)

%     r1 = rand(SearchAgents, dim);

%     r2 = rand(SearchAgents, dim);

%     A1 = 2*a*r1 - a;

%     C1 = 2*r2;

%     D_alpha = abs(C1.*repmat(Alpha_pos, SearchAgents, 1) - WolfPops.Pos);

%     X1 = repmat(Alpha_pos, SearchAgents, 1) - A1.*D_alpha;

%     r1 = rand(SearchAgents, dim);

%     r2 = rand(SearchAgents, dim);            

%     A2 = 2*a*r1 - a;

%     C2 = 2*r2;

%     D_beta = abs(C2.*repmat(Beta_pos, SearchAgents, 1) - WolfPops.Pos);

%     X2 = repmat(Beta_pos, SearchAgents, 1) - A2.*D_beta;

%     

%     r1 = rand(SearchAgents, dim);

%     r2 = rand(SearchAgents, dim);

%     A3 = 2*a*r1 - a;

%     C3 = 2*r2;

%     D_delta = abs(C3.*repmat(Delta_pos, SearchAgents, 1) - WolfPops.Pos);

%     X3 = repmat(Delta_pos, SearchAgents, 1) - A3.*D_delta;

%     %-- 静态更新位置

%     WolfPops.Pos = (X1 + X2 + X3) / 3;  

    %-- 动态更新位置

%     q = g * a; 

%     if abs(Alpha_score - Delta_score) > q

%         Sum_score = Alpha_score + Beta_score + Delta_score;

%         WolfPops.Pos = (Alpha_score*X1 + Beta_score*X2 + Delta_score*X3) / Sum_score;

%     else

%         WolfPops.Pos = (X1 + X2 + X3) / 3;

%     end

    for i = 1 : SearchAgents

        for j = 1 : dim

            r1 = rand();

            r2 = rand();

            A1 = 2*a*r1 - a;

            C1 = 2*r2;

            D_alpha = abs(C1*Alpha_pos(j) - WolfPops.Pos(i, j));

            X1 = Alpha_pos(j) - A1*D_alpha;

            r1 = rand();

            r2 = rand();            

            A2 = 2*a*r1 - a;

            C2 = 2*r2;

            D_beta = abs(C2*Beta_pos(j) - WolfPops.Pos(i, j));

            X2 = Beta_pos(j) - A2*D_beta;

            

            r1 = rand();

            r2 = rand();

            A3 = 2*a*r1 - a;

            C3 = 2*r2;

            D_delta = abs(C3*Delta_pos(j) - WolfPops.Pos(i, j));

            X3 = Delta_pos(j) - A3*D_delta;

            

            %静态更新

            WolfPops.Pos(i, j) = (X1 + X2 + X3) / 3;

%             %动态更新

%             %              q = g * a; %阈值

%             %              if abs(Alpha_score - Delta_score) > q

%             %                     Sum_score = Alpha_score + Beta_score + Delta_score;

%             %                     WolfPops.Pos(i, j) = (Alpha_score*X1 + Beta_score*X2 + Delta_score*X3) / Sum_score;

%             %              else

%             %                     WolfPops.Pos(i, j) = (X1 + X2 + X3) / 3;

%             %              end

        end

    end

    % ④  调整不符合要求的状态变量

    [WolfPops, Tracks] = BoundAdjust(WolfPops, ProbPoints, UAV);

    % ⑤  存储适应度

    Fitness_list(iter) = Alpha_score;

    if iter/Max_iter*100 < 10

        fprintf('\b\b\b\b\b%.2f%%', iter/Max_iter*100)

    else

        fprintf('\b\b\b\b\b\b%.2f%%', iter/Max_iter*100)

    end

end

fprintf('\n\n>>计算完成!\n\n')

toc

% 输出值

solution.method = 'GWO';                % 算法

solution.WolfPops = WolfPops;       % 所有解种群信息

solution.Tracks = Tracks;                  % 所有解航迹信息

solution.Fitness_list = Fitness_list;   % α解适应度曲线

solution.Alpha_Data = Data;            % α解的威胁信息

solution.Alpha_no = Alpha_no;        % α解的位置

solution.Beta_no = Beta_no;             % β解的位置

solution.Delta_no = Delta_no;          % δ解的位置

end

⛄ 运行结果

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码

⛄ 参考文献

[1]赵其定, 汪夏荣. 无人机覆盖路径规划中基于能量感知网格的三维避障算法的研究[J]. 现代信息科技, 2022, 6(18):6.

[2]罗诚. 无人机路径规划算法研究[D]. 复旦大学, 2010.

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除