資源簡介
旅行商問題(Traveling Saleman Problem,TSP)是車輛路徑調度問題(VRP)的特例,由于數學家已證明TSP問題是NP難題,因此,VRP也屬于NP難題。旅行商問題(TSP)又譯為旅行推銷員問題、貨郎擔問題,簡稱為TSP問題,是最基本的路線問題,該問題是在尋求單一旅行者由起點出發,通過所有給定的需求點之后,最后再回到原點的最小路徑成本。
代碼片段和文件信息
function?[R_bestL_bestL_aveShortest_RouteShortest_Length]=ACATSP(CNC_maxmAlphaBetaRhoQ)
%%第一步:變量初始化
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
????if?NC>=2
- 上一篇:TSP多種群蟻群算法
- 下一篇:材料力學中的撓曲線繪圖MATLAB程序
評論
共有 條評論