資源簡介
多旅行商問題代碼,是MATLAB編程得到的,對處理這類問題很有幫助
代碼片段和文件信息
[code]function?[R_bestL_bestL_aveShortest_RouteShortest_Length]=ACATSP(CNC_maxmAlphaBetaRhoQ)
%%=========================================================================?
%%?ACATSP.m?
%%?Ant?Colony?Algorithm?for?Traveling?Salesman?Problem?
%%?ChengAihuaPLA?Information?Engineering?UniversityZhengZhouChina?
%%?Email:aihuacheng@gmail.com?
%%?All?rights?reserved?
%%-------------------------------------------------------------------------?
%%?主要符號說明?
%%?C?n個城市的坐標,n×2的矩陣?
%%?NC_max?最大迭代次數?
%%?m?螞蟻個數?
%%?Alpha?表征信息素重要程度的參數?
%%?Beta?表征啟發式因子重要程度的參數?
%%?Rho?信息素蒸發系數?
%%?Q?信息素增加強度系數?
%%?R_best?各代最佳路線?
%%?L_best?各代最佳路線的長度?
%%=========================================================================
%%第一步:變量初始化?
n=size(C1);%n表示問題的規模(城市個數)?
D=zeros(nn);%D表示完全圖的賦權鄰接矩陣?
for?i=1:n?
for?j=1:n?
if?i~=j?
D(ij)=((C(i1)-C(j1))^2+(C(i2)-C(j2))^2)^0.5;?
else?
D(ij)=eps;?
end?
D(ji)=D(ij);?
end?
end?
Eta=1./D;%Eta為啟發因子,這里設為距離的倒數?
Tau=ones(nn);%Tau為信息素矩陣?
Tabu=zeros(mn);%存儲并記錄路徑的生成?
NC=1;%迭代計數器?
R_best=zeros(NC_maxn);%各代最佳路線?
L_best=inf.*ones(NC_max1);%各代最佳路線的長度?
L_ave=zeros(NC_max1);%各代路線的平均長度
while?NC<=NC_max%停止條件之一:達到最大迭代次數?
%%第二步:將m只螞蟻放到n個城市上?
Randpos=[];?
for?i=1:(ceil(m/n))?
Randpos=[Randposrandperm(n)];?
end?
Tabu(:1)=(Randpos(11:m))‘;
%%第三步:m只螞蟻按概率函數選擇下一座城市,完成各自的周游?
for?j=2:n?
for?i=1:m?
visited=Tabu(i1:(j-1));%已訪問的城市?
J=zeros(1(n-j+1));%待訪問的城市?
P=J;%待訪問城市的選擇概率分布?
Jc=1;?
for?k=1:n?
if?length(find(visited==k))==0?
J(Jc)=k;?
Jc=Jc+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);?
Select=find(Pcum>=rand);?
to_visit=J(Select(1));?
Tabu(ij)=to_visit;?
end?
end?
- 上一篇:black scholes方程式源代碼
- 下一篇:GUI設計MATLAB
評論
共有 條評論