?博主簡(jiǎn)介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn),Matlab項(xiàng)目合作可私信。
??個(gè)人主頁(yè):海神之光
??代碼獲取方式:
海神之光Matlab王者學(xué)習(xí)之路—代碼獲取方式
??座右銘:行百里者,半于九十。
更多Matlab仿真內(nèi)容點(diǎn)擊??
Matlab圖像處理(進(jìn)階版)
路徑規(guī)劃(Matlab)
神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)與分類(Matlab)
優(yōu)化求解(Matlab)
語(yǔ)音處理(Matlab)
信號(hào)處理(Matlab)
車間調(diào)度(Matlab)
?一、蜣螂算法無(wú)人機(jī)避障三維航跡規(guī)劃簡(jiǎn)介
1 無(wú)人機(jī)航跡規(guī)劃問(wèn)題的數(shù)學(xué)模型
建立三維航跡規(guī)劃問(wèn)題的數(shù)學(xué)模型時(shí), 不但考慮無(wú)人機(jī)基本約束, 還考慮復(fù)雜的飛行環(huán)境, 包括山體地形和雷暴威脅區(qū)。
1.1 無(wú)人機(jī)基本約束
規(guī)劃的無(wú)人機(jī)三維航跡, 通常需要滿足一些基本約束, 包括最大轉(zhuǎn)彎角、最大爬升角或下滑角、最小航跡段長(zhǎng)度、最低和最高飛行高度, 以及最大航跡長(zhǎng)度等約束。其中, 最大轉(zhuǎn)彎角約束, 是指無(wú)人機(jī)只能在水平面內(nèi)小于或等于指定的最大轉(zhuǎn)彎角內(nèi)轉(zhuǎn)彎;最大爬升角或下滑角約束, 是指無(wú)人機(jī)只能在垂直平面內(nèi)小于或等于指定的最大爬升角或下滑角內(nèi)爬升或下滑;最小航跡段長(zhǎng)度約束, 要求無(wú)人機(jī)改變飛行姿態(tài)之前, 按目前的航跡方向飛行的最短航程;最低和最高飛行高度約束, 要求無(wú)人機(jī)在指定的飛行高度區(qū)間飛行;最大航跡長(zhǎng)度約束, 是指無(wú)人機(jī)的航跡長(zhǎng)度小于或等于指定的閾值。
記q (x, y, z, θ, ψ) 為無(wú)人機(jī)的飛行位置與姿態(tài), 其中, (x, y, z) 為無(wú)人機(jī)的位置, θ為無(wú)人機(jī)的水平轉(zhuǎn)彎角, ψ為無(wú)人機(jī)的豎直爬升角或下滑角, 進(jìn)而建立上述基本約束的數(shù)學(xué)表達(dá)式。
1.2 飛行環(huán)境障礙物和威脅區(qū)建模
在飛行環(huán)境中, 高聳的山體近似采用圓錐體等效表示, 用以e為底的自然指數(shù)圖形生成, 那么, 山體地形可以通過(guò)多個(gè)位置不同的圓錐體疊加而成。若將參考海拔基準(zhǔn)高度設(shè)置為xOy平面, 記 (x, y, z) 為山體地形中的點(diǎn), 那么
式中:N為山體個(gè)數(shù);xk0和yk0為第k座山體中心對(duì)稱軸的橫坐標(biāo)和縱坐標(biāo);hk為第k座山體的最大高度;xki和yki為第k座山體的橫向斜度和縱向斜度。
在飛行環(huán)境中, 山體附近通常存在雷暴等極端氣象, 本文視為飛行威脅區(qū), 并通過(guò)球體近似等效表示, 且記第k座山體附近飛行威脅區(qū)的球心坐標(biāo)為 (xks0, yks0, zks0) , 半徑為rk。
1.3 目標(biāo)函數(shù)及航跡表示
在本文中, 執(zhí)行任務(wù)的某型無(wú)人機(jī), 其航跡規(guī)劃的目標(biāo)函數(shù)是生成一條由起始點(diǎn)到目標(biāo)點(diǎn)的無(wú)碰撞可行航跡。采用q (x, y, z, θ, ψ) 表示無(wú)人機(jī)在飛行空域中某特定位置的特定姿態(tài), 那么 (x, y, z) 則表示無(wú)人機(jī)所在航跡點(diǎn), θ表示無(wú)人機(jī)的水平轉(zhuǎn)彎角, ψ表示無(wú)人機(jī)的豎直爬升角或下滑角。采用r (q) 表示由起始點(diǎn)qinitial到目標(biāo)點(diǎn)qgoal的無(wú)碰撞可行航跡, 那么航跡規(guī)劃的過(guò)程可以寫成如下形式:
2 蜣螂算法
摘要:蜣螂優(yōu)化算法( Dung beetle optimizer, DBO), 是由 Jiankai Xue 等于2022 年提出的一種群體智能優(yōu)化算法。其靈感來(lái)源于蜣螂的生物行為過(guò)程,具有尋優(yōu)能力強(qiáng),收斂速度快的特點(diǎn)。
1 蜣螂優(yōu)化算法
眾所周知,蜣螂是自然界中一種常見的昆蟲,動(dòng)物的糞便為食,在全世界內(nèi)分布廣泛,扮演著自然界中分解者的角色,對(duì)生態(tài)系統(tǒng)平衡起著至關(guān)重要的作用。蜣螂有一個(gè)有趣的習(xí)慣,它們會(huì)把糞便捏成球,然后把它滾出來(lái),目的是能夠盡可能快速、有效地移動(dòng)糞球,防止被其他蜣螂搶奪。蜣螂的可以利用天體線索(特別是太陽(yáng)、月亮和偏振光)來(lái)導(dǎo)航,讓糞球沿著直線滾動(dòng),如果完全沒有光源(也就是在完全黑暗的環(huán)境中),蜣螂的就不再走直線,而是彎曲的,有時(shí)甚至略圓,有很多因素(如風(fēng)、地面不平)都會(huì)導(dǎo)致蜣螂偏離原來(lái)的方向,蜣螂在滾糞球的過(guò)程如遇到障礙物而無(wú)法前進(jìn)時(shí),通常會(huì)爬到糞球上面"跳舞"(包括一系列的旋轉(zhuǎn)和停頓),決定它們的運(yùn)動(dòng)方向。
從蜣螂的習(xí)性中觀察發(fā)現(xiàn),其獲取糞球主要有以下兩個(gè)目的:①用來(lái)產(chǎn)卵和養(yǎng)育下一代;②作為食物。蜣螂會(huì)把糞球埋起來(lái),雌性蜣螂會(huì)在糞球里產(chǎn)卵,糞球不僅是蜣螂幼蟲的發(fā)育場(chǎng)所,也是必需的食物。所以,糞球?qū)︱掾氲纳嫫鹬豢商娲淖饔谩?/p>
本位介紹了一種新的群體智能優(yōu)化算法------DBO(Dung beetle optimizer)技術(shù),其靈感主要來(lái)源于蜣螂的滾球、跳舞、覓食、偷竊、和繁殖等行為。
1.1 結(jié)構(gòu)和算法
根據(jù)上面的討論,蜣螂在滾動(dòng)過(guò)程中需要通過(guò)天體線索導(dǎo)航,以保持糞球在直線路徑上滾動(dòng)。為了模擬滾球行為,要求蜣螂在整個(gè)搜索空間中沿著給定的方向移動(dòng)。蜣螂的運(yùn)動(dòng)軌跡如圖1所示。在圖1中,蜣螂利用太陽(yáng)來(lái)導(dǎo)航,其中紅色箭頭表示的是滾動(dòng)的方向,同時(shí),我們假設(shè)光源的強(qiáng)度也會(huì)影響蜣螂的路徑。
1.2 計(jì)算步驟
DBO 算法作為一種新穎的基于 SI 的優(yōu)化技術(shù), 主要有六個(gè)步驟:
(1) 初始化蜣螂群和 DBO 算法的參數(shù);
(2) 根據(jù)目標(biāo)函數(shù)計(jì)算出所有目標(biāo)代理的適應(yīng)度值;
(3) 更新所有蟯螂的位置;
(4) 判斷每個(gè)目標(biāo)代理是否超出邊界;
(5) 更新當(dāng)前最優(yōu)解及其適應(yīng)度值;
(6) 重復(fù)上述步驟, 直到 t 滿足終止準(zhǔn)則, 輸出全局最優(yōu)解及其適應(yīng)度值。
?二、部分源代碼
% Dung Beetle Optimizer: (DBO) (demo)
% Programmed by Jian-kai Xue
% Updated 28 Nov. 2022.
%
% This is a simple demo version only implemented the basic
% idea of the DBO for solving the unconstrained problem.
% The details about DBO are illustratred in the following paper.
% (To cite this article):
% Jiankai Xue & Bo Shen (2022) Dung beetle optimizer: a new meta-heuristic
% algorithm for global optimization. The Journal of Supercomputing, DOI:
% 10.1007/s11227-022-04959-6
clc,clear , close all
feature jit off
%% 模型基本參數(shù) 基于蜣螂優(yōu)化算法的三維無(wú)人機(jī)路徑優(yōu)化
% 載入地形 矩陣
filename = ‘TestData1.xlsx’ ;
model.x_data = xlsread( filename , ‘Xi’) ;
model.y_data = xlsread(filename, ‘Yi’) ;
model.z_data = xlsread( filename , ‘Zi’) ;
model.x_grid = model.x_data(1,:) ;
model.y_grid =model.y_data(:, 1) ;
%起點(diǎn) 相關(guān)信息
model.xs = 10 ;
model.ys = 90 ;
model.zs = interp2( model.x_data , model.y_data, model.z_data , …
model.xs , model.ys ,‘linear’ ) ; % 高度為插值得到
% 終點(diǎn) 相關(guān)信息
model.xt = 130 ;
model.yt = 10 ;
model.zt = interp2( model.x_data , model.y_data, model.z_data , …
model.xt , model.yt , ‘linear’); % 高度為插值得到
model.n= 5 ; % 粗略導(dǎo)航點(diǎn)設(shè)置
model.nn= 80 ; % 插值法獲得的導(dǎo)航點(diǎn)總數(shù)
model.Safeh = 0.0 ; % 與障礙物的最低飛行高度
% 導(dǎo)航點(diǎn) 邊界值
model.xmin= min( model.x_data( : ) ) ;
model.xmax= max ( model.x_data( : ) ) ;
model.ymin= min( model.y_data( : ) ) ;
model.ymax= max( model.y_data( : ) ) ;
model.zmin= min( model.z_data( : ) ) ;
model.zmax =model.zmin + (1+ 0.1)*( max( model.z_data(?? )-model.zmin ) ;
% 模型的其他參數(shù)
model.nVar = 3*model.n ; % 編碼長(zhǎng)度
model.pf = 10^4 ; % 懲罰系數(shù)
% 障礙物 位置坐標(biāo)及半徑
model.Barrier = [10,60 , 5;
40, 50,6
60, 50 , 5
100, 30, 8 ] ;
model.Num_Barrier = size(model.Barrier , 1 ); % 障礙物的數(shù)目
model.weight1 = 0.5; % 權(quán)重1 飛行線路長(zhǎng)度權(quán)重
model.weight2 = 0.3; % 權(quán)重2 飛行高度相關(guān)權(quán)重
model.weight3 = 0.2; % 權(quán)重3 Jsmooth 指標(biāo)權(quán)重
%% 算法參數(shù)設(shè)置
nPop = 30; % 種群規(guī)模
MaxIt = 200; % 最大迭代次數(shù)
% param.hPercent = 0.7; %
% param.mPercent = 0.5; %
VarMin = 0 ; % 自變量取值 低階
VarMax= 1 ;% 自變量取值 高階
nVar=15;
%% 運(yùn)行算法
CostFunction = @(x) MyCost(x,model); % 設(shè)置目標(biāo)函數(shù)
[ BestSol , BestCost ] = DBO( nPop,MaxIt ,VarMin, VarMax,nVar, CostFunction ) ;
% 繪制線路圖
gcf = figure(1);
% Plot Solution
set(gcf, ‘unit’ ,‘centimeters’ ,‘position’,[5 2 25 15 ]);
PlotSolution( BestSol , BestCost ,model)
figure
mesh( model.x_data , model.y_data , model.z_data ); hold on
colorbar; box on ,
set(gcf,‘Color’,[1 1 1]);
% set(gcf, ‘unit’ , ‘centimeters’,‘position’ , [2 2 30 15]);
h3= plot3( BestSol.sol.xx , BestSol.sol.yy , BestSol.sol.zz , ‘-r’); hold on
% temp = 10^-2 ;
h1 = plot3( model.xs, model.ys, model.zs, ‘o’ , ‘MarkerEdgeColor’,‘r’, …
‘MarkerFaceColor’,‘r’); hold on
h2 = plot3( model.xt , model.yt , model.zt, ‘^’ , ‘MarkerEdgeColor’,‘r’, …
‘MarkerFaceColor’,‘r’); hold on
if isfield( model ,‘Barrier’)
for ind = 1: model.Num_Barrier
[X,Y,Z] = cylinder( model.Barrier(ind, 3) ,100);
h4= surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(??)- model.zmin) ) ; hold on
set(h4, ‘edgecolor’,‘m’,‘facecolor’, ‘m’) ;
end
end
if ~isfield( model ,‘Barrier’)
legend( [ h1 , h2 , h3] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’, ‘Location’,‘southoutside’ , ‘Orientation’,‘horizontal’)
else
legend( [ h1 , h2 , h3 h4] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’ , ‘無(wú)法通行區(qū)域’ , ‘Location’,‘southoutside’, ‘Orientation’,‘horizontal’)
end
xlabel(‘x / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
ylabel(‘y / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
zlabel(‘z / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
set(gca, ‘xlim’ , [ model.xmin model.xmax]) ;
set(gca, ‘ylim’ , [ model.ymin model.ymax]) ;
axis tight
axis normal
hold off
set(gca, ‘cameraposition’, [-337 , 0 , 14.2])
%%
figure
mesh( model.x_data , model.y_data , model.z_data ); hold on
view(2)
% contour( model.x_data , model.y_data , model.z_data ); hold on
colorbar; box on ,
set(gcf,‘Color’,[1 1 1]);
% set(gcf, ‘unit’ , ‘centimeters’,‘position’ , [2 2 30 15]);
h3= plot3( BestSol.sol.xx , BestSol.sol.yy , BestSol.sol.zz , ‘-r’); hold on
% temp = 10^-2 ;
h1 = plot3( model.xs, model.ys, model.zs, ‘o’ , ‘MarkerEdgeColor’,‘b’, …
‘MarkerFaceColor’,‘b’); hold on
h2 = plot3( model.xt , model.yt , model.zt, ‘^’ , ‘MarkerEdgeColor’,‘g’, …
‘MarkerFaceColor’,‘g’); hold on
% legend( [ h1 , h2 , h3] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’, ‘Location’,‘southoutside’ , ‘Orientation’,‘horizontal’)
if isfield( model ,‘Barrier’)
for ind = 1: model.Num_Barrier
[X,Y,Z] = cylinder( model.Barrier(ind, 3) ,100);
h4= surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(??)- model.zmin) ) ; hold on
set(h4, ‘edgecolor’,‘m’,‘facecolor’, ‘m’) ;
end
end
if ~isfield( model ,‘Barrier’)
legend( [ h1 , h2 , h3] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’, ‘Location’,‘southoutside’ , ‘Orientation’,‘horizontal’)
else
legend( [ h1 , h2 , h3 h4] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’ , ‘無(wú)法通行區(qū)域’ , ‘Location’,‘southoutside’, ‘Orientation’,‘horizontal’)
end
xlabel(‘x / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
ylabel(‘y / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
zlabel(‘z / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
set(gca, ‘xlim’ , [ model.xmin model.xmax]) ;
set(gca, ‘ylim’ , [ model.ymin model.ymax]) ;
axis tight
axis normal
hold off
%%
figure
% mesh( model.x_data , model.y_data , model.z_data ); hold on
% view(2)
contour( model.x_data , model.y_data , model.z_data ); hold on
colorbar; box on ,
set(gcf,‘Color’,[1 1 1]);
% set(gcf, ‘unit’ , ‘centimeters’,‘position’ , [2 2 30 15]);
h3= plot3( BestSol.sol.xx , BestSol.sol.yy , BestSol.sol.zz , ‘-r’); hold on
% temp = 10^-2 ;
h1 = plot3( model.xs, model.ys, model.zs, ‘o’ , ‘MarkerEdgeColor’,‘b’, …
‘MarkerFaceColor’,‘b’); hold on
h2 = plot3( model.xt , model.yt , model.zt, ‘^’ , ‘MarkerEdgeColor’,‘g’, …
‘MarkerFaceColor’,‘g’); hold on
% legend( [ h1 , h2 , h3] , ‘起點(diǎn)’ , ‘終點(diǎn)’ , ‘線路’, ‘Location’,‘southoutside’ , ‘Orientation’,‘horizontal’)
if isfield( model ,‘Barrier’)
for ind = 1: model.Num_Barrier
[X,Y,Z] = cylinder( model.Barrier(ind, 3) ,100);
h4= surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(??)- model.zmin) ) ; hold on
xlabel(‘x / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
ylabel(‘y / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
zlabel(‘z / km’,‘fontsize’,10 ,‘fontname’,‘宋體’);
set(gca, ‘xlim’ , [ model.xmin model.xmax]) ;
set(gca, ‘ylim’ , [ model.ymin model.ymax]) ;
axis tight
axis normal
hold off
%% 收斂曲線
figure
% semilogy( BestSol.BestCost ,‘LineWidth’,2);
plot( BestCost ,‘LineWidth’,2);
xlabel(‘迭代次數(shù)’);
ylabel(‘目標(biāo)函數(shù)’);
grid on;
% set(gca,‘XLim’,[0 BestSol.MaxIt]);%X軸的數(shù)據(jù)顯示范圍
?三、運(yùn)行結(jié)果
?四、matlab版本及參考文獻(xiàn)
1 matlab版本
2014a
2 參考文獻(xiàn)
[1]田疆,李二超.用于無(wú)人機(jī)三維航跡規(guī)劃改進(jìn)連接型快速擴(kuò)展隨機(jī)樹算法[J].航空工程進(jìn)展. 2018,9(04)
3 備注
簡(jiǎn)介此部分摘自互聯(lián)網(wǎng),僅供參考,若侵權(quán),聯(lián)系刪除
?? 仿真咨詢
1 各類智能優(yōu)化算法改進(jìn)及應(yīng)用
生產(chǎn)調(diào)度、經(jīng)濟(jì)調(diào)度、裝配線調(diào)度、充電優(yōu)化、車間調(diào)度、發(fā)車優(yōu)化、水庫(kù)調(diào)度、三維裝箱、物流選址、貨位優(yōu)化、公交排班優(yōu)化、充電樁布局優(yōu)化、車間布局優(yōu)化、集裝箱船配載優(yōu)化、水泵組合優(yōu)化、解醫(yī)療資源分配優(yōu)化、設(shè)施布局優(yōu)化、可視域基站和無(wú)人機(jī)選址優(yōu)化
2 機(jī)器學(xué)習(xí)和深度學(xué)習(xí)方面
卷積神經(jīng)網(wǎng)絡(luò)(CNN)、LSTM、支持向量機(jī)(SVM)、最小二乘支持向量機(jī)(LSSVM)、極限學(xué)習(xí)機(jī)(ELM)、核極限學(xué)習(xí)機(jī)(KELM)、BP、RBF、寬度學(xué)習(xí)、DBN、RF、RBF、DELM、XGBOOST、TCN實(shí)現(xiàn)風(fēng)電預(yù)測(cè)、光伏預(yù)測(cè)、電池壽命預(yù)測(cè)、輻射源識(shí)別、交通流預(yù)測(cè)、負(fù)荷預(yù)測(cè)、股價(jià)預(yù)測(cè)、PM2.5濃度預(yù)測(cè)、電池健康狀態(tài)預(yù)測(cè)、水體光學(xué)參數(shù)反演、NLOS信號(hào)識(shí)別、地鐵停車精準(zhǔn)預(yù)測(cè)、變壓器故障診斷
3 圖像處理方面
圖像識(shí)別、圖像分割、圖像檢測(cè)、圖像隱藏、圖像配準(zhǔn)、圖像拼接、圖像融合、圖像增強(qiáng)、圖像壓縮感知
4 路徑規(guī)劃方面
旅行商問(wèn)題(TSP)、車輛路徑問(wèn)題(VRP、MVRP、CVRP、VRPTW等)、無(wú)人機(jī)三維路徑規(guī)劃、無(wú)人機(jī)協(xié)同、無(wú)人機(jī)編隊(duì)、機(jī)器人路徑規(guī)劃、柵格地圖路徑規(guī)劃、多式聯(lián)運(yùn)運(yùn)輸問(wèn)題、車輛協(xié)同無(wú)人機(jī)路徑規(guī)劃、天線線性陣列分布優(yōu)化、車間布局優(yōu)化
5 無(wú)人機(jī)應(yīng)用方面
無(wú)人機(jī)路徑規(guī)劃、無(wú)人機(jī)控制、無(wú)人機(jī)編隊(duì)、無(wú)人機(jī)協(xié)同、無(wú)人機(jī)任務(wù)分配
6 無(wú)線傳感器定位及布局方面
傳感器部署優(yōu)化、通信協(xié)議優(yōu)化、路由優(yōu)化、目標(biāo)定位優(yōu)化、Dv-Hop定位優(yōu)化、Leach協(xié)議優(yōu)化、WSN覆蓋優(yōu)化、組播優(yōu)化、RSSI定位優(yōu)化
7 信號(hào)處理方面
信號(hào)識(shí)別、信號(hào)加密、信號(hào)去噪、信號(hào)增強(qiáng)、雷達(dá)信號(hào)處理、信號(hào)水印嵌入提取、肌電信號(hào)、腦電信號(hào)、信號(hào)配時(shí)優(yōu)化
8 電力系統(tǒng)方面
微電網(wǎng)優(yōu)化、無(wú)功優(yōu)化、配電網(wǎng)重構(gòu)、儲(chǔ)能配置
9 元胞自動(dòng)機(jī)方面
交通流 人群疏散 病毒擴(kuò)散 晶體生長(zhǎng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-826681.html
10 雷達(dá)方面
卡爾曼濾波跟蹤、航跡關(guān)聯(lián)、航跡融合文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-826681.html
到了這里,關(guān)于【DBO三維路徑規(guī)劃】蜣螂算法DBO復(fù)雜山地地形無(wú)人機(jī)三維路徑規(guī)劃【含Matlab源碼 3575期】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!