蚁群算法路径优化算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中,表示在t时刻蚂蚁k由元素(城市)i转移到元素(城市)j的状态转移概率。allowedk = C − tabuk表示蚂蚁k下一步允许选择的城市。α为启发式因子,表示轨迹的相对重要性,反映了蚂蚁在运动过程中所积累的信息在蚂蚁运动时所起的作用,其值越大,则该蚂蚁越倾向于选择其他蚂蚁经过的路径,蚂蚁之间的协作性越强。β为期望启发式因子,表示能见度的相对重要性,反映了蚂蚁在运动过程中启发信息在蚂蚁选择路径中的受重视程度,其值越
大,则该状态转移概率越接近于贪心规则;ηij(t) 为启发函数,表达式为。式中,dij表示相邻两个城市之间的距离。(6)修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素(城市),并把该元素(城市)移动到该蚂蚁个体的禁忌表中。(7)若集合C中元素(城市)未遍历完,即k 更新每条路径上的信息量:τij(t + n) = (1 − ρ) * τij(t) + Δτij(t), (9)若满足结束条件,即如果循环次数,则循环结束并输出程序计算结果,否则清空禁忌表并跳转到第(2)步。 蚁群算法的matlab源程序 1.蚁群算法主程序:main.m %function [bestroute,routelength]=Ant Clc clear tic % 读入城市间距离矩阵数据文件 CooCity = load( 'CooCity.txt' ) ;% 城市网络图坐标数据文件,txt形式给出NC=length(CooCity); % 城市个数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((CooCity(i,2)-CooCity(j,2))^2+(CooCity(i,3)-CooCity(j,3))^2); end end MAXIT=10;%最大循环次数 Citystart=[]; % 起点城市编号 tau=ones(NC,NC); % 初始时刻各边上的信息痕迹为1 rho=0.5; % 挥发系数 alpha=1; % 残留信息相对重要度 beta=5; % 预见值的相对重要度 Q=10; % 蚁环常数 NumAnt=20; % 蚂蚁数量 routelength=inf; % 用来记录当前找到的最优路径长度 for n=1:MAXIT for k=1:NumAnt %考查第K只蚂蚁 deltatau=zeros(NC,NC); % 第K只蚂蚁移动前各边上的信息增量为零 %[routek,lengthk]=path(distance,tau,alpha,beta,[]); % 不靠率起始点[routek,lengthk]=path(distance,tau,alpha,beta,Citystart); % 指定起始点if lengthk :::routelength=lengthk; :::bestroute=routek; end for i=1:NC-1 % 第K只蚂蚁在路径上释放的信息量 deltatau(routek(i),routek(i+1))=deltatau(routek(i),routek(i+1))+Q/lengthk; % 信息素更新 end %deltatau(routek(NC),1)=deltatau(routek(NC),1)+Q/lengthk; % end length_n(n)=routelength; % 记录路径收敛 tau=(1-rho).*tau; % 信息素挥发 end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% costtime=toc; subplot(1,2,1),plot([CooCity(bestroute,2)],[CooCity(bestroute,3)],'-*') subplot(1,2,2),plot([1:MAXIT],length_n,'-*') [routelength,costtime] 2.蚁群算法寻找路径程序:path.m % 某只蚂蚁找到的某条路径routek,lengthk function [routek,lengthk]=path(distance,tau,alpha,beta,Citystart) [m,n]=size(distance); if isempty(Citystart) % 如果不确定起点 p=fix(m*rand)+1; % 随机方式初始化起点,均匀概率 else p=Citystart; % 外部给定确定起点 end lengthk=0; % 初始路径长度设为 0 routek=[p]; % 蚂蚁路径点序列,即该蚂蚁已经过的城市集合,路径初始起点for i=1:m-1 np=routek(end); % 蚂蚁路径城市序号,依次经过的城市编号 np_sum=0; % 路由长度初始为 0 for j=1:m if inroute(j,routek) % 判断城市节点j是否属于tabuk,即是否已经过 continue; else % j为还未经过的点 ada=1/distance(np,j); % 预见度 np_sum=np_sum+tau(np,j)^alpha*ada^beta; % 路由表:信息痕迹、预见度 end end cp=zeros(1,m); % 转移概率,基于路径长度及路由表 for j=1:m ifinroute(j,routek) continue; else ada=1/distance(np,j); % 预见度 cp(j)=tau(np,j)^alpha*ada^beta/np_sum; % np到j的转移概率end end NextCity=nextcitychoose2(cp); % 根据转移概率确定下一个城市, % 直观地,取转移概率最大值方向方法,决策结果稳定且收敛快 routek=[routek,NextCity]; % 更新路径 lengthk=lengthk+distance(np,NextCity); % 更新路径长度 end 蚁群算法仿真结果: 其中左边是蚂蚁行走的最短路径,右边是最短路径的值的收敛情况。