欢迎光临散文网 会员登陆 & 注册

【路径规划】基于改进粒子群实现机器人栅格地图路径规划

2021-08-16 00:13 作者:Matlab工程师  | 我要投稿


1 研究背景


粒子群算法的发展过程。粒子群优化算法(Partical Swarm Optimization PSO),粒子群中的每一个粒子都代表一个问题的可能解,通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。由于PSO操作简单、收敛速度快,因此在函数优化、 图像处理、大地测量等众多领域都得到了广泛的应用。 随着应用范围的扩大,PSO算法存在早熟收敛、维数灾难、易于陷入局部极值等问题需要解决,主要有以下几种发展方向。

1、基本思想

  粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

2、更新规则

  PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式

公式(2)和 公式(3)被视为标准PSO算法

3、PSO算法的流程和伪代

clc; close all clear load('data4.mat') S=(S_coo(2)-0.5)*num_shange+(S_coo(1)+0.5);%起点对应的编号 E=(E_coo(2)-0.5)*num_shange+(E_coo(1)+0.5);%终点对应的编号 PopSize=20;%种群大小 OldBestFitness=0;%旧的最优适应度值 gen=0;%迭代次数 maxgen =200;%最大迭代次数 c1=0.5;%认知系数 c2=0.7;%社会学习系数 c3=0.2;%反向因子 w=0.96;%惯性系数 %% %初始化路径 w_min=0.5; w_max=1; Group=ones(num_point,PopSize);  %种群初始化 flag=1; %最优解 figure(3) hold on for i=1:num_shange    for j=1:num_shange        if sign(i,j)==1            y=[i-1,i-1,i,i];            x=[j-1,j,j,j-1];            h=fill(x,y,'k');            set(h,'facealpha',0.5)        end        s=(num2str((i-1)*num_shange+j));        text(j-0.95,i-0.5,s,'fontsize',6)    end end axis([0 num_shange 0 num_shange])%限制图的边界 plot(S_coo(2),S_coo(1), 'p','markersize', 10,'markerfacecolor','b','MarkerEdgeColor', 'm')%画起点 plot(E_coo(2),E_coo(1),'o','markersize', 10,'markerfacecolor','g','MarkerEdgeColor', 'c')%画终点 set(gca,'YDir','reverse');%图像翻转 for i=1:num_shange    plot([0 num_shange],[i-1 i-1],'k-');    plot([i i],[0 num_shange],'k-');%画网格线 end for i=2:index1    Q1=[mod(route_lin(i-1)-1,num_shange)+1-0.5,ceil(route_lin(i-1)/num_shange)-0.5];    Q2=[mod(route_lin(i)-1,num_shange)+1-0.5,ceil(route_lin(i)/num_shange)-0.5];    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'r','LineWidth',3) end title('改进后的粒子群算法-最优路线'); %进化曲线 figure(4); plot(BestFitness); xlabel('迭代次数') ylabel('适应度值') grid on; title('改进后的进化曲线'); disp('改进后的粒子群算法-最优路线方案:') disp(num2str(route_lin)) disp(['起点到终点的距离:',num2str(BestFitness(end))]); figure(5); plot(BestFitness*100); xlabel('迭代次数') ylabel('适应度值') grid on; title('改进后的最佳个体适应度值变化趋势');



【路径规划】基于改进粒子群实现机器人栅格地图路径规划的评论 (共 条)

分享到微博请遵守国家法律