1 简介
路径规划技术是目前众多应用技术领域的研究热点,具有重要的科研价值和广阔的应用前景。路径规划技术的核心内容就是规划算法。目前求解路径规划问题的方法主要有A*算法、粒子群算法、遗传算法、蚁群算法等智能算法。粒子群和蚁群算法分别是模拟鸟群和蚁群觅食行为的仿生算法。将两种算法用于路径规划领域,是近年来国内外学者研究的热点并取得了显著的成果。证明了其良好的应用性能。粒子群优化算法是一种新的随机搜索算法,具有很强的全局搜索能力,快速简洁但是易陷入局部最优;而蚁群算法具有并行性、正反馈性、求解精度高、收敛速度慢等特点。针对上述问题,具体改进策略如下:(1)针对复杂环境下移动机器人全局路径规划问题,提出了一种的增强蚁群优化算法。该算法通过改进信息素初始化和状态转移概率,避免了路径死锁;采用确定性与随机性相结合的路径点搜索策略改善了迂回曲折现象;利用路径平滑操作,增强了路径的连续性;引入局部信息素扩散机制,提高了算法的全局优化能力。仿真结果表明:当环境中障碍物分布密集或存在大量的凹形区域时,新算法能有效地规划出较为理想的安全路径,规划时间可满足实际应用要求。(2)根据粒子群算法快速、简洁的优点得到蚁群算法初始信息素分布,然后利用蚁群算法所具有的优点,如正反馈性、并行性、求解精度高等,规划出全局最优路径。利用matlab实验仿真平台,利用该仿真平台对粒子群蚁群融合算法进行仿真测试,并对其进行性能分析。仿真实验分析表明,粒子群蚁群融合算法在时间性能方面优于增强蚁群算法,在解的质量上优于粒子群算法,表明了改进策略的有效性和实用性。
1.1 粒子群算法
粒子群优化算法(Particle Swarm Optimization,PSO)是一种模拟自然界中生物群觅 食行为相互合作机制从而找到问题最优解的群体智算法。该算法具有原理简单、易实现、 控制参数较少等优点,从而在不同领域都得到了广泛应用。PSO 算法通过群体中各粒 子间的相互合作及竞争,实现对区域内最优解的寻找,其基本思想是在解空间中随机选 择一群粒子并将它们随机分布至解空间,每个粒子的运动速度和方向决定粒子的下一位 置,粒子本身目前找到的历史最优解和整个群体找到的历史最优解影响着每个粒子下一 次的运动速度和方向,每个粒子都看作是目标函数的一个可行解,将粒子的位置值带入 适应度函数计算并评价解的好坏,最终得到全局最优解。
1.2 蚁群算法
蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁种群搜索食物的行为而提 出的智能群体算法[37]。蚂蚁在缺失视觉功能的情况下,可以从蚁穴出发并找到与食物源 之间的最短路径,即使在路程中突然遇到障碍物,也能重新规划并找到最优路径。仿生 学家经过大量细致的观察研究发现,信息素(Pheromone)是蚂蚁个体之间进行信息交 换的媒介,蚂蚁通过信息素与群体中的其他个体进行信息交流,最终形成一种群体智能 行为。并非所有蚂蚁都依据信息素选取路径搜索食物,也有部分蚂蚁会选择其他道路,于此同时分泌信息素。信息素浓度表明了路径的远近,浓度越大,说明距离越近。随着 时间的推移,信息素浓度慢慢降低并逐渐挥发消失。蚂蚁会选择信息素浓度更高,也就 是更短的路径。经过一段时间,大多数蚂蚁都会选择最短的路径进行食物源搜索。
2 部分代码
clc clear close all E=0.000001; maxnum=30;%最大迭代次数 narvs=3;%目标函数的自变量个数 particlesize=20;%粒子群规模 c1=1.2;%每个粒子的个体学习因子,加速度常数 c2=1.6;%每个粒子的社会学习因子,加速度常数 w=0.8;%惯性因子 vmax1=0.5;%粒子的最大飞翔速度 vamx2=-0.5; v=rand(particlesize,narvs);%粒子飞翔速度 x=zeros(particlesize,3); x(:,1)=1+rand(1); x(:,2)=7+rand(1);%粒子所在位置 x(:,3)=0.2+0.1*rand(1); %定义适应度函数 % ROUT=zeros(particlesize,100); for i=1:particlesize [TT(i),ROUT{i},f(i)]=ACO(x(i,1),x(i,2),x(i,3)); end personalbest_x=x; personalbest_faval=f; % personalbest_faval=TT; [globalbest_faval(1),i]=min(personalbest_faval); globalbest_x=personalbest_x(i,:); globalbest_route=ROUT{i}; ff(1)=globalbest_faval(1); k=2; while (k<=maxnum) tic for i=1:particlesize [TT(i),ROUT{i},f(i)]=ACO(x(i,1),x(i,2),x(i,3)); if f(i)<personalbest_faval(i) personalbest_faval(i)=f(i); % personalbest_faval(i)=TT(i); personalbest_x(i,:)=x(i,:); end end if min(personalbest_faval) < globalbest_faval(k-1) [globalbest_faval(k),i]=min(personalbest_faval); globalbest_x(k,:)=personalbest_x(i,:); globalbest_route=ROUT{i}; else globalbest_faval(k)=globalbest_faval(k-1); globalbest_x(k,:)=personalbest_x(i,:); % globalbest_route=ROUT{i}; end for i=1:particlesize v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))... +c2*rand*(globalbest_x(k,:)-x(i,:)); for j=1:narvs if v(i,j)>vmax1 v(i,j)=vmax1; elseif v(i,j)<-vmax1 v(i,j)=-vmax1; end end x(i,:)=x(i,:)+v(i,:); end ff(k)=globalbest_faval(k); if globalbest_faval(k)<E break end k=k+1 end route=globalbest_route; [minkl,p]=min(globalbest_faval); xbest=globalbest_x(p,:); LENROUT=length(route); disp(['Alpha 表征信息素重要程度的参数=',num2str(xbest(1))]); disp(['Beta 表征启发式因子重要程度的参数=',num2str(xbest(2))]); disp(['Rho 信息素蒸发系数=',num2str(xbest(3))]); disp(sprintf('Shortroad is: %s',num2str(route))); disp(sprintf('Mininum is: %d',minkl)); figure(2) % set(gcf,'color','white'); plot(1:length(ff),ff) title('粒子群蚁群算法收敛曲线变化趋势') xlabel('迭代次数'); ylabel('适应度值'); first_address = [ 100,10 150,10 170,30 180,20 200,10 200,100 200,150 190,180 180,200 160,200 170,180 140,180 135,200 130,180 100,200 125,100 200,300 10,300 10,200 10,180 10,100 10,10 50,30 100,10 ];%first_address表示测试数据中的节点坐标 SumOfCity = size(first_address,1);%节点个数,实际返回行数,即为节点个数 length_address =0.*ones(SumOfCity,SumOfCity);%length_address表示两两节点间的距离,初始设定10000,可以设定无穷大,表示不相连 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% length_address(1,2)=194.0;%表示节点1和节点2的COST值 length_address(2,3)=64.9;% length_address(3,4)=20.0;% length_address(4,5)=18.6; length_address(2,5)=72.4; length_address(5,6)=123.4; length_address(6,7)=35.5; length_address(7,8)=32.4; length_address(8,9)=45.0; length_address(9,10)=51.4; length_address(10,13)=271.2; length_address(13,15)=100.0; length_address(15,19)=189.5; length_address(8,11)=293.9; length_address(11,12)=100.0; length_address(12,14)=4.1; length_address(14,20)=192.9; length_address(14,15)=86.8; length_address(10,12)=87.0; length_address(6,16)=600.0; length_address(16,21)=279.3; length_address(7,17)=92.0; length_address(17,18)=464.9; length_address(18,19)=46.0; length_address(19,20)=44.6; length_address(20,21)=67.5; length_address(21,22)=230.3; length_address(22,23)=102.9; length_address(23,24)=126.9; length_address(22,24)=262.5; for n=1:size(first_address) for m=1:size(first_address) if length_address(n,m)~=0 length_address(m,n)=length_address(n,m); %对称矩阵 end end end MM=size(length_address,1); % 画出节点分布图形 figure; grid on; hold on; % title (strcat('井下机车最短运输路径',date)) %title( sprintf('井下机车最短运输路径 Event occured at %s',datestr (date ,15))); for i=1:MM-1 plot(first_address(i,1),first_address(i,2),'co','MarkerSize',20); str=num2str(i); text(first_address(i,1)-5,first_address(i,2)+5,str,'Color','red','FontSize',12); end % m=length(route); for i=1:LENROUT plot(first_address(route(i),1),first_address(route(i),2),'MarkerSize',20,'MarkerEdgeColor','g','MarkerFaceColor',[0.2,0.5,0.5]) ; hold on; end for i=1:MM for j=1:MM if(length_address(i,j)~=0) line([first_address(i,1),first_address(j,1)],[first_address(i,2),first_address(j,2)],'Color','b','LineWidth',3);%划线 text((first_address(i,1)+first_address(j,1))/2,(first_address(i,2)+first_address(j,2))/2,num2str(length_address(i,j)));%标注线段距离 end end end %% 最短路径 for p=1:LENROUT-1 if(route(p+1)~=24) line([first_address(route(p),1),first_address(route(p+1),1)],[first_address(route(p),2),first_address(route(p+1),2)],'Color','r','LineWidth',3);%划线 text((first_address(route(p),1)+first_address(route(p+1),1))/2,(first_address(route(p),2)+first_address(route(p+1),2))/2,num2str(length_address(route(p),route(p+1))));%标注线段距离 else line([first_address(route(p),1),first_address(1,1)],[first_address(route(p),2),first_address(1,2)],'Color','r','LineWidth',3);%划线 text((first_address(route(p),1)+first_address(1,1))/2,(first_address(route(p),2)+first_address(1,2))/2,num2str(length_address(route(p),route(p+1))));%标注线段距离 end end axis([0 250 0 400]) % 图形显示最优及平均函数值变化趋势 % figure(2); % plot( minPL); % title('迭代优化过程'); % xlabel('迭代次数'); % ylabel('Cost'); % hold on;
3 仿真结果
4 参考文献
[1]高敏. 基于粒子群蚁群算法的路径规划研究. Diss. 南昌航空大学.