【路径规划】基于粒子群算法求解二维最短路径matlab代码

309 阅读3分钟

1 简介

1.1 粒子群算法

粒子群优化算法(Particle Swarm Optimization,PSO)是一种模拟自然界中生物群觅 食行为相互合作机制从而找到问题最优解的群体智算法。该算法具有原理简单、易实现、 控制参数较少等优点,从而在不同领域都得到了广泛应用。PSO 算法通过群体中各粒 子间的相互合作及竞争,实现对区域内最优解的寻找,其基本思想是在解空间中随机选 择一群粒子并将它们随机分布至解空间,每个粒子的运动速度和方向决定粒子的下一位 置,粒子本身目前找到的历史最优解和整个群体找到的历史最优解影响着每个粒子下一 次的运动速度和方向,每个粒子都看作是目标函数的一个可行解,将粒子的位置值带入 适应度函数计算并评价解的好坏,最终得到全局最优解。

img

img

2 部分代码  

%------main主函数--------------------------------------------------

%------初始格式化--------------------------------------------------

clear all;

clc;

format bank;

close all

%------定义全局变量----------------------------------------------

%-粒子群的-

global c1;             %学习因子1

global c2;             %学习因子2

global w;              %惯性权重

global wmax;

global wmin;

global MaxDT;            %最大迭代次数

global m;                  %搜索空间维数(未知数个数)

global N;                  %初始化群体个体数目

global eps;           %设置精度(在已知最小值时候用)

global Kmax;          %初始化x时用的最大迭代次数

global Qmax;          %初始化x时粒子全部重新初始化用的最大迭代次数

global fitw1;         %适应值函数中的两个权重

global fitw2;

global pathta ;       %移动的角度为60度

%-路径规划的-

global robotv;          %机器人半径

global s;               %起始点

global g;               %目标点

global obstaclesx;       %障碍物点

global obstaclesy;

global Nsteps;          %机器人最多能移动的步数

global ploR;            %极坐标半径

global segR;            %极坐标的分段半径

global mapmin;         % 地图大小

global mapmax;

global curpoint;        %当前点的位置

global hadsteps;        %只记录curpoint的集:链表一样

global curstep;         %当前的步数

global rangOb;          %在粒子范围内的障碍物点

global obIndex;         %记录在粒子范围内的障碍物点的索引

global goalLine;        %记录当前点和目标点之间连线的方程

global movelen;         %机器人移动长度

global V;               %机器人的速度(矢量)

global pointIndex;      %记录点的索引

global pathpoint;       %记录所有的点

global goalta               %当前点到目标点的角度

global numta;           %把圈分为几个角

global pamoveta;        %粒子的可行角度,维数由numta定

global searchsued;      %是否搜索成功

%-------初始化矩阵----------------------------------------------

initial;

%pause;

%-------开始寻找路径--------------------------------------------

result = pathplanning(); 

if result == 1

    disp('找到路径');

    hadsteps(curstep+1,1) = g(1);

    hadsteps(curstep+1,2) = g(2);

else

    disp('路径找不到');

end

%-最后处理-----------------------------

pointIndex = pointIndex+1;

pathpoint(pointIndex,1) = g(1);

pathpoint(pointIndex,2) = g(2);

pathpoint

%-------画---------------------------------------

figure(1)

hold on

plot(pathpoint(:,1),pathpoint(:,2),'r-')

 plot(hadsteps(:,1),hadsteps(:,2),'b-')

hold off

%plot(pathpoint);

3 仿真结果

4 参考文献

[1]秦元庆, 孙德宝, 李宁,等. 基于粒子群算法的移动机器人路径规划[J]. 机器人, 2004, 26(003):222-225.

5 MATLAB代码与数据下载地址

见博客主页