基本蟻群算法matlab_第1頁
基本蟻群算法matlab_第2頁
基本蟻群算法matlab_第3頁
基本蟻群算法matlab_第4頁
全文預覽已結束

下載本文檔

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

文檔簡介

1、基本蟻群算法 matlab 實現(xiàn)function R_best,L_best,L_ave,Shortest_Route,Shortest_Length = AC( C, NC_Max,m,Alpha,Beta,Rho,Q)%主要符號說明%C n 個城市的坐標, n*2 矩陣%NC_Max 最大循環(huán)次數(shù)%m 螞蟻個數(shù)% Alpha 信息素重要程度的參數(shù)%Beta 能見度重要程度的參數(shù)%Rho 信息素蒸發(fā)系數(shù) 1-Rho 為協(xié)同因子% Q 信息素增加強度系數(shù)% R_best 每次循環(huán)的最佳路線 NC_Max*n% L_best 每次循環(huán)的最短路徑 NC_Max*1%=% i,j 表示邊 k 表示螞

2、蟻% 第一步 %變量初始化 %n=size(C,1); % n 表示問題的規(guī)模(城市的個數(shù))D=zeros(n,n); %D 表示完全圖的距離的鄰接矩陣for i = 1:nfor j = 1:nif i = jD(i,j)=(C(i,1)-C(j,1)A2+(C(i,2)-C(j,2)F2F0.5;elseD(i,j)=eps;%距離為很小的 0,因為距離不能等于0endD(j,i)=D(i,j); % 對稱矩陣,問題是已經(jīng)知道是對稱了 ,這句還有必要嗎 endendEta=1./D; %Eta 為距離的倒數(shù),能見度% 更改 Eta 是否可行 , 有待測試%Eta = 100./ ( D +

3、 50 - rem(fix(D), 50) ) ;Trace=ones(n,n); %Trace 為信息素矩陣,初始為 1NC=1;R_best=zeros(NC_Max,n); %R_best 為每次循環(huán)的最佳路線 ,初始化為 0L_best = inf.*ones(NC_Max,1); % L_best 為每次循環(huán)的最短路徑,初始化為無窮大Randpos=;%Randpos 存儲螞蟻的位置 m*1for i=1:(ceil(m/n) %ceil 是向上取整Randpos=Randpos,randperm(n);endTabu=zeros(m,n); %Tabu 為存儲每個螞蟻路徑 ,初始為

4、 0 ,同時也是清空禁忌表 Tabu(:,1)=(Randpos(1,1:m)' %初始化禁忌表%第二步將 m 只螞蟻放在 n 個城市上 ,初始化禁忌表 % while(NC<=NC_Max)%第三步 m 只螞蟻按概率函數(shù)選擇下一座城市,完成各 自的周游,進行一次循 環(huán)%循環(huán)結構為,每只螞蟻移動一條邊,共移動n-1 條邊,最后一條邊為回來的一條邊f(xié)or i=2:n%一次循環(huán), m 只螞蟻需進行 n-1 次迭代for k=1:m % 每只螞蟻都需選擇 visited=Tabu(k,1:(i-1); %visited 存儲第 k 只螞蟻已經(jīng)訪問過的城市,避免重復訪 問, visite

5、d 為行向量J=zeros(1,(n-i+1); %J 為待訪問的城市, J 為行向量P=J; %待訪問城市的選擇概率分布,設概率函數(shù)Ps=1;%將待訪問的城市存儲在J( s)for j=1:nif length(find(visited=j)=0 % 開始時置 0J(s)=j;s=s+1;endend%將待訪問的城市存儲在J( s)%下面計算待選城市的概率分布 for j=1:length(J)P(j)=(Trace(visited(e nd),J(j)AAIpha)*(Eta(visited(e nd),J(j)FBeta);endP=P/(sum(P); %sum(P) 是標量,作為除數(shù)

6、,矩陣除和數(shù)組除結果一樣 % 按概率原則選取下一個城市Pcum=cumsum(P); %cumsum,元素累加求和,累加和Select=find(Pcum>=rand);% 這就是所謂的根據(jù)概率隨機選擇to_visit=J(Select(1);Tabu(k,i)=to_visit;%將選擇的城市 to_visit 插入禁忌表endend%對Tabu進行賦值運算后,下一次保留上一次的最好路線,故令Tabu (1,:為最好路線% % % % % % % % % % % % % % % % if NC>=2% % % % % % % % % % % % % % % %Tabu(1,:)=

7、R_best(NC-1,:);% % % % % % % % % % % % % % % % end% 第四步 計算最短路徑和信息素的改變量 %L=zeros(m,1); % 初始距離為 0, m*1 矩陣 %計算每次螞蟻的距離 for k=1:mR=Tabu(k,:);for i=1:(n-1)L(k)=L(k)+D(R(i),R(i+1);endL(k)=L(k)+D(R(n),R(1);endL_best(NC)=min(L); % 第 NC 次循環(huán)的最短路徑% 最佳路線pos=find(L=L_best(NC); % 找出第 pos 只螞蟻R_best(NC,:)=Tabu(pos(1

8、),:);%第 NC 次循環(huán)的最佳路線L_ave(NC)=mean(L);% 平均距離% 信息素的改變量Delta_Trace=zeros(n,n); % 初始信息素改變量為 0for k=1:mfor i=1:(n-1) Delta_Trace(Tabu(k,i),Tabu(k,i+1)=Delta_Trace(Tabu(k,i),Tabu(k,i+1)+Q/L(k);end Delta_Trace(Tabu(k,n),Tabu(k,1)=Delta_Trace(Tabu(k,n),Tabu(k,1)+Q/L(k);end%更新了從1-2,2-3,n -1這n條邊上的信息素%第五步 計算每條

9、邊上的信息素,并每次循環(huán)更新信息素 Trace=(1-Rho)*Trace+Delta_Trace;% 可以更改此處, 但是需要測試 % Trace(find(Trace < 0.00001 ) = 0.00001 ;Trace(find(Trace > 50) = 50 ; % %Tabu(: , 2 : n) = 0 ;% Tabu(1 , :) = R_best(NC, :) ;NC=NC+1;endTrace % 第六步 輸出結果 Pos=find(L_best=min(L_best) ; % 找到最佳路徑 Shortest_Route=R_best(Pos(1),:);S

10、hortest_Length=L_best(Pos(1)save Short_Length.mat Shortest_Lengthsubplot(1,2,1) % 繪制第一個子圖形 % DrawRoute(C,Shortest_Route) %畫路線圖的子函數(shù)%subplot(1,2,2)plot(L_best)hold onplot(L_ave,'r')title(' 迭代中平均距離和最短距離 ')function DrawRoute(C,Shortest_Route)% %DrawRoute.m% % 畫路線圖的子函數(shù)% % C 節(jié)點坐標, N*2 矩陣% % R 路線%N=length(Shortest_Route);scatter(C(:,1),C(:,2);%描繪散點圖,以C(:,1)為橫坐標,以 C(:,2)為縱坐標hold onplot(C(Shortest_Route(1),1),C(Shortest_Route(N),1),C(Shortest_Route(1),2),C(Shortest_Route (N),2),'g')ho

溫馨提示

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

評論

0/150

提交評論