蚁群算法matlab程序实例整理.doc
function y,valQACS tic load att48 att48; MAXIT300; 最大循环次数 NC48; 城市个数 taoones48,48; 初始时刻各边上的信息最为1 rho0.2; 挥发系数 alpha1; beta2; Q100; mant20; 蚂蚁数量 iter0; 记录迭代次数 for i1NC 计算各城市间的距离 for j1NC distancei,jsqrtatt48i,2-att48j,22att48i,3-att48j,32; end end bestroutezeros1,48; 用来记录最优路径 routelengthinf; 用来记录当前找到的最优路径长度 for i1mant 确定各蚂蚁初始的位置 end for ite1MAXIT for ka1mant 考查第K只蚂蚁 deltataozeros48,48; 第K只蚂蚁移动前各边上的信息增量为零 routek,lengthktraveldistance,tao,alpha,beta; if lengthkroutelength 找到一条更好的路径 routelengthlengthk; bestrouteroutek; end for i1NC-1 第K只蚂蚁在路径上释放的信息量 deltataorouteki,routeki1deltataorouteki,routeki1Q/lengthk; end deltataoroutek48,1deltataoroutek48,1Q/lengthk; end for i1NC-1 for ji1NC if deltataoi,j0 deltataoi,jdeltataoj,i; ybestroute;end valroutelength;end toc end tao1-rho.*taodeltatao; end ybestroute; valroutelength; toc function y,valtraveldistance,tao,alpha,beta 某只蚂蚁找到的某条路径 m,nsizedistance; pfixm*rand1; fix取整函数val0; 初始路径长度设为 0 tabukp; 假设该蚂蚁都是从第 p 个城市出发的 for i1m-1 nptabuklengthtabuk; 蚂蚁当前所在的城市号 p_sum0; for j1m if isinj,tabuk continue; else ada1/distancenp,j; p_sump_sumtaonp,jalpha*adabeta; end end cpzeros1,m; 转移概率 for j1m if isinj,tabuk continue; else ada1/distancenp,j; cpjtaonp,jalpha*adabeta/p_sum; end end NextCitypchoicecp; tabuktabuk,NextCity; valvaldistancenp,NextCity; end ytabuk; function yisinx,A 判断数 x 是否在向量 A 中,如在返回 1 ,否则返回 0 y0; for i1lengthA if Aix y1; break; end end function ypchoiceA arand; tempAzeros1,lengthA1; for i1lengthA tempAi1tempAiAi; end for i2lengthtempA if atempAi yi-1; break; end end