✅作者简介:热爱科研的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电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除