【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】

一、简介

  1. 麻雀搜索算法简介
    (以下描述,均不是学术用语,仅供大家快乐的阅读)
      麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,也就是今年,这是一个新鲜热乎的新算法,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论文的同学抓紧时间水论文了。
      麻雀搜索算法主要模拟了麻雀群觅食的过程。麻雀群觅食过程也是发现者-跟随者模型的一种,同时还叠加了侦查预警机制。麻雀中找到食物较好的个体作为发现者,其他个体作为跟随者,同时种群中选取一定比例的个体进行侦查预警,如果发现危险则放弃食物,安全第一。
      麻雀搜索算法的具体实现其实和人工蜂群算法非常相似,基本结构几乎一致,但是搜索算子有一定的差异,可以说是一种人工蜂群算法的改进算法。
      麻雀搜索算法的相关论文比较少,只看了原始论文,算法的描述比较详细,不过可以看出论文编排的比较匆忙,有部分公式显得过于复杂,影响理解。下面我会根据自己的理解对其中的部分公式进行简化,如果有不对的地方,欢迎大家留言。

  2. 算法流程
    这次我们的主角是一群麻雀。
    【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第1张图片
     麻雀虽小五脏俱全,每只麻雀只有一个属性:位置,代表它找到的食物的位置。每只麻雀有三种可能的行为:1.作为发现者,继续搜索食物,2,作为跟随者,跟随一个发现者觅食,3.警戒侦查,有危险则放弃食物。
      在D维解空间内每只麻雀的位置为 ,适应度值 。
      这群麻雀中有N只麻雀,每代选取种群中位置最好的PN只麻雀作为发现者,剩余的N-PN只麻雀作为跟随者。
    2.1更新发现者位置
    每代发现者的位置更新公式如下:
    【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第2张图片
    上图为文中的公式描述,有些不准确,更加精确的描述如下:
    【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第3张图片
     其中表示种群中第t代中第i个个体的第d维位置, 为(0,1]中的均匀随机数,Q为一个标准正态分布随机数。为[0,1]中的均匀随机数,ST为警戒阈值,取值范围为[0.5,1.0]。
      可以看出,当大于ST时,该发现者将按正态分布随机移动到当前位置附近。(其值收敛于最优位置)。
      当小于ST时是什么情况呢,我们先看看函数 的图像,其中取值为1000。
    【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第4张图片
    可以看出在其分布随着x的变大,取值范围逐渐由(0,1)慢慢缩小为约(0,0.4)。
    X值较小时,取值靠近1的概率较高,随着X的增大,取值的分布变得较为均匀。
    所以当 小于ST,麻雀的每一维都在变小,当然,这不是一个好策略。(其值收敛于0)。

2.2更新跟随者位置
文中跟随者的位置更新公式及描述如下图:
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第5张图片
首先我们先看看是一个大小为1*D的矩阵(1行D列),其每一维都随机从{-1,1}中选取 。
  举个简单的例子,假设 ,X=(x1,x2,x3)=(1,2,3),则
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第6张图片
 由于是行向量与矩阵运算,所以文中公式两边不应该出现公式j,出现公式j则表示该变量是一个数值而非一个向量。
  简化可得其位置更新公式如下:
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第7张图片
 其中xw为当前种群中麻雀的最差位置,xb则为种群中麻雀的最有位置。
  从公式(2)中可以看出,若i>n/2时,其值为一个标准正态分布随机数与一个以自然对数为底数的指数函数的积,当种群收敛时其取值符合标准正态分布随机数。(其值会收敛于0)。
  若i<=n/2时,其取值为当前最优的麻雀的位置加上该麻雀与最优位置每一维距离随机加减后,将总和均分到每一维上。解释有点绕口,请结合公式自行理解。该过程可以描述为在当前最优位置附近随机找一个位置,且每一维距最优位置的方差将会变得更小,即不会出现在某一维上与最优位置相差较大,而其他位置相差较小。(其值收敛于最优位置)。

2.3侦查预警行为
在麻雀觅食的同时他们中的部分会负责警戒,当危险靠近时,他们会放弃当前的食物,即无论该麻雀是发现者还是跟随者,都将放弃当前的食物而移动到一个新的位置。
  每代将从种群中随机选择SD个个体进行预警行为。
其位置更新公式如下:
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第8张图片

其中为符合标准正态分布的随机数,K为[-1,1]的均匀随机数,为一个较小的数防止分母唯一。与原文中的公式相比,我去除了原绝对值符号,因为两个随机数均是关于原点中心对称,增加的分母绝对值,防止分母取值为0。其中为最差位置的麻雀的适应度值。
  从公式(3)中可以看出,如果该预警的麻雀处于当前的最优位置时,它会逃离到自身附近的一个位置,具体有多近取决于自身距离最差位置与自身位置食物与最差食物的差别的比值;如果该麻雀不是处于最优位置的那一只,它讲逃到当前最优位置附近。(其值收敛于最优位置)。
麻雀搜索算法的流程图如下:
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第9张图片
流程图
  可以看出麻雀搜索算法的流程非常的简单。但是根据上面对这三个更新公式的分析可以看出,麻雀搜索算法的更新方式可大致分为两种:1.向当前最优位置靠近;2.向原点靠近。
  使用这两种方式来更新麻雀的位置将会使算法容易陷入局部最优。直觉告诉我拥有这样的更新规则的算法不是一个优秀的算法。具体的问题下面实验中进行详述。

二、源代码

close all;
clear all;
clc;
addpath(genpath('./'));
 
%% Plan path
disp('Planning ...');
map = load_map('maps/map4.txt', 0.1, 0.5, 0.25);
start = {
      [1 7 1]};
stop  = {
     [0.1 17 3]};
%start = {
     [0 1 5]};
%stop = {
     [19 1 5]};
nquad = length(start);
for qn = 1:nquad
       v = cputime;
    path{
     qn} = dijkstra(map, start{
     qn}, stop{
     qn});
    c = cputime - v;
    fprintf('Algo Execution time = %d \n',c);
end
if nquad == 1
    plot_path(map, path{
     1});
else
    % you could modify your plot_path to handle cell input for multiple robots
end
 
%% Additional init script
init_script;
 
%% Run trajectory
trajectory = test_trajectory(start, stop, map, path, true); % with visualization

三、运行结果

【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】_第10张图片

四、备注

完整代码或者代写添加QQ2449341593。
往期回顾>>>>>>
【VRP】基于matlab遗传算法的带时间窗的车辆路径问题【含Matlab源码 002期】
【路径规划】基于matlab A*算法解决三维路径规划问题【含Matlab源码 003期】
【路径规划】基于matlab人工蜂群的路径规划【含Matlab源码 004期】
【路径规划】基于matlab蚁群求解多旅行商MTSP问题【含Matlab源码 005期】
【路径规划】基于matlab蚁群算法的无人机路径规划【含Matlab源码 008期】
【路径规划】基于matlab遗传算法求解多VRP问题【含Matlab源码 010期】
【路径规划】基于matlab遗传算法的多中心VRP求解【含Matlab源码 011期】
【路径规划】基于matlab粒子群的三维无人机路径规划【含Matlab源码 015期】
【路径规划】基于matlab采用遗传算法编制多物流中心的开放式车辆路径问题【含Matlab源码 017期】
【路径规划】基于matlab粒子群之机器人栅格路径规划【含Matlab源码 018期】
【路径规划】基于matlab蚁群算法求解最短路径【含Matlab源码 019期】
【路径规划】基于matlab 免疫算法之物流中心选址问题【含Matlab源码 020期】
【路径规划】基于matlab人工蜂群的无人机三维路径规划【含Matlab源码 021期】
【路径规划】基于matalb栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 022期】
【路径规划】基于matlab栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 027期】
【路径规划】基于matlab蚁群的多无人机攻击调度【含Matlab源码 034期】
【路径规划】基于matlab蚁群的三维路径规划【含matlab源码 043期】
【路径规划】基于matlab粒子群优化蚁群的最短路径求解【含Matlab源码 076期】
【路径规划】基于matlab蚁群算法求解多中心VRP问题【含Matlab源码 111期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 112期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 113期】
【路径规划】基于matalb遗传算法的多中心VRP求解【含Matlab源码 114期】
【路径规划】基于matlab模拟退火求解VRP问题【含Matlab源码 115期】
【路径规划】基于matlab A星的栅格路径规划【含Matlab源码 116期】
【路径规划】基于matlab一种带交叉因子的双向寻优粒子群栅格地图路径规划【含Matlab源码 117期】
【TSP】基于matlab蚁群算法求解旅行商TSP问题含GUI【含Matlab源码 118期】
【路径规划】基于matlab蚁群算法栅格地图路径规划【含Matlab源码 119期】
【TSP问题】基于matlab差分进化求解的TSP问题【含matlab源码 131期】
【路径规划】基于matlab遗传算法的旅行商 TSP 问题【含Matlab源码 135期】
【路径规划】基于matlab模拟退火算法的旅行商 TSP 问题【含Matlab源码 136期】
【路径规划】基于matlab蚁群算法的智能车路径规划【含Matlab源码 137期】
【路径规划】华为杯:无人机在抢险救灾中的优化运用【含Matlab源码 138期】
【路径规划】基于matlab RRT三维路径规划【含Matlab源码 151期】
【路径规划】基于matalb人工势场无人机编队路径规划【 含Matlab 155期】
【VRP问题】基于matlab节约算法求解TWVRP问题【含Matlab源码 156期】
【VRP问题】基于matlab节约算法求解CVRP问题【含Matalb源码 157期】
【VRP问题】基于matlab禁忌搜索算法求解VRP问题【含Matalb源码 158期】
【VRP问题】基于matlab模拟退火求解CVRP问题【含Matlab源码 159期】
【VRP问题】基于matlab人工鱼群求解带时间窗的VRP问题【含Matlab源码 161期】
【VRP问题】基于matlab遗传算法求解带容量的VRP问题【含Matlab源码 162期】
【路径规划】基于matlab狼群算法之三维路径规划【含Matlab源码 167期】
【路径规划】基于matlab人工势场的无人机三维路径规划【含Matlab源码 168期】
【路径规划】基于matlab改进差分之三维多无人机协同航迹规划【含Matlab源码 169期】
【路径规划】基于matlab人工蜂群的多无人机三维路径规划【含Matlab源码 170期】

你可能感兴趣的:(matlab,路径规划)