文档介绍:蚁群算法解决TSP问题
信管专业李鹏201101002044
一、 蚁群算法
蚁群算法是一种用来在图中寻找优化路径的几率型算法,各个蚂蚁在没有事先告 诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环 境释放一种挥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(l,:)=R_best (NCT,:);
end
第四步:记录本次迭代最佳路线
L=zeros (m, 1) ; %开始距离为0, m*l的列向量
for i=l:m R=Tabu(i,:);
for j=l:(n-1)
L(i)二 L(i) +D(R(j),R(j+l));
end
L(i)=L(i)+D(R(l),R(n));
end
L_best(NC)=min(L);
pos=f ind(L==L_best(NC));
%原距离加上第j个城市到第j+1个城市的距离
%一轮下来后走过的距离
%最佳距离取最小
%此轮迭代后的平均距离
%迭代继续
R_best (NC, :)=Tabu(pos(l), :) ; %此轮迭代后的最佳路线 Lave(NC)=mean(L);
NC=NC+1
第五步:更新信息素
%开始时信息素为n*n的0矩阵
Delta_Tau=zeros(n, n);
for i=l:m
for j=l: (n-1)
Delta Tau (Tabu (i, j), Tabu (i, j+1)) =Delta_Tau (Tabu (i, j), Tabu (i, j+1)) +Q/L
⑴;
%此次循环在路径(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 ('平均距离和最短距离')
func