基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附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電子書和數學建模資料
??部分理論引用網絡文獻,若有侵權聯系博主刪除
總結
以上是生活随笔為你收集整理的基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款使用RxJava+Retrofit+
- 下一篇: Win10:fastboot驱动问题解决