




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基本蚁群算法 matlab 实现function R_best,L_best,L_ave,Shortest_Route,Shortest_Length = AC( C, NC_Max,m,Alpha,Beta,Rho,Q)%主要符号说明%C n个城市的坐标,n*2矩阵 %NC_Max 最大循环次数% %m 蚂蚁个数 % Alpha 信息素重要程度的参数%Beta 能见度重要程度的参数%Rho 信息素蒸发系数 1-Rho为协同因子% Q 信息素增加强度系数% R_best 每次循环的最佳路线 NC_Max*n% L_best 每次循环的最短路径 NC_Max*1%=% i,j 表示边 k表示蚂蚁
2、%第一步%变量初始化%n=size(C,1); % n表示问题的规模(城市的个数)D=zeros(n,n); %D表示完全图的距离的邻接矩阵for i = 1:n for j = 1:n if i = 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; %距离为很小的0,因为距离不能等于0 end D(j,i)=D(i,j); %对称矩阵,问题是已经知道是对称了 ,这句还有必要吗 endendEta=1./D; %Eta为距离的倒数,能见度% 更改Eta 是否可行, 有待测试%Eta = 100./ ( D + 50 -
3、 rem(fix(D), 50) ) ; Trace=ones(n,n); %Trace为信息素矩阵,初始为1NC=1; R_best=zeros(NC_Max,n); %R_best为每次循环的最佳路线,初始化为0L_best = inf.*ones(NC_Max,1); % L_best为每次循环的最短路径,初始化为无穷大Randpos=; %Randpos存储蚂蚁的位置 m*1for i=1:(ceil(m/n) %ceil是向上取整 Randpos=Randpos,randperm(n);endTabu=zeros(m,n); %Tabu为存储每个蚂蚁路径,初始为0 ,同时也是清空禁忌
4、表Tabu(:,1)=(Randpos(1,1:m)' %初始化禁忌表%第二步将m只蚂蚁放在n个城市上,初始化禁忌表% while(NC<=NC_Max)%第三步m只蚂蚁按概率函数选择下一座城市,完成各自的周游,进行一次循环%循环结构为,每只蚂蚁移动一条边,共移动n-1条边,最后一条边为回来的一条边for i=2:n %一次循环,m只蚂蚁需进行n-1次迭代 for k=1:m %每只蚂蚁都需选择 visited=Tabu(k,1:(i-1); %visited存储第k只蚂蚁已经访问过的城市,避免重复访问,visited为行向量 J=zeros(1,(n-i+1); %J 为待访问
5、的城市,J为行向量 P=J; %待访问城市的选择概率分布,设概率函数P s=1; %将待访问的城市存储在J(s) for j=1:n if length(find(visited=j)=0 %开始时置0 J(s)=j; s=s+1; end end %将待访问的城市存储在J(s) %下面计算待选城市的概率分布 for j=1:length(J) P(j)=(Trace(visited(end),J(j)Alpha)*(Eta(visited(end),J(j)Beta); end P=P/(sum(P); %sum(P)是标量,作为除数,矩阵除和数组除结果一样 % 按概率原则选取下一个城市 P
6、cum=cumsum(P); %cumsum,元素累加求和,累加和 Select=find(Pcum>=rand); %这就是所谓的根据概率随机选择 to_visit=J(Select(1); Tabu(k,i)=to_visit; %将选择的城市to_visit插入禁忌表 endend%对Tabu进行赋值运算后,下一次保留上一次的最好路线,故令Tabu(1,:)为最好路线% % % % % % % % % % % % % % % % if NC>=2% % % % % % % % % % % % % % % % Tabu(1,:)=R_best(NC-1,:);% % % % %
7、 % % % % % % % % % % % end%第四步 计算最短路径和信息素的改变量%L=zeros(m,1); %初始距离为0,m*1矩阵%计算每次蚂蚁的距离for k=1:m R=Tabu(k,:); for i=1:(n-1) L(k)=L(k)+D(R(i),R(i+1); end L(k)=L(k)+D(R(n),R(1);endL_best(NC)=min(L); %第NC次循环的最短路径%最佳路线pos=find(L=L_best(NC); %找出第pos只蚂蚁R_best(NC,:)=Tabu(pos(1),:); %第NC次循环的最佳路线L_ave(NC)=mean(L
8、); %平均距离 %信息素的改变量 Delta_Trace=zeros(n,n); %初始信息素改变量为0 for k=1:m for i=1:(n-1) Delta_Trace(Tabu(k,i),Tabu(k,i+1)=Delta_Trace(Tabu(k,i),Tabu(k,i+1)+Q/L(k); end Delta_Trace(Tabu(k,n),Tabu(k,1)=Delta_Trace(Tabu(k,n),Tabu(k,1)+Q/L(k); end %更新了从1-2,2-3,n-1这n条边上的信息素 %第五步 计算每条边上的信息素,并每次循环更新信息素 Trace=(1-Rho)
9、*Trace+Delta_Trace; %可以更改此处, 但是需要测试% Trace(find(Trace < 0.00001 ) = 0.00001 ; Trace(find(Trace > 50) = 50 ; % Tabu(: , 2 : n) = 0 ; % Tabu(1 , :) = R_best(NC, :) ; NC=NC+1; end Trace %第六步 输出结果Pos=find(L_best=min(L_best) ; %找到最佳路径Shortest_Route=R_best(Pos(1),:);Shortest_Length=L_best(Pos(1)save
10、 Short_Length.mat Shortest_Lengthsubplot(1,2,1) %绘制第一个子图形%DrawRoute(C,Shortest_Route) %画路线图的子函数%subplot(1,2,2)plot(L_best)hold onplot(L_ave,'r')title('迭代中平均距离和最短距离') function DrawRoute(C,Shortest_Route)% %DrawRoute.m% % %画路线图的子函数% % C 节点坐标,N*2矩阵% % R 路线% N=length(Shortest_Route);scatter(C(:,1),C(:,2); %描绘散点图 ,以C(:,1)为横坐标,以C(:,2)为纵坐标hold onplot(C(Shortest_Route(1),1),C(Shortest_Route(N),1),C(Shortest_Route(1),2),C(Shortest_Route(N),2),'g')ho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年知识产权法相关考试试卷及答案解析
- 2025年高级经济师考试试题及答案
- 股权价值评估与调整及投资并购决策支持、股权激励实施、企业战略调整、风险控制、并购重组及股权融资合作协议
- 美团外卖特色餐饮店装修设计及外卖配送合作合同
- 高效生物技术研发平台共建及资源共享合作协议
- 职业技能培训学校品牌加盟与师资输出服务标准合作协议
- 电子产品保险托运补充协议
- 保险托运补充协议(食品饮料)
- 环境监测测绘公司股权合作协议书
- 网红饮品店品牌区域代理与物料供应及品牌培训服务协议
- 神经系统常见病损的康复课件
- 建设工程施工现场安全管理内业标准
- 建筑装饰材料玻璃课件
- 电力系统规划(输电网规划)课件
- 呼吸机发生故障应急预案
- 芒果精美模板课件
- (精选word)3v3篮球比赛记录表
- 学术型硕士学位(毕业)论文评阅意见书
- 急诊心电图课件
- 心脏超声切面示意
- 保护个人隐私版课件
评论
0/150
提交评论