天天看點

蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題

本帖最後由 小蝸 于 2016-4-9 10:09 編輯

鄙人初學蟻群算法,運作時遇到了問題。參數我輸入的是:m=30;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;C是一個24X2的矩陣,工作區如圖。但是無法運作,顯示參數不足。跪求大神指教!急!線上等!

程式如下:

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=UntitledYQSF5(C,NC_max,m,Alpha,Beta,Rho,Q)

%%-------------------------------------------------------------------------

%% 主要符号說明

%% C n個城市的坐标,n×2的矩陣

%% NC_max 最大疊代次數

%% m 螞蟻個數

%% Alpha 表征資訊素重要程度的參數

%% Beta 表征啟發式因子重要程度的參數

%% Rho 資訊素蒸發系數

%% Q 資訊素增加強度系數

%% R_best 各代最佳路線

%% L_best 各代最佳路線的長度

%%=========================================================================

%%第一步:變量初始化

n=size(C,1);%n表示問題的規模(城市個數)

%%size(A,n)如果在size函數的輸入參數中再添加一項n,并用1或2為n指派,則 size将傳回矩陣的行數或列數。其中r=size(A,1)該語句傳回的時矩陣A的行數, c=size(A,2) 該語句傳回的時矩陣A的列數。

D=zeros(n,n);%D表示完全圖的賦權鄰接矩陣

for i=1:n

for j=1:n

if i~=j

D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;

else

D(i,j)=eps;      %i=j時不計算,應該為0,但後面的啟發因子要取倒數,用eps(浮點相對精度)表示

end

D(j,i)=D(i,j);   %對稱矩陣

end

end

Eta=1./D;          %Eta為啟發因子,這裡設為距離的倒數

Tau=ones(n,n);     %Tau為資訊素矩陣

Tabu=zeros(m,n);   %存儲并記錄路徑的生成

NC=1;               %疊代計數器,記錄疊代次數

R_best=zeros(NC_max,n);       %各代最佳路線

L_best=inf.*ones(NC_max,1);   %各代最佳路線的長度

L_ave=zeros(NC_max,1);        %各代路線的平均長度

while NC<=NC_max        %停止條件之一:達到最大疊代次數,停止

%%第二步:将m隻螞蟻放到n個城市上

Randpos=[];   %随即存取

for i=1:(ceil(m/n))  %ceil函數是取比它大的最小整數  假如5隻螞蟻4座城市 需要循環2次

Randpos=[Randpos,randperm(n)];%随疊代次數改變?

end

Tabu(:,1)=(Randpos(1,1:m))';    %%表示将m個螞蟻随機,每個螞蟻放到前面産生的城市序列中,每個螞蟻一個城市,需要m個,是以提取前面1:m個序列

%%第三步:m隻螞蟻按機率函數選擇下一座城市,完成各自的周遊

for j=2:n     %所在城市不計算

for i=1:m

visited=Tabu(i,1:(j-1)); %記錄已通路的城市,避免重複通路

J=zeros(1,(n-j+1));       %待通路的城市

P=J;                      %待通路城市的選擇機率分布

Jc=1;

for k=1:n

if isempty(find(visited==k, 1))   %開始時置0

J(Jc)=k;

Jc=Jc+1;                         %通路的城市個數自加1

end

end

%下面計算待選城市的機率分布

for k=1:length(J)

P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);

end

P=P/(sum(P));

%按機率原則選取下一個城市

Pcum=cumsum(P);     %cumsum,元素累加即求和

Select=find(Pcum>=rand); %若計算的機率大于原來的就選擇這條路線

to_visit=J(Select(1));

Tabu(i,j)=to_visit;

end

end

if NC>=2

Tabu(1,:)=R_best(NC-1,:);

end

%%第四步:記錄本次疊代最佳路線

L=zeros(m,1);     %開始距離為0,m*1的列向量

for i=1:m

R=Tabu(i,:);

for j=1:(n-1)

L(i)=L(i)+D(R(j),R(j+1));    %原距離加上第j個城市到第j+1個城市的距離

end

L(i)=L(i)+D(R(1),R(n));      %一輪下來後走過的距離

end

L_best(NC)=min(L);           %最佳距離取最小

pos=find(L==L_best(NC));

R_best(NC,:)=Tabu(pos(1),:); %此輪疊代後的最佳路線

L_ave(NC)=mean(L);           %此輪疊代後的平均距離

NC=NC+1;                      %疊代繼續

%%第五步:更新資訊素

Delta_Tau=zeros(n,n);        %開始時資訊素為n*n的0矩陣

for i=1:m

for j=1:(n-1)

Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);

%此次循環在路徑(i,j)上的資訊素增量

end

Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);

%此次循環在整個路徑上的資訊素增量

end

Tau=(1-Rho).*Tau+Delta_Tau; %考慮資訊素揮發,更新後的資訊素

%%第六步:禁忌表清零

Tabu=zeros(m,n);             %%直到最大疊代次數

end

%%第七步:輸出結果

Pos=find(L_best==min(L_best)); %找到最佳路徑(非0為真)

Shortest_Route=R_best(Pos(1),:); %最大疊代次數後最佳路徑

Shortest_Length=L_best(Pos(1)); %最大疊代次數後最短距離

subplot(1,2,1)                  %繪制第一個子圖形

DrawRoute(C,Shortest_Route)     %畫路線圖的子函數

subplot(1,2,2)                  %繪制第二個子圖形

plot(L_best)

hold on                         %保持圖形

plot(L_ave,'r')

title('平均距離和最短距離')     %标題

function DrawRoute(C,R)

%%=========================================================================

%% DrawRoute.m

%% 畫路線圖的子函數

%%-------------------------------------------------------------------------

%% C Coordinate 節點坐标,由一個N×2的矩陣存儲

%% R Route 路線

%%=========================================================================

N=length(R);

scatter(C(:,1),C(:,2));

hold on

plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')

hold on

for ii=2:N

plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')

hold on

end

title('GIS配送優化結果 ')

工作區.png

(10.37 KB, 下載下傳次數: 0)

2016-4-9 10:05 上傳

蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題
蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題

工作區截屏

蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題

2.png

(74.89 KB, 下載下傳次數: 0)

2016-4-9 10:05 上傳

蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題
蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題

編輯器和指令視窗截屏

蟻群算法matlab參數,蟻群算法 求大神指教 關于蟻群算法參數問題