中易网

混合遗传蚁群算法怎么设计博客

答案:2  悬赏:70  
解决时间 2021-11-08 23:30
  • 提问者网友:樱花树下最美的约定
  • 2021-11-08 12:45
混合遗传蚁群算法怎么设计博客
最佳答案
  • 二级知识专家网友:偏爱自由
  • 2021-11-08 13:13
混合遗传蚁群算法设计绝对给力嘚,原创!
全部回答
  • 1楼网友:我们只是兮以城空
  • 2021-11-08 14:46
建立m文件 function[r_best,l_best,l_ave,shortest_route,shortest_length]=acatsp(c,nc_max,m,alpha,beta,rho,q) %%------------------------------------------------------------------------- %%主要符号说明 %%cn个城市的坐标,n×2的矩阵 %%nc_max最大迭代次数 %%m蚂蚁个数 %%alpha表征信息素重要程度的参数 %%beta表征启发式因子重要程度的参数 %%rho信息素蒸发系数 %%q信息素增加强度系数 %%r_best各代最佳路线 %%l_best各代最佳路线的长度 %%========================================================================= %%第一步:变量初始化 n=size(c,1);%n表示问题的规模(城市个数) d=zeros(n,n);%d表示完全图的赋权邻接矩阵 fori=1:n forj=1:n ifi~=j d(i,j)=((c(i,1)-c(j,1))^2+(c(i,2)-c(j,2))^2)^0.5; else d(i,j)=eps;%i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end d(j,i)=d(i,j);%对称矩阵 end end eta=1./d;%eta为启发因子,这里设为距离的倒数 tau=ones(n,n);%tau为信息素矩阵 tabu=zeros(m,n);%存储并记录路径的生成 nc=1;%迭代计数器,记录迭代次数 r_best=zeros(nc_max,n);%各代最佳路线 l_best=inf.*ones(nc_max,1);%各代最佳路线的长度 l_ave=zeros(nc_max,1);%各代路线的平均长度 whilenc<=nc_max%停止条件之一:达到最大迭代次数,停止 %%第二步:将m只蚂蚁放到n个城市上 randpos=[];%随即存取 fori=1:(ceil(m/n)) randpos=[randpos,randperm(n)]; end tabu(:,1)=(randpos(1,1:m))';%此句不太理解? %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游 forj=2:n%所在城市不计算 fori=1:m visited=tabu(i,1:(j-1));%记录已访问的城市,避免重复访问 j=zeros(1,(n-j+1));%待访问的城市 p=j;%待访问城市的选择概率分布 jc=1; fork=1:n iflength(find(visited==k))==0%开始时置0 j(jc)=k; jc=jc+1;%访问的城市个数自加1 end end %下面计算待选城市的概率分布 fork=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);%cumsum,元素累加即求和 select=find(pcum>=rand);%若计算的概率大于原来的就选择这条路线 to_visit=j(select(1)); tabu(i,j)=to_visit; end end ifnc>=2 tabu(1,:)=r_best(nc-1,:); end %%第四步:记录本次迭代最佳路线 l=zeros(m,1);%开始距离为0,m*1的列向量 fori=1:m r=tabu(i,:); forj=1:(n-1) l(i)=l(i)+d(r(j),r(j+1));%原距离加上第j个城市到第j+1个城市的距离 end l(i)=l(i)+d(r(1),r(n));%一轮下来后走过的距离 end l_best(nc)=min(l);%最佳距离取最小 pos=find(l==l_best(nc)); r_best(nc,:)=tabu(pos(1),:);%此轮迭代后的最佳路线 l_ave(nc)=mean(l);%此轮迭代后的平均距离 nc=nc+1%迭代继续 %%第五步:更新信息素 delta_tau=zeros(n,n);%开始时信息素为n*n的0矩阵 fori=1:m forj=1:(n-1) delta_tau(tabu(i,j),tabu(i,j+1))=delta_tau(tabu(i,j),tabu(i,j+1))+q/l(i); %此次循环在路径(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) holdon%保持图形 plot(l_ave,'r') title('平均距离和最短距离')%标题 functiondrawroute(c,r) %%========================================================================= %%drawroute.m %%画路线图的子函数 %%------------------------------------------------------------------------- %%ccoordinate节点坐标,由一个n×2的矩阵存储 %%rroute路线 %%========================================================================= n=length(r); scatter(c(:,1),c(:,2)); holdon plot([c(r(1),1),c(r(n),1)],[c(r(1),2),c(r(n),2)],'g') holdon forii=2:n plot([c(r(ii-1),1),c(r(ii),1)],[c(r(ii-1),2),c(r(ii),2)],'g') holdon end title('旅行商问题优化结果') 建m文件 functiondrawroute(c,r) %%========================================================================= %%drawroute.m %%画路线图的子函数 %%------------------------------------------------------------------------- %%ccoordinate节点坐标,由一个n×2的矩阵存储 %%rroute路线 %%========================================================================= n=length(r); scatter(c(:,1),c(:,2));%画散点图 holdon plot([c(r(1),1),c(r(n),1)],[c(r(1),2),c(r(n),2)],'g') holdon forii=2:n plot([c(r(ii-1),1),c(r(ii),1)],[c(r(ii-1),2),c(r(ii),2)],'g') holdon end title('tsp问题优化结果') 命令窗口运行 c=[13042312 36391315 41772244 37121399 34881535 33261556 32381229 41961004 4312790 4386570 30071970 25621756 27881491 23811676 1332695 37151678 39182179 40612370 37802212 36762578 40292838 42632931 34291908 35072367 33942643 34393201 29353240 31403550 25452357 27782826 23702975 ]; m=31;alpha=1;beta=5;rho=0.1;nc_max=200;q=100; [r_best,l_best,l_ave,shortest_route,shortest_length]=acatsp(c,nc_max,m,alpha,beta,rho,q)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息