?博主簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術同步精進,Matlab項目合作可私信。
??個人主頁:海神之光
??代碼獲取方式:
海神之光Matlab王者學習之路—代碼獲取方式
??座右銘:行百里者,半于九十。
更多Matlab仿真內容點擊??
Matlab圖像處理(進階版)
路徑規(guī)劃(Matlab)
神經網絡預測與分類(Matlab)
優(yōu)化求解(Matlab)
語音處理(Matlab)
信號處理(Matlab)
車間調度(Matlab)
?一、螢火蟲算法及柵格地圖簡介
1 螢火蟲算法
螢火蟲算法(Firefly Algorithm,FA)是由Yang于2010年提出的一種群智能優(yōu)化算法,在自然界中,螢火蟲之間通過自身發(fā)光來吸引異性前來交配以及吸引獵物進行捕獵,而該算法主要仿照自然界中螢火蟲之間受彼此亮度而相互吸引的行為來進行目標范圍內的尋優(yōu)過程。
在螢火蟲算法的基本思想中,主要涉及到的兩個概念有兩個,分別為吸引力與個體間的移動,下面將分別從這兩個方面進行介紹。
2.1 吸引力
在螢火蟲算法中,每個螢火蟲的位置代表了一個待求問題的可行解,而螢火蟲的亮度表示該螢火蟲位置的適應度值,亮度越高的螢火蟲個體在解空間內的位置越好,在解空間內,每個螢火蟲會向著亮度比自己高的螢火蟲飛行來搜尋更優(yōu)的位置,亮度越大對其他的螢火蟲的吸引度越大。同時,螢火蟲之間光的傳播介質會吸收光,降低光的亮度,影響光的傳播,所以螢火蟲之間的吸引度會隨著空間距離成反比,即兩只螢火蟲之間的吸引度會隨著這兩只螢火蟲之間距離的增大而減小?;诖耍褂孟嗷ノ裙綄ξ灮鹣x之間的吸引力進行計算。
2.2 個體間的位置移動
受到吸引力的影響,種群中的每一只螢火蟲均會被亮度比其大的螢火蟲所吸引,進而向其所在的方向進行移動,具體的位置更新公式如下,而依次向所有亮度更大的個體移動完之后的位置才是螢火蟲的最終確定位置。
2.3 算法步驟
使用螢火蟲算法對優(yōu)化問題進行求解時的具體步驟可以歸納如下:
(1)設置種群的個體數量、初始吸引度值β0、傳播介質對光的吸收系數γ以及步長的擾動因子α;
(2)以螢火蟲個體的位置信息作為待優(yōu)化問題的解,以螢火蟲個體的亮度作為解對應的適應度值,根據待優(yōu)化問題的解的范圍,隨機初始化種群所有個體的位置信息;
(3)根據待求解問題,計算種群中每個個體的適應度值,之后對種群個體的適應度值進行比較,將最高適應度值作為種群的歷史最優(yōu)適應度值,將其對應的位置信息作為種群的歷史最優(yōu)位置信息;
(4)依次將每個個體與其它個體進行適應度值的比較,同時計算個體之間的空間距離,按照適應度值低的個體被適應度高的個體吸引的原則,確定每個個體分別被種群內哪些個體吸引并根據空間距離計算出每個個體受到的所有吸引力;
(5)每個個體依次向所有適應度值比它高的個體位置方向進行移動,按照相關公式進行位置更新;
(6)計算每個個體更新后的適應度值,對種群的歷史最優(yōu)適應度值、歷史最優(yōu)位置信息進行更新;
(7)根據預設的迭代次數重復步驟4到步驟6,當達到最大迭代次數時停止迭代過程,輸出種群的歷史最優(yōu)位置信息,此位置信息即為算法優(yōu)化后獲得的問題最優(yōu)解。
2 柵格地圖
2.1 柵格法應用背景
路徑規(guī)劃時首先要獲取環(huán)境信息, 建立環(huán)境地圖, 合理的環(huán)境表示有利于建立規(guī)劃方法和選擇合適的搜索算法,最終實現較少的時間開銷而規(guī)劃出較為滿意的路徑。一般使用柵格法在靜態(tài)環(huán)境下建立環(huán)境地圖。
2.2 柵格法實質
將AGV的工作環(huán)境進行單元分割, 將其用大小相等的方塊表示出來,這樣柵格大小的選取是影響規(guī)劃算法性能的一個很重要的因素。柵格較小的話,由柵格地圖所表示的環(huán)境信息將會非常清晰,但由于需要存儲較多的信息,會增大存儲開銷,同時干擾信號也會隨之增加,規(guī)劃速度會相應降低,實時性得不到保證;反之,由于信息存儲量少,抗干擾能力有所增強,規(guī)劃速隨之增快,但環(huán)境信息劃分會變得較為模糊,不利于有效路徑的規(guī)劃。在描述環(huán)境信息時障礙物所在區(qū)域在柵格地圖中呈現為黑色,地圖矩陣中標為1,可自由通行區(qū)域在柵格地圖中呈現為白色,地圖矩陣中標為0。路徑規(guī)劃的目的就是在建立好的環(huán)境地圖中找到一條最優(yōu)的可通行路徑,所以使用柵格法建立環(huán)境地圖時,柵格大小的合理設定非常關鍵。
2.3 10乘10的靜態(tài)環(huán)境地圖
10乘10的靜態(tài)環(huán)境地圖代碼
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立環(huán)境地圖%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function DrawMap(map)
n = size(map);
step = 1;
a = 0 : step :n(1);
b = 0 : step :n(2);
figure(1)
axis([0 n(2) 0 n(1)]); %設置地圖橫縱尺寸
set(gca,'xtick',b,'ytick',a,'GridLineStyle','-',...
'xGrid','on','yGrid','on');
hold on
r = 1;
for(i=1:n(1)) %設置障礙物的左下角點的x,y坐標
for(j=1:n(2))
if(map(i,j)==1)
p(r,1)=j-1;
p(r,2)=i-1;
fill([p(r,1) p(r,1) + step p(r,1) + step p(r,1)],...
[p(r,2) p(r,2) p(r,2) + step p(r,2) + step ],'k');
r=r+1;
hold on
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%柵格數字標識%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x_text = 1:1:n(1)*n(2); %產生所需數值.
for i = 1:1:n(1)*n(2)
[row,col] = ind2sub([n(2),n(1)],i);
text(row-0.9,col-0.5,num2str(x_text(i)),'FontSize',8,'Color','0.7 0.7 0.7');
end
hold on
axis square
建立環(huán)境矩陣,1代表黑色柵格,0代表白色柵格,調用以上程序,即可得到上述環(huán)境地圖。
map=[0 0 0 1 0 0 1 0 0 0;
1 0 0 0 0 1 1 0 0 0;
0 0 1 0 0 0 1 1 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 0 0 1 0;
1 0 0 0 0 1 1 0 0 0;
0 0 0 1 0 0 0 0 0 0;
1 1 1 0 0 0 1 0 0 0;
0 0 0 0 0 1 1 0 0 0;
0 0 0 0 0 1 1 0 0 0;];
DrawMap(map); %得到環(huán)境地圖
2.4 柵格地圖中障礙柵格處路徑約束
移動體柵格環(huán)境中多采用八方向的移動方式,此移動方式在完全可通行區(qū)域不存在運行安全問題,當
移動體周圍存在障礙柵格時此移動方式可能會發(fā)生與障礙物柵格的碰撞問題,為解決此問題加入約束
條件,當在分別與障礙物柵格水平方向和垂直方向的可行柵格兩柵格之間通行時,禁止移動體采用對
角式移動方式。
約束條件的加入,實質是改變柵格地圖的鄰接矩陣,將障礙柵格(數字為“1”的矩陣元素)的對角柵格
設為不可達, 即將對角柵格的距離值改為無窮大。其實現MATLAB代碼如下:
代碼:
%約束移動體在障礙柵格對角運動
%通過優(yōu)化鄰接矩陣實現
%%%%%%%%%%%%%%%%%% 約束移動體移動方式 %%%%%%%%%%%%%%%%%
function W=OPW(map,W)
% map 地圖矩陣 % W 鄰接矩陣
n = size(map);
num = n(1)*n(2);
for(j=1:n(1))
for(z=1:n(2))
if(map(j,z)==1)
if(j==1) %若障礙物在第一行
if(z==1) %若障礙物為第一行的第一個
W(j+1,j+n(2)*j)=Inf;
W(j+n(2)*j,j+1)=Inf;
else
if(z==n(2)) %若障礙物為第一行的最后一個
W(n(2)-1,n(2)+n(1)*j)=Inf;
W(n(2)+n(1)*j,n(2)-1)=Inf;
else %若障礙物為第一行的其他
W(z-1,z+j*n(2))=Inf;
W(z+j*n(2),z-1)=Inf;
W(z+1,z+j*n(2))=Inf;
W(z+j*n(2),z+1)=Inf;
end
end
end
if(j==n(1)) %若障礙物在最后一行
if(z==1) %若障礙物為最后一行的第一個
W(z+n(2)*(j-2),z+n(2)*(j-1)+1)=Inf;
W(z+n(2)*(j-1)+1,z+n(2)*(j-2))=Inf;
else
if(z==n(2)) %若障礙物為最后一行的最后一個
W(n(1)*n(2)-1,(n(1)-1)*n(2))=Inf;
W((n(1)-1)*n(2),n(1)*n(2)-1)=Inf;
else %若障礙物為最后一行的其他
W((j-2)*n(2)+z,(j-1)*n(2)+z-1)=Inf;
W((j-1)*n(2)+z-1,(j-2)*n(2)+z)=Inf;
W((j-2)*n(2)+z,(j-1)*n(2)+z+1)=Inf;
W((j-1)*n(2)+z+1,(j-2)*n(2)+z)=Inf;
end
end
end
if(z==1)
if(j~=1&&j~=n(1)) %若障礙物在第一列非邊緣位置
W(z+(j-2)*n(2),z+1+(j-1)*n(2))=Inf;
W(z+1+(j-1)*n(2),z+(j-2)*n(2))=Inf;
W(z+1+(j-1)*n(2),z+j*n(2))=Inf;
W(z+j*n(2),z+1+(j-1)*n(2))=Inf;
end
end
if(z==n(2))
if(j~=1&&j~=n(1)) %若障礙物在最后一列非邊緣位置
W((j+1)*n(2),j*n(2)-1)=Inf;
W(j*n(2)-1,(j+1)*n(2))=Inf;
W(j*n(2)-1,(j-1)*n(2))=Inf;
W((j-1)*n(2),j*n(2)-1)=Inf;
end
end
if(j~=1&&j~=n(1)&&z~=1&&z~=n(2)) %若障礙物在非邊緣位置
W(z+(j-1)*n(2)-1,z+j*n(2))=Inf;
W(z+j*n(2),z+(j-1)*n(2)-1)=Inf;
W(z+j*n(2),z+(j-1)*n(2)+1)=Inf;
W(z+(j-1)*n(2)+1,z+j*n(2))=Inf;
W(z+(j-1)*n(2)-1,z+(j-2)*n(2))=Inf;
W(z+(j-2)*n(2),z+(j-1)*n(2)-1)=Inf;
W(z+(j-2)*n(2),z+(j-1)*n(2)+1)=Inf;
W(z+(j-1)*n(2)+1,z+(j-2)*n(2))=Inf;
end
end
end
end
end
2.5 柵格法案例
下面以Djkstra算法為例, 其實現如下:
map=[0 0 0 1 0 0 1 0 0 0;
1 0 0 0 0 1 1 0 0 0;
0 0 1 0 0 0 1 1 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 0 0 1 0;
1 0 0 0 0 1 1 0 0 0;
0 0 0 1 0 0 0 0 0 0;
1 1 1 0 0 0 1 0 0 0;
0 0 0 0 0 1 1 0 0 0;
0 0 0 0 0 1 1 0 0 0;];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立環(huán)境矩陣map%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DrawMap(map); %得到環(huán)境地圖
W=G2D(map); %得到環(huán)境地圖的鄰接矩陣
W(W==0)=Inf; %鄰接矩陣數值處理
W=OPW(map,W); %優(yōu)化鄰接矩陣
[distance,path]=dijkstra(W,1,100);%設置起始柵格,得到最短路徑距離以及柵格路徑
[x,y]=Get_xy(distance,path,map); %得到柵格相應的x,y坐標
Plot(distance,x,y); %畫出路徑
運行結果如下:
其中函數程序:
DrawMap(map) 詳見建立柵格地圖
W=G2D(map) ; 詳見建立鄰接矩陣
[distance, path] =dijkstra(W, 1, 100) 詳見Djk stra算法
[x, y] =Get_xy(distance, path, map) ;
Plot(distance, x, y) ;
?二、部分源代碼
clc
clear
close all
tic
%% 地圖
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0;
0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];
for i=1:20/2
for j=1:20
m=G(i,j);
n=G(21-i,j);
G(i,j)=n;
G(21-i,j)=m;
end
end
%%
S = [1 1];
E = [20 20];
G0 = G;
G = G0(S(1):E(1),S(2):E(2));
[Xmax,dimensions] = size(G);
dimensions = dimensions - 2;
X_min = 1;
%% 參數設置
max_gen = 200; % 最大迭代次數
num_polution = 50; % 種群數量
fboj=@(x)fitness(x,G,X_min,Xmax);
?三、運行結果
?四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1]陳云霽,范道生,劉新宇. “基于正弦余弦算法的自主導航機器人路徑規(guī)劃研究.” 自動化學報,2012年,38(8): 1465-1474.
[2]陳云霽,范道生,劉新宇. “基于正弦余弦算法的機器人路徑規(guī)劃實驗研究.” 科技通報,2011年,27(11): 68-71.
[3]張銀紅,楊琳. “基于正弦余弦算法的柵格地圖機器人路徑規(guī)劃研究.” 計算機技術與發(fā)展,2012年,22(7): 12-15.
[4]劉江波,吳天一. 《柵格地圖機器人路徑規(guī)劃算法及其應用》. 清華大學出版社,2016年.
3 備注
簡介此部分摘自互聯(lián)網,僅供參考,若侵權,聯(lián)系刪除
?? 仿真咨詢
1 各類智能優(yōu)化算法改進及應用
生產調度、經濟調度、裝配線調度、充電優(yōu)化、車間調度、發(fā)車優(yōu)化、水庫調度、三維裝箱、物流選址、貨位優(yōu)化、公交排班優(yōu)化、充電樁布局優(yōu)化、車間布局優(yōu)化、集裝箱船配載優(yōu)化、水泵組合優(yōu)化、解醫(yī)療資源分配優(yōu)化、設施布局優(yōu)化、可視域基站和無人機選址優(yōu)化
2 機器學習和深度學習方面
卷積神經網絡(CNN)、LSTM、支持向量機(SVM)、最小二乘支持向量機(LSSVM)、極限學習機(ELM)、核極限學習機(KELM)、BP、RBF、寬度學習、DBN、RF、RBF、DELM、XGBOOST、TCN實現風電預測、光伏預測、電池壽命預測、輻射源識別、交通流預測、負荷預測、股價預測、PM2.5濃度預測、電池健康狀態(tài)預測、水體光學參數反演、NLOS信號識別、地鐵停車精準預測、變壓器故障診斷
3 圖像處理方面
圖像識別、圖像分割、圖像檢測、圖像隱藏、圖像配準、圖像拼接、圖像融合、圖像增強、圖像壓縮感知
4 路徑規(guī)劃方面
旅行商問題(TSP)、車輛路徑問題(VRP、MVRP、CVRP、VRPTW等)、無人機三維路徑規(guī)劃、無人機協(xié)同、無人機編隊、機器人路徑規(guī)劃、柵格地圖路徑規(guī)劃、多式聯(lián)運運輸問題、車輛協(xié)同無人機路徑規(guī)劃、天線線性陣列分布優(yōu)化、車間布局優(yōu)化
5 無人機應用方面
無人機路徑規(guī)劃、無人機控制、無人機編隊、無人機協(xié)同、無人機任務分配
6 無線傳感器定位及布局方面
傳感器部署優(yōu)化、通信協(xié)議優(yōu)化、路由優(yōu)化、目標定位優(yōu)化、Dv-Hop定位優(yōu)化、Leach協(xié)議優(yōu)化、WSN覆蓋優(yōu)化、組播優(yōu)化、RSSI定位優(yōu)化
7 信號處理方面
信號識別、信號加密、信號去噪、信號增強、雷達信號處理、信號水印嵌入提取、肌電信號、腦電信號、信號配時優(yōu)化
8 電力系統(tǒng)方面
微電網優(yōu)化、無功優(yōu)化、配電網重構、儲能配置
9 元胞自動機方面
交通流 人群疏散 病毒擴散 晶體生長文章來源:http://www.zghlxwxcb.cn/news/detail-828707.html
10 雷達方面
卡爾曼濾波跟蹤、航跡關聯(lián)、航跡融合文章來源地址http://www.zghlxwxcb.cn/news/detail-828707.html
到了這里,關于【路徑規(guī)劃】螢火蟲算法柵格地圖機器人最短路徑規(guī)劃【含Matlab源碼 3662期】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!