蟻群算法最短路徑通用Matlab程序附圖_第1頁
蟻群算法最短路徑通用Matlab程序附圖_第2頁
蟻群算法最短路徑通用Matlab程序附圖_第3頁
蟻群算法最短路徑通用Matlab程序附圖_第4頁
蟻群算法最短路徑通用Matlab程序附圖_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、蟻群算法最短路徑通用Matlab程序(附圖)代碼:function ROUTES,PL,Tau=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q)% -% ACASP.m% 蟻群算法動態尋路算法% ChengAihua,PLA Information Engineering University,ZhengZhou,China% Email:aihuacheng% All rights reserved% -% 輸入參數列表% G 地形圖為01矩陣,如果為1表示障礙物% Tau 初始信息素矩陣(認為前面的覓食活動中有殘留的信息素)% K 迭代次數(指螞蟻出動多少波)%

2、M 螞蟻個數(每一波螞蟻有多少個)% S 起始點(最短路徑的起始點)% E 終止點(最短路徑的目的點)% Alpha 表征信息素重要程度的參數% Beta 表征啟發式因子重要程度的參數% Rho 信息素蒸發系數% Q 信息素增加強度系數% 輸出參數列表% ROUTES 每一代的每一只螞蟻的爬行路線% PL 每一代的每一只螞蟻的爬行路線長度% Tau 輸出動態修正過的信息素% -變量初始化-%loadD=G2D(G);N=size(D,1);%N表示問題的規模(象素個數)MM=size(G,1);a=1;%小方格象素的邊長Ex=a*(mod(E,MM)-0.5);%終止點橫坐標if Ex=-0.

3、5Ex=MM-0.5;endEy=a*(MM+0.5-ceil(E/MM);%終止點縱坐標Eta=zeros(1,N);%啟發式信息,取為至目標點的直線距離的倒數%下面構造啟發式信息矩陣for i=1:Nif ix=-0.5ix=MM-0.5;endiy=a*(MM+0.5-ceil(i/MM); if i=EEta(1,i)=1/(ix-Ex)2+(iy-Ey)2)0.5;elseEta(1,i)=100;endendROUTES=cell(K,M);%用細胞結構存儲每一代的每一只螞蟻的爬行路線PL=zeros(K,M);%用矩陣存儲每一代的每一只螞蟻的爬行路線長度% -啟動K輪螞蟻覓食活動

4、,每輪派出M只螞蟻-for k=1:Kdisp(k);for m=1:M% 第一步:狀態初始化W=S;%當前節點初始化為起始點Path=S;%爬行路線初始化PLkm=0;%爬行路線長度初始化TABUkm=ones(1,N);%禁忌表初始化TABUkm(S)=0;%已經在初始點了,因此要排除DD=D;%鄰接矩陣初始化% 第二步:下一步可以前往的節點DW=DD(W,;DW1=find(DWfor j=1:length(DW1)if TABUkm(DW1(j)=0DW(j)=inf;endendLJD=find(DWLen_LJD=length(LJD);%可選節點的個數% 覓食停止條件:螞蟻未遇到

5、食物或者陷入死胡同while W=E&&Len_LJD>=1% 第三步:轉輪賭法選擇下一步怎么走PP=zeros(1,Len_LJD);for i=1en_LJDPP(i)=(Tau(W,LJD(i)Alpha)*(Eta(LJD(i)Beta);endPP=PP/(sum(PP);%建立概率分布Pcum=cumsum(PP);Select=find(Pcum>=rand);% 第四步:狀態更新和記錄Path=Path,to_visit;%路徑增加PLkm=PLkm+DD(W,to_visit);%路徑長度增加W=to_visit;%螞蟻移到下一個節點for kk=

6、1:Nif TABUkm(kk)=0DD(W,kk)=inf;DD(kk,W)=inf;endendTABUkm(W)=0;%已訪問過的節點從禁忌表中刪除for j=1:length(DW1)if TABUkm(DW1(j)=0DW(j)=inf;endendLJD=find(DWLen_LJD=length(LJD);%可選節點的個數end% 第五步:記下每一代每一只螞蟻的覓食路線和路線長度ROUTESk,m=Path;if Path(end)=EPL(k,m)=PLkm;elsePL(k,m)=inf;endend% 第六步:更新信息素Delta_Tau=zeros(N,N);%更新量初始

7、化for m=1:Mif PL(k,m) ROUT=ROUTESk,m;TS=length(ROUT)-1;%跳數PL_km=PL(k,m);for s=1:TSx=ROUT(s);Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;endendendTau=(1-Rho).*Tau+Delta_Tau;%信息素揮發一部分,新增加一部分end% -繪圖-plotif=1;%是否繪圖的控制參數if plotif=1%繪收斂曲線meanPL=zeros(1,K);minPL=zeros(1,K);for i=1:KPLK=PL(i,;Nonzero=find(PLKPLKP

8、LK=PLK(Nonzero);meanPL(i)=mean(PLKPLK);minPL(i)=min(PLKPLK);endfigure(1)plot(minPL);hold onplot(meanPL);grid ontitle('收斂曲線(平均路徑長度和最小路徑長度)');xlabel('迭代次數');ylabel('路徑長度');%繪爬行圖figure(2)axis(0,MM,0,MM)for i=1:MMfor j=1:MMif G(i,j)=1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x4=j-1;y4=MM-i+1;f

9、ill(x1,x2,x3,x4,y1,y2,y3,y4,0.2,0.2,0.2);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,1,1,1);hold onendendendhold onLENROUT=length(ROUT);Rx=ROUT;Ry=ROUT;for ii=1ENROUTRx(ii)=a*(mod(ROUT(ii),MM)-0.5);if Rx(ii)=-0.5Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.

10、5-ceil(ROUT(ii)/MM);endplot(Rx,Ry)endplotif2=1;%繪各代螞蟻爬行圖if plotif2=1figure(3)axis(0,MM,0,MM)for i=1:MMfor j=1:MMif G(i,j)=1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x4=j-1;y4=MM-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,0.2,0.2,0.2);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,1,1,1);hold onendendendfor k=1:KPLK=PL(k,;minPLK=min(PLK);pos=find(PLK=minPLK);m=pos(1);ROUT=ROUTESk,m;LENROUT=leng

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論