蟻群算法程序_第1頁
蟻群算法程序_第2頁
蟻群算法程序_第3頁
全文預覽已結束

下載本文檔

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

文檔簡介

1、function R_best,L_best,L_ave,Shortest_Route,Shortest_Length 二AcoForTsp(C,NC_maxji】,Alpha,Beta,Rho,Q) %C表示n個城市的坐標,為nX2的矩陣 % % NCnax為最大迭代次數 % %m表示螞蟻個數% % Alpha表征信息素重要程度的參數 % % Beta表征啟發(fā)式因子重要程度的參數 % % Rho信息素蒸發(fā)系數%Q信息素增加強度系數 % % R.best各代最佳路線 % % L_best各代最佳路線的長度 %= %第一步:變量初始化C=5.294,l.558;4.286,3.622;4.719

2、,2.774;4.1852230;0.915,3.821;4.771,6.041;L524,2.871;3.4472111;3.718 3.665;2.649,2.556;4.439,1.194;4.660,2.949;1.232,6.440;5.036,0.244;2.7103.140;1.0723.454;5.855,6.203;0.1 94,L862;1.7622693;2.862,6.097; n=size(C,l);%n表示問題的規(guī)模(城市個數) D=zeros(n,n);%D表示完全圖的賦權鄰接矩陣 m=20;NC_max=200;Alpha=l;Beta=5;Q=10;Rho=0

3、.7; %相關參量初始化 for i=l:n for j=l:n lfk=J D(iJ)=(C(i4)-C(hl)A2+(C(U).C(j,2)A2)A0.5; %計算兩兩城市之間的距離 else D(iJ)=eps; %i=j時不計算,應該為0,但后面的啟發(fā)因子要取倒數,用eps (浮點相對精度)表示 end D(J4)=D(iJ);%對稱矩陣end end Eta=l./D;%Eta為啟發(fā)因子,這里設為距離的倒數Tau=ones(n,n);%Tau為信息素矩陣Tabu=zeros(m,n);%存儲并記錄路徑的生成NC=1;%迭代計數器,記錄迭代次數R_best=zeros(NC_max,n

4、);% 各代最佳路線L_best=inf.*ones(NC_max,l);% 各代最佳路線的長度L_a ve=zeros( N C_max, 1);%各代路線的平均長度while NC<=NC_max%停止條件之一:達到最大迭代次數,停止%第二步:將m只螞蟻放到n個城市上 Randpos=; %隨機存取 for i=l:(ceil(m/n) Randpos=Randpos,randperin(n); end Tabu(:J)=(Randpos(lJ:in),; %將螞蟻初始位置置于禁忌表第一列(對禁忌表的第一列初始化)%第三步:m只螞蟻按概率函數選擇下一座城市,完成各自的周游 for j

5、=2:n%所在城市不計算for i=l:m visited=Tabu(i,l:(j-l); %記錄已訪問的城市,避免重復訪問 J=zeros(l,(n-j+l); % 待訪問的城市 P=J;%待訪問城市的選擇概率分布Jc=l; for k=l:n if length(find(visited=k)=O%開始時置 0Jc=Jc+i;%訪問的城市個數自加iend end %計算待選城市的概率分布 for k=l:length(J) P(k)=(Tau(visite(l(end)J(k)AAlpha)*(Eta(visited(end)J(k)ABeta); end P=P/(sum(P); %按概

6、率原則使用輪盤賭的算法選取Ti個城市 Pcuin=cumsuin(P); %cunisum,元素累加即求和 Sdect=find(Pcum>=rand);%若計算的概率大于原來的就選擇這條路線 to_visit=J( Select(l); Tabu(iJ)=to_visit; end end if NC>=2 Tabu(l,:)=R_best(NC-l,:); end%第四步:記錄本次迭代最佳路線L=zeros(mJ);%開始距離為0, n】* 1的列向量for i=l:m R=Tabu(i,:);%原距離加上第j個城市到第j+1個城市的距離%一輪下來后走過的距離%最佳距離取最小%

7、此輪迭代后的最佳路線%此輪迭代后的平均距離%迭代繼續(xù)%開始時置信息素為n*n的0矩陣for j=l:(n-l) L(i)=L(i)+D(Ra),R(j+l); endL(i)=L(i)+D(R(l),R(n); endL_best(NC)=min(L) pos=find(L=L_best(NC);R_best(NC,: )=T abu(pos(l)9:) L_ave(NC)=mean(L);NC=NC+1%第五步:更新信息素Delta_Tau=zeros(n,n);for i=l:m for j=l:(n-l)Delta_Tau(Tabu(iJ),Tabii(IJ+l)=Delta_Tau(T

8、abu(ij),Tabu(iJ+l)+Q/L(i); %此次循環(huán)在路徑(i, j)上的信息素地量endDelta_Tau(Tabu(i,n),Tabu(iJ)=Delta_Tau(Tabu(i,n),Tabu(i,l)+Q/L(i);%此次循環(huán)在整個路徑上的信息素增熹endTau=(l-Rho).*Tau+Delta_Tau; %考慮信息素揮發(fā),更新后的信息素 %第六步:禁忌表清零Tabu=zeros(m,n);% %直到最大迭代次數end%第七步:輸出結果Pos=find(L_best=min(L_best); % 找到最佳路徑(非0為真) Shortest_Route=R_best(Pos

9、(l),:) %最大迭代次數后最佳路徑 Shortest_Length=L_best(Pos( 1) %最大迭代次數后最短距離subplot。,2,1)DrawRoute(CShortest_Route) subplot( 1,2,2)plot(L_best) hold on plot(L_ave/r*) title (年均距離和最短距離,) function DrawRoute(C,R) % % =%繪制第一個子圖形%畫路線圖的子函數 %繪制第二個子圖形%保持圖形%標題% % DrawRoute.m%畫路線圖的子函數% % C Coordinate節(jié)點坐標,由一個NX2的矩陣存儲% % R Route 路線% % =N=length(R);scatter(C(:J),C(:J);hold o

溫馨提示

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

評論

0/150

提交評論