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

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

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

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

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

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

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

⛄ 内容介绍

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

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


⛄ 部分代码

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

⛄ 运行结果

⛄ 参考文献

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

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

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除


相关文章
|
6天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
7天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
7天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
12 3
|
7天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
30 1
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
|
3月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
3月前
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
|
3月前
【数值分析】二分法求方程的根(附matlab代码)
【数值分析】二分法求方程的根(附matlab代码)
|
18天前
|
存储 人工智能 机器人
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
|
2月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
30 2