《蚁群算法MATLAB代码》由会员分享,可在线阅读,更多相关《蚁群算法MATLAB代码(2页珍藏版)》请在金锄头文库上搜索。
1、function y,val=QACSticload att48 att48;MAXIT=300;% 最大循环次数NC=48;% 城市个数tao=ones(48,48);% 初始时刻各边上的信息最为 1 rho=0.2; % 挥发系数alpha=1;beta=2;Q=100;mant=20; % 蚂蚁数量iter=0;% 记录迭代次数for i=1:NC% 计算各城市间的距离for j=1:NCdista nce(i,j)=sqrt(att48(i,2)-att48(j,2)A2+(att48(i,3)-att48(j,3)A2); endend bestroute=zeros(1,48);
2、% 用来记录最优路径routelength=inf;% 用来记录当前找到的最优路径长度% for i=1:mant% 确定各蚂蚁初始的位置% endfor ite=1:MAXITfor ka=1:mant%考查第 K 只蚂蚁deltatao=zeros(48,48); % 第 K 只蚂蚁移动前各边上的信息增量为零routek,lengthk=travel(distance,tao,alpha,beta);if lengthkroutelength % 找到一条更好的路径routelength=lengthk;bestroute=routek;endfor i=1:NC-1% 第 K 只蚂蚁在路
3、径上释放的信息量deltatao(routek(i),routek(i+1)=deltatao(routek(i),routek(i+1)+Q/lengthk;end deltatao(routek(48),1)=deltatao(routek(48),1)+Q/lengthk;endfor i=1:NC-1for j=i+1:NCif deltatao(i,j)=0 deltatao(i,j)=deltatao(j,i);endendendtao=(1-rho).*tao+deltatao; end y=bestroute; val=routelength;toc function y,va
4、l=travel(distance,tao,alpha,beta) % 某只蚂蚁找到的某条路径 m,n=size(distance);p=fix(m*rand)+1;val=0; % 初始路径长度设为 0 tabuk=p; % 假设该蚂蚁都是从第 p 个城市出发的 for i=1:m-1np=tabuk(length(tabuk); % 蚂蚁当前所在的城市号 p_sum=0;for j=1:mif isin(j,tabuk) continue;elseada=1/distance(np,j);p_sum=p_sum+tao (n p,j)Aalpha*adaAbeta;endendcp=zer
5、os(1,m); % 转移概率for j=1:mif isin(j,tabuk) continue;elseada=1/distance(np,j); cp(j)=tao(np,j)Aalpha*adaAbeta/p_sum;endendNextCity=pchoice(cp); tabuk=tabuk,NextCity; val=val+distance(np,NextCity);endy=tabuk;function y=isin(x,A) % 判断数 x 是否在向量 A 中,如在返回 1 ,否则返回 0 y=0;for i=1:length(A)if A(i)=xy=1;break;end end function y=pchoice(A)a=rand; tempA=zeros(1,length(A)+1);for i=1:length(A)tempA(i+1)=tempA(i)+A(i);endfor i=2:length(tempA)if a=tempA(i)y=i-1; break;endend