《城市间蚁群算法matlab实现.pdf》由会员分享,可在线阅读,更多相关《城市间蚁群算法matlab实现.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、城市间蚁群算法 matlab 实现%I.清空环境变量 clear all clc%II.导入数据 31 个城市的坐标 load citys_data.mat%III.计算城市间相互距离 n=size(citys,1);D=zeros(n,n);for i=1:n for j=1:n if i=j D(i,j)=sqrt(sum(citys(i,:)-citys(j,:).2);else D(i,j)=1e-4;%用很小的值代替 0 公式需要 end end end%IV.初始化参数 m=50;%蚂蚁数量 alpha=1;%信息素重要程度因子 beta=5;%启发函数重要程度因子 rho=0.1
2、;%信息素挥发因子 Q=1;%常系数 Eta=1./D;%启发函数 Tau=ones(n,n);%信息素矩阵 Table=zeros(m,n);%路径记录表 m 个蚂蚁走过的路径 iter=1;%迭代次数初值 iter_max=200;%最大迭代次数 Route_best=zeros(iter_max,n);%各代最佳路径 Length_best=zeros(iter_max,1);%各代最佳路径的长度 Length_ave=zeros(iter_max,1);%各代路径的平均长度%V.迭代寻找最佳路径 while iter=rand);target=allow(target_index(1)
3、;Table(i,j)=target;%记录下来,添加新访问的城市 end end%计算各个蚂蚁的路径距离 Length=zeros(m,1);for i=1:m Route=Table(i,:);%每个蚂蚁的路径取出来 for j=1:(n-1)Length(i)=Length(i)+D(Route(j),Route(j+1);end Length(i)=Length(i)+D(Route(n),Route(1);end%计算最短路径距离及平均距离 if iter=1 min_Length,min_index=min(Length);Length_best(iter)=min_Length;
4、Length_ave(iter)=mean(Length);Route_best(iter,:)=Table(min_index,:);else min_Length,min_index=min(Length);Length_best(iter)=min(Length_best(iter-1),min_Length);Length_ave(iter)=mean(Length);if Length_best(iter)=min_Length Route_best(iter,:)=Table(min_index,:);else Route_best(iter,:)=Route_best(iter-
5、1),:);end end%更新信息素 Delta_Tau=zeros(n,n);%逐个蚂蚁计算 for i=1:m%逐个城市计算 for j=1:(n-1)Delta_Tau(Table(i,j),Table(i,j+1)=Delta_Tau(Table(i,j),Table(i,j+1)+Q/Length(i);end Delta_Tau(Table(i,n),Table(i,1)=Delta_Tau(Table(i,n),Table(i,1)+Q/Length(i);end Tau=(1-rho)*Tau+Delta_Tau;%迭代次数加 1,清空路径记录表 iter=iter+1;Ta
6、ble=zeros(m,n);end%VI.结果显示 Shortest_Length,index=min(Length_best);Shortest_Route=Route_best(index,:);disp(最短距离:num2str(Shortest_Length);disp(最短路径:num2str(Shortest_Route Shortest_Route(1);%VII.绘图 1960009019 l13299109228 figure(1)plot(citys(Shortest_Route,1);citys(Shortest_Route(1),1),.citys(Shortest_
7、Route,2);citys(Shortest_Route(1),2),o-);grid on for i=1:size(citys,1)text(citys(i,1),citys(i,2),num2str(i);end text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),起点);text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),终点);xlabel(城市位置横坐标)ylabel(城市位置纵坐标)title(蚁群算法优化路径(最短距离:num2str(Shortest_Length)figure(2)plot(1:iter_max,Length_best,b,1:iter_max,Length_ave,r:)legend(最短距离,平均距离)xlabel(迭代次数)ylabel(距离)title(各代最短距离与平均距离对比)