精华内容
下载资源
问答
  • 基于matlab蚁群算法的三维路径规划 二、源代码 %% 该函数用于演示基于蚁群算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 load HeightData HeightData %网格划分 LevelGrid=10; ...

    一、简介

    1 蚁群算法的提出
    蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。遗传算法在模式识别、神经网络、机器学习、工业优化控制、自适应控制、生物科学、社会科学等方面都得到应用。
    2 算法的基本原理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、源代码

    %% 该函数用于演示基于蚁群算法的三维路径规划算法
    
    %% 清空环境
    clc
    clear
    
    %% 数据初始化
    
    %下载数据
    load  HeightData HeightData
    
    %网格划分
    LevelGrid=10;
    PortGrid=21;
    
    %起点终点网格点 
    starty=10;starth=4;
    endy=8;endh=5;
    m=1;
    %算法参数
    PopNumber=10;         %种群个数
    BestFitness=[];    %最佳个体
    
    %初始信息素
    pheromone=ones(21,21,21);
    
    %% 初始搜索路径
    [path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,pheromone, ...
        HeightData,starty,starth,endy,endh); 
    fitness=CacuFit(path);                          %适应度计算
    [bestfitness,bestindex]=min(fitness);           %最佳适应度
    bestpath=path(bestindex,:);                     %最佳路径
    BestFitness=[BestFitness;bestfitness];          %适应度值记录
     
    %% 信息素更新
    rou=0.2;
    cfit=100/bestfitness;
    for i=2:PortGrid-1
        pheromone(i,bestpath(i*2-1),bestpath(i*2))= ...
            (1-rou)*pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
    end
        
    %% 循环寻找最优路径
    for kk=1:100
         
        %% 路径搜索
        [path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,...
            pheromone,HeightData,starty,starth,endy,endh); 
        
        %% 适应度值计算更新
        fitness=CacuFit(path);                               
        [newbestfitness,newbestindex]=min(fitness);     
        if newbestfitness<bestfitness
            bestfitness=newbestfitness;
            bestpath=path(newbestindex,:);
        end 
        BestFitness=[BestFitness;bestfitness];
        
        %% 更新信息素
        cfit=100/bestfitness;
        for i=2:PortGrid-1
            pheromone(i,bestpath(i*2-1),bestpath(i*2))=(1-rou)* ...
                pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
        end
     
    end
    
    

    三、运行结果

    在这里插入图片描述

    四、备注

    完整代码或者代写添加QQ1564658423。

    展开全文
  • 蚁群算法进行三维路径规划,这是三维尺度上的路径规划源代码,非常值得学习。
  • Matlab基于蚁群算法的三维路径规划算法原创-基于蚁群算法的水下潜器三维空间路径规划.rar 论坛中关于蚁群算法的讨论比较少啊,上传一个前面做的基于蚁群算法的三维路径规划算法,呵呵,起个抛砖引玉的作用吧,参考...
  •  路径规划都有哪些方法呢?比较流行的有:图搜索、势场法、RRT 等等。  RRT(快速探索随机树) 是一种通用的方法,不管什么机器人类型、不管自由度是多少、不管约束有多复杂都能用。而且它的原理很简单,这是它在...

    对RRT算法感兴趣,是因为我对它不仅在二维平面上适用,在高维空间也能使用而感到心动,最近比较忙,下周或者什么时候要要用代码亲自实现一下。

     路径规划都有哪些方法呢?比较流行的有:图搜索、势场法、RRT 等等。 

       RRT(快速探索随机树) 是一种通用的方法,不管什么机器人类型、不管自由度是多少、不管约束有多复杂都能用。而且它的原理很简单,这是它在机器人领域流行的主要原因之一。不过它的缺点也很明显,它得到的路径一般质量都不是很好,例如可能包含棱角,不够光滑,通常也远离最优路径

    RRT 能在众多的规划方法中脱颖而出,它到底厉害在哪里呢? 
      天下武功唯快不破,“快”是 RRT 的一大优点。RRT 的思想是快速扩张一群像树一样的路径以探索(填充)空间的大部分区域,伺机找到可行的路径。之所以选择“树”是因为它能够探索空间。我们知道,阳光几乎是树木唯一的能量来源。为了最大程度地利用阳光,树木要用尽量少的树枝占据尽量多的空间。当然了,能探索空间的不一定非得是树,比如Peano曲线也可以做到,而且要多密有多密,如上图左所示的例子。虽然像Peano曲线这样的单条连续曲线也能探索空间,但是它太“确定”了。在搜索轨迹的时候我们可不知道出路应该在哪里,如果不在“确定”的搜索方向上,我们怎么找也找不到(找到的概率是0)。这时“随机”的好处就体现出来了,虽然不知道出路在哪里,但是通过随机的反复试探还是能碰对的,而且碰对的概率随着试探次数的增多越来越大,就像买彩票一样,买的数量越多中奖的概率越大(RRT名字中“随机”的意思)。可是随机试探也讲究策略,如果我们从树中随机取一个点,然后向着随机的方向生长,那么结果是什么样的呢?见上图右。可以看到,同样是随机树,但是这棵树并没很好地探索空间,它一直在起点(红点)附近打转。这可不好,我们希望树尽量经济地、均匀地探索空间,不要过度探索一个地方,更不能漏掉大部分地方。这样的一棵树怎么构造呢? 

     RRT 的基本步骤是: 
      1. 起点作为一颗种子,从它开始生长枝丫; 
      2. 在机器人的“构型”空间中,生成一个随机点 ; 
      3. 在树上找到距离  最近的那个点,记为  吧; 
      4.  朝着 的方向生长,如果没有碰到障碍物就把生长后的树枝和端点添加到树上,返回 2; 
      随机点一般是均匀分布的,所以没有障碍物时树会近似均匀地向各个方向生长,这样可以快速探索空间(RRT名字中“快速探索”的意思)。当然如果你事先掌握了最有可能发现路径的区域信息,可以集中兵力重点探索这个区域,这时就不宜用均匀分布了。 

      RRT 的一个弱点是难以在有狭窄通道的环境找到路径。因为狭窄通道面积小,被碰到的概率低,找到路径需要的时间要看运气了。下图展示的例子是 RRT 应对一个人为制作的很短的狭窄通道,有时RRT很快就找到了出路,有时则一直被困在障碍物里面。 

     RRT探索空间的能力还是不错的,例如下图左所示的例子,障碍物多而且杂乱(借助 Mathematica 本身具有的强大函数库,实现这个例子所需的所有代码应该不会超过30行)。还有没有环境能难住RRT呢?下图右所示的迷宫对RRT就是个挑战。这个时候空间被分割得非常严重,RRT显得有些力不从心了,可见随机策略不是什么时候都有效的。 

      “随机”使得RRT有很强的探索能力。但是成也萧何败也萧何,“随机”也导致 RRT 很盲目,像个无头苍蝇一样到处乱撞。如果机器人对环境一无所知,那么采用随机的策略可以接受。可实际情况是,机器人对于它的工作环境多多少少是知道一些的(即使不是完全知道)。我的博客一直强调信息对于机器人的重要性。这些已知的信息就可以用来改进算法。一个改进的办法就是给它一双“慧眼”:在势场法中,势函数携带了障碍物和目标的信息,如果能把这个信息告诉 RRT,让它在探索空间时有倾向地沿着势场的方向前进会更好。这样,RRT 出色的探索能力刚好可以弥补势场法容易陷入局部极小值的缺点。

      将RRT方法用在机械臂上的效果如下图所示(绿色表示目标状态)。我设置了4个障碍物(其中一个是大地),这对机械臂是个小小的挑战。由于我们生活在三维空间,没办法看到六维关节空间,所以我把六维关节空间拆成了两个三维空间,分别对应前三个关节和后三个关节(严格来说,六维转动关节空间不是一个欧式空间,它是个流形,不过这里我们不必纠结这个差别): 

    function c;
    clc
    clear all
    close all
    %map1 随机地表。
    % a=10;
    % b=0.2;
    % c=0.1;
    % d=0.6;
    % e=1;
    % f=0.1;
    % g=0.1;
    % for x=1:80
    %     for y=1:80
    % Z1=sin(y+a)+b*sin(x)+cos(d*(x^2+y^2)^(1/2))+e*cos(y)+f*sin(f*(x^2+y^2)^(1/2))+g*cos(y);
    % % Z1=SquareDiamond(6,2,8);
    %  figure(1);
    %  surf(Z1); %画出三维曲面 
    %  shading flat; %各小曲面之间不要网格 
    % %map2 山峰图
    tic;
    % h=[20,35,25,38,20,25];
    % x0=[20,40,45,60,20,20];
    % y0=[10,25,50,30,45,10];
    % xi=[5.5,8,5,4.5,5.5,3.5];
    % yi=[5,7,6,5.5,6,4.5];
    h=[20,35,25,38,20,25];
    x0=[20,40,45,60,20,20];
    y0=[10,25,50,30,45,10];
    xi=[5.5,8,5,4.5,5.5,3.5];
    yi=[5,7,6,5.5,6,4.5];
    Z2=CeatHill(6,h,x0,y0,xi,yi,80); 
    figure(2);
    surf(Z2); %画出三维曲面 
    shading flat; %各小曲面之间不要网格 
    %map3 合成图
    %  Z3=max(Z1,Z2);
    %  figure(3);
    %  surf(Z3); %画出三维曲面 
    %  shading flat; %各小曲面之间不要网格 
    segmentLength =5;
    start_node =  [10,80,5,0,0,0];
    end_node   =[60,0,5,1,0,0];
    hold on
    plot3(start_node(:,1),start_node(:,2),start_node(:,3),'r*');
    plot3(end_node(:,1),end_node(:,2),end_node(:,3),'r*');
    tree = start_node;
    if ( (norm(start_node(1:3)-end_node(1:3))<segmentLength )...
        &(collision(start_node,end_node)==0) )
      path = [start_node; end_node];
      else
      numPaths = 0;
      while numPaths<1,
          [tree,flag] = extendTree(tree,end_node,segmentLength,Z2);
          numPaths = numPaths + flag;
      end
    end
     path = findMinimumPath(tree);
     plot3(path(:,1),path(:,2),path(:,3),'r');  
     toc;
     function [data]=CeatHill(N,h,x0,y0,xi,yi,num) 
    x=1:1:num;y=1:1:num;
    for m=1:num
        for n=1:num
            Sum=0;
            for k=1:N
               s=h(k)*exp(-((x(m)-x0(k))/xi(k))^2-((y(n)-y0(k))/yi(k))^2);
               Sum=Sum+s;
            end
            data(m,n)=Sum;
        end
    end
    
    

    完整代码或者代写添加QQ1575304183

    往期回顾>>>>>>

    【路径规划】基于BBO算法的无人机三维路径规划matlab源码

    【路径规划】基于SSA算法的无人机三维路径规划matlab 源码

    【路径规划】基于A星算法的三维路径规划matlab源码

    【路径规划】基于蚁群算法的无人机路径规划matlab源码

    【路径规划】基于粒子群的三维无人机路径规划matlab源码

    【路径规划】基于粒子群的无人机三维路径规划含障碍matlab源码

    【路径规划】基于nsga的无人机路径规划

    【路径规划】基于人工蜂群的无人机三维路径规划

    【路径规划】A*算法解决三维路径规划问题

    【路径规划】考虑分配次序的多无人机协同目标分配建模与遗传算法求解

    【路径规划】基于改进差分之三维多 无人机协同航迹规划

    【路径规划】基于人工势场的无人机三维路径规划matlab源码

    【路径规划】基于狼群算法之三维路径规划matlab源码

    展开全文
  • 基于蚁群算法的三维路径规划 希望希望给大家借鉴
  • 基于蚁群算法的三维路径规划算法,结合具体的案例给出了程序分析
  • 基于蚁群算法的二、三维路径规划算法,matlab代码,注释齐全
  • 本代码主要利用MATLAB工具进行MATLAB——基于蚁群算法的三维路径规划算法的仿真
  • 基于matlab蚁群算法的三维路径规划 二、源代码 %% 该函数用于演示基于蚁群算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 load HeightData HeightData %网格划分 LevelGrid=10; ...

    一、简介

    基于matlab蚁群算法的三维路径规划

    二、源代码

    %% 该函数用于演示基于蚁群算法的三维路径规划算法
    
    %% 清空环境
    clc
    clear
    
    %% 数据初始化
    
    %下载数据
    load  HeightData HeightData
    
    %网格划分
    LevelGrid=10;
    PortGrid=21;
    
    %起点终点网格点 
    starty=10;starth=4;
    endy=8;endh=5;
    m=1;
    %算法参数
    PopNumber=10;         %种群个数
    BestFitness=[];    %最佳个体
    
    %初始信息素
    pheromone=ones(21,21,21);
    
    %% 初始搜索路径
    [path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,pheromone, ...
        HeightData,starty,starth,endy,endh); 
    fitness=CacuFit(path);                          %适应度计算
    [bestfitness,bestindex]=min(fitness);           %最佳适应度
    bestpath=path(bestindex,:);                     %最佳路径
    BestFitness=[BestFitness;bestfitness];          %适应度值记录
     
    %% 信息素更新
    rou=0.2;
    cfit=100/bestfitness;
    for i=2:PortGrid-1
        pheromone(i,bestpath(i*2-1),bestpath(i*2))= ...
            (1-rou)*pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
    end
        
    %% 循环寻找最优路径
    for kk=1:100
         
        %% 路径搜索
        [path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,...
            pheromone,HeightData,starty,starth,endy,endh); 
        
        %% 适应度值计算更新
        fitness=CacuFit(path);                               
        [newbestfitness,newbestindex]=min(fitness);     
        if newbestfitness<bestfitness
            bestfitness=newbestfitness;
            bestpath=path(newbestindex,:);
        end 
        BestFitness=[BestFitness;bestfitness];
        
        %% 更新信息素
        cfit=100/bestfitness;
        for i=2:PortGrid-1
            pheromone(i,bestpath(i*2-1),bestpath(i*2))=(1-rou)* ...
                pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
        end
     
    end
    
    

    三、运行结果

    在这里插入图片描述

    四、备注

    完整代码或者代写添加QQ912100926。
    往期回顾>>>>>>
    【路径规划】粒子群优化算法之三维无人机路径规划【Matlab 012期】
    【路径规划】遗传算法之多物流中心的开放式车辆路径规划【Matlab 013期】
    【路径规划】粒子群算法之机器人栅格路径规划【Matlab 014期】
    【路径规划】蚁群算法之求解最短路径【Matlab 015期】
    【路径规划】免疫算法之物流中心选址【Matlab 016期】
    【路径规划】人工蜂群之无人机三维路径规划【Matlab 017期】
    【路径规划】遗传算法之基于栅格地图机器人路径规划【Matlab 018期】
    【路径规划】蚁群算法之多无人机攻击调度【Matlab 019期】
    【路径规划】遗传算法之基于栅格地图的机器人最优路径规划【Matlab 020期】
    【路径规划】遗传算法之考虑分配次序的多无人机协同目标分配建模【Matlab 021期】
    【路径规划】蚁群算法之多中心vrp问题【Matlab 022期】
    【路径规划】蚁群算法之求解带时间窗的多中心VRP【Matlab 023期】
    【路径规划】遗传算法之多中心VRP求解【Matlab 024期】
    【路径规划】模拟退火之求解VRP问题【Matlab 025期】
    【路径规划】A星之栅格路径规划【Matlab 026期】
    【路径规划】基于一种带交叉因子的双向寻优粒子群栅格地图路径规划【Matlab 027期】
    【路径规划】【TSP】蚁群算法之求解TSP问题含GUI【Matlab 028期】
    【路径规划】蚁群算法之栅格地图路径规划【Matlab 029期】
    【路径规划】遗传算法之旅行商 TSP 【Matlab 030期】
    【路径规划】模拟退火算法之旅行商 TSP 问题【Matlab 031期】
    【路径规划】蚁群算法之智能车路径规划【Matlab 032期】
    【路径规划】华为杯:基于matlab 无人机优化运用于抢险救灾【Matlab 033期】
    【路径规划】matlab之最小费用最大流算问题【Matlab 034期】
    【路径规划】A*算法之解决三维路径规划问题【Matlab 035期】
    【路径规划】人工蜂群算法之路径规划【Matlab036期】
    【路径规划】人工蜂群算法之路径规划【Matlab 037期】
    【路径规划】蚁群算法之求解多旅行商MTSP问题【Matlab 038期】
    【路径规划】蚁群算法之无人机路径规划【Matlab 039期】

    【路径规划】遗传算法之求解多VRP问题【Matlab 040期】
    【VRP】遗传算法之带时间窗的车辆路径问题【Matlab 041期】
    【路径规划】蚁群算法之三维路径规划【Matlab 042期】
    【路径规划】粒子群优化蚁群之求解最短路径【Matlab 043期】
    【TSP问题】差分进化之求解TSP问题【Matlab 044期】
    【路径规划】RRT之三维路径规划【Matlab 144期】
    【路径规划】人工势场算法之无人机编队路径规划【 Matlab 145期】
    【VRP问题】节约算法之求解TWVRP问题【Matlab 146期】
    【VRP问题】节约算法之求解CVRP问题【Matalb 147期】
    【VRP问题】禁忌搜索算法之求解VRP问题【Matalb 148期】
    【VRP问题】模拟退火算法之求解CVRP问题【Matlab 149期】
    【VRP问题】模拟退火求解带时间窗之TWVRP问题【Matlab 150期】
    【VRP问题】人工鱼群算法之求解带时间窗VRP问题【Matlab 151期】
    【VRP问题】遗传算法之求解带容量VRP问题【Matlab 152期】
    【路径规划】狼群算法算法之三维路径规划【Matlab 153期】
    【路径规划】人工势场算法之无人机三维路径规划【Matlab 154期】
    【路径规划】改进差分算法之三维多无人机协同航迹规划【Matlab 155期】
    【路径规划】人工蜂群算法之多无人机三维路径规划【Matlab 156期】
    【路径规划】麻雀搜索算法之无人机三维路径规划【Matlab 157期】

    展开全文
  • 数学建模源码集锦-基于蚁群算法的三维路径规划算法应用实例
  • 基于改进蚁群算法的火星车三维路径规划,赵静,魏世民,随着20世纪中后期航空航基于改进蚁群算法的火星探测器三维路径规划天观测和空间技术的快速发展,火星已经成为人类进入太空、探索�
  • Matlab基于蚁群算法的三维路径规划算法原创-蚁群算法.rar 论坛中关于蚁群算法的讨论比较少啊,上传一个前面做的基于蚁群算法的三维路径规划算法,呵呵,起个抛砖引玉的作用吧,参考的论文和程序都在上面
  • %% PSO 三维路径规划 clc,clear , close all feature jit off %% 模型基本参数 % 载入地形 矩阵 filename = 'TestData1.xlsx' ; model.x_data = xlsread( filename , 'Xi') ; model.y_data = xlsread(filename, 'Yi...

    粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出。自PSO诞生以来,它在许多方面都得到了改进,这一部分将介绍基本的粒子群优化算法原理和过程。

    2.1 粒子群优化

    粒子群优化(PSO)是一种群智能算法,其灵感来自于鸟类的群集或鱼群学习,用于解决许多科学和工程领域中出现的非线性、非凸性或组合优化问题。

    在这里插入图片描述

    图1 Russel Eberhart和James Kennedy

    2.1.1 算法思想

    许多鸟类都是群居性的,并由各种原因形成不同的鸟群。鸟群可能大小不同,出现在不同的季节,甚至可能由群体中可以很好合作的不同物种组成。更多的眼睛和耳朵意味着有更多的及时发现食物和捕食者的机会。鸟群在许多方面对其成员的生存总是有益的:

    觅食:社会生物学家E.O.Wilson说,至少在理论上,群体中的个体成员可以从其他成员在寻找食物过程中的发现和先前的经验中获益[1]。如果一群鸟的食物来源是相同的,那么某些种类的鸟就会以一种非竞争的方式聚集在一起。这样,更多的鸟类就能利用其他鸟类对食物位置的发现。

    抵御捕食者:鸟群在保护自己免受捕食者侵害方面有很多优势。

    • 更多的耳朵和眼睛意味着更多的机会发现捕食者或任何其他潜在的危险;

    • 一群鸟可能会通过围攻或敏捷的飞行来迷惑或压制捕食者;

    • 在群体中,互相间的警告可以减少任何一只鸟的危险。

    空气动力学:当鸟类成群飞行时,它们经常把自己排成特定的形状或队形。鸟群中鸟的数量不同,每只鸟煽动翅膀时产生不同的气流,这都会导致变化的风型,这些队形会充分利用不同的分型,从而使得飞行中的鸟类能够以最节能的方式利用周围的空气。

    粒子群算法的发展需要模拟鸟群的一些优点,然而,为了了解群体智能和粒子群优化的一个重要性质,值得提一下是鸟群的一些缺点。当鸟类成群结队时,也会给它们带来一些风险。更多的耳朵和眼睛意味着更多的翅膀和嘴,这导致更多的噪音和运动。在这种情况下,更多的捕食者可以定位鸟群,对鸟类造成持续的威胁。一个更大的群体也会需要更多的食物,这导致更多食物竞争,从而可能淘汰群体中一些较弱的鸟类。这里需要指出的是,PSO并没有模拟鸟类群体行为的缺点,因此,在搜索过程中不允许杀死任何个体,而在遗传算法中,一些较弱的个体会消亡。在PSO中,所有的个体都将存活,并在整个搜索过程中努力让自己变得更强大。在粒子群算法中,潜在解的改进是合作的结果,而在进化算法中则是因为竞争。这个概念使得群体智能不同于进化算法。简而言之,在进化算法中,每一次迭代都有一个新的种群进化,而在群智能算法中,每一代都有个体使自己变得更好。个体的身份不会随着迭代而改变。Mataric[2]给出了以下鸟群规则:

    1. 安全漫游:鸟类飞行时,不存在相互间或与障碍物间的碰撞;

    2. 分散:每只鸟都会与其他鸟保持一个最小的距离;

    3. 聚合:每只鸟也会与其他鸟保持一个最大的距离;

    4. 归巢:所有的鸟类都有可能找到食物来源或巢穴。

    在设计粒子群算法时,并没有采用这四种规则来模拟鸟类的群体行为。在Kennedy和Eberhart开发的基本粒子群优化模型中,对agent的运动不遵循安全漫游和分散规则。换句话说,在基本粒子群优化算法的运动过程中,允许粒子群优化算法中的代理尽可能地靠近彼此。而聚合和归巢在粒子群优化模型中是有效的。在粒子群算法中,代理必须在特定的区域内飞行,以便与任何其他代理保持最大距离。这就相当于在整个过程中,搜索始终停留在搜索空间的边界内或边界处。第四个规则,归巢意味着组中的任何代理都可以达到全局最优。

    在PSO模型的发展过程中,Kennedy和Eberhart提出了五个判断一组代理是否是群体的基本原则:

    1. 就近原则:代理群体应该能够进行简单的空间和时间计算;

    2. 质量原则:代理群体能够对环境中的质量因素作出反应;

    3. 多响应原则:代理群体不应在过于狭窄的通道从事活动;

    4. 稳定性原则:代理群体不能每次环境变化时就改变其行为模式;

    5. 适应性原则:计算代价不大时,代理群体可以改变其行为模式。

    2.1.2 粒子群优化过程

    考虑到这五个原则,Kennedy和Eberhart开发了一个用于函数优化的PSO模型。在粒子群算法中,采用随机搜索的方法,利用群体智能进行求解。换句话说,粒子群算法是一种群智能搜索算法。这个搜索是由一组随机生成的可能解来完成的。这种可能解的集合称为群,每个可能解都称为粒子。

    在粒子群优化算法中,粒子的搜索受到两种学习方式的影响。每一个粒子都在向其他粒子学习,同时也在运动过程中学习自己的经验。向他人学习可以称为社会学习,而从自身经验中学习可以称为认知学习。由于社会学习的结果,粒子在它的记忆中存储了群中所有粒子访问的最佳解,我们称之为gbest。通过认知学习,粒子在它的记忆中储存了迄今为止它自己访问过的最佳解,称为pbest。

    任何粒子的方向和大小的变化都是由一个叫做速度的因素决定的,速度是位置相对于时间的变化率。对于PSO,迭代的是时间。这样,对于粒子群算法,速度可以定义为位置相对于迭代的变化率。由于迭代计数器单位增加,速度v的维数与位置x相同。

    对于D维搜索空间,在时间步t下群体中的第ith个粒子由D维向量x i t = ( x i 1 t , ⋯   , x i D t ) T x_i^t = {(x_{i1}^t, \cdots ,x_{iD}^t)^T}xit​=(xi1t​,⋯,xiDt​)T来表示,其速度由另一个D维向量v i t = ( v i 1 t , ⋯   , v i D t ) T v_i^t = {(v_{i1}^t, \cdots ,v_{iD}^t)^T}vit​=(vi1t​,⋯,viDt​)T表示。第ith个粒子访问过的最优解位置用p i t = ( p i 1 t , ⋯   , p i D t ) T p_i^t = {\left( {p_{i1}^t, \cdots ,p_{iD}^t} \right)^T}pit​=(pi1t​,⋯,piDt​)T表示,群体中最优粒子的索引为“g”。第ith个粒子的速度和位置分别由下式进行更新:

    v i d t + 1 = v i d t + c 1 r 1 ( p i d t − x i d t ) + c 2 r 2 ( p g d t − x i d t ) (1) v_{id}^{t + 1} = v_{id}^t + {c_1}{r_1}\left( {p_{id}^t - x_{id}^t} \right) + {c_2}{r_2}\left( {p_{gd}^t - x_{id}^t} \right)\tag 1vidt+1​=vidt​+c1​r1​(pidt​−xidt​)+c2​r2​(pgdt​−xidt​)(1)

    x i d t + 1 = x i d t + v i d t + 1 (2) x_{id}^{t + 1} = x_{id}^t + v_{id}^{t + 1}\tag 2xidt+1​=xidt​+vidt+1​(2)

    其中d=1,2,…,D为维度,i=1,2,…,S为粒子索引,S是群体大小。c1和c2为常数,分别称为认知和社交缩放参数,或简单地称为加速系数。r1和r2是满足均匀分布[0,1]之间的随机数。上面两个式子均是对每个粒子的每个维度进行单独更新,问题空间中不同维度之间唯一的联系是通过目标函数引入的,也就是当前所找到的最好位置gbest和pbest[3]。PSO的算法流程如下:

     

    2.1.3 解读更新等式

    速度更新等式(1)的右侧包括三部分3:

    1. 前一时间的速度v,可以认为是一动量项,用于存储之前的运动方向,其目的是防止粒子剧烈地改变方向。

    2. 第二项是认知或自我部分,通过这一项,粒子的当前位置会向其自己的最好位置移动,这样在整个搜索过程中,粒子会记住自己的最佳位置,从而避免自己四处游荡。这里需要注意的是,pidt-xidt是一个方向从xidt到pidt的向量,从而将当前位置向粒子的最佳位置吸引,两者的顺序不能改变,否则当前位置会远离最佳位置。

    3. 第三项是社交部分,负责通过群体共享信息。通过该项,粒子向群体中最优的个体移动,即每个个体向群体中的其他个体学习。同样两者应该是pgbt-xidt。

    可以看出,认知尺度参数c1调节的是粒子在其最佳位置方向上的最大步长,而社交尺度参数c2调节的是全局最优粒子方向上的最大步长。图2给出了粒子在二维空间中运动的典型几何图形。

    在这里插入图片描述

    图2 粒子群优化过程中粒子移动的几何说明

    从更新方程可以看出,Kennedy和Eberhart的PSO设计遵循了PSO的五个基本原则。在粒子群优化过程中,在d维空间中对一系列时间步进行计算。在任何时间步,种群都遵循gbest和pbest的指导方向,即种群对质量因素作出反应,从而遵循质量原则。由于速度更新方程中有均布随机数r1和r2,在pbest和gbest之间的当前位置随机分配,这证明了响应原理的多样性。在粒子群优化过程中,只有当粒子群从gbest中接收到较好的信息时,才会发生随机运动,从而证明了粒子群优化过程的稳定性原则。种群在gbest变化时发生变化,因此遵循适应性原则。

    2.2 粒子群优化中的参数

    任何基于种群的算法的收敛速度和寻优能力都受其参数选择的影响。通常,由于这些算法的参数高度依赖于问题参数,因此不可能对这些算法的参数设置给出一般性的建议。但是,已有的理论和/或实验研究,给出了参数值的一般范围。与其他基于种群的搜索算法类似,由于在搜索过程中存在随机因素r1和r2,因此通用PSO的参数调整一直是一项具有挑战性的任务。PSO的基础版本只需要很少的参数。本章只讨论了[4]中介绍的PSO基础版本的参数。

    一个基本的参数是群体规模,它通常是根据问题中决策变量的数量和问题的复杂性经验地设置的。一般建议20-50个粒子。

    另一个参数是缩放因子c1和c2。如前所述,这些参数决定了下一个迭代中粒子的步长。也就是说,c1和c2决定了粒子的速度。在PSO的基础版本中,选择c1=c2=2。在这种情况下,粒子s速度的增加是不受控制的,这有利于更快的收敛速度,但不利于更好地利用搜索空间。如果我们令c1=c2>0,那么粒子会吸引到pbest和gbest的平均值。c1>c2设置有利于多模态问题,而c2>c1有利于单模态问题。在搜索过程中,c1和c2的值越小,粒子轨迹越平滑,而c1和c2的值越大,粒子运动越剧烈,加速度越大。研究人员也提出了自适应加速系数[5]。

    停止准则不仅是粒子群算法的参数,也是任何基于种群的元启发式算法的参数。常用的停止准则通常基于函数评估或迭代的最大次数,该次数与算法所花费的时间成正比。一个更有效的停止准则是基于算法的搜索能力,如果一个算法在一定的迭代次数内没有显著地改进解,那么应该停止搜索。

    2.3 代码

    %%  PSO 三维路径规划
    
    clc,clear , close all
    feature jit off
    %% 模型基本参数
    % 载入地形  矩阵
    filename = 'TestData1.xlsx' ;
    model.x_data  = xlsread(  filename  , 'Xi') ;
    model.y_data = xlsread(filename, 'Yi') ;
    model.z_data  = xlsread( filename , 'Zi') ;
    
    model.x_grid =  model.x_data(1,:) ;
    model.y_grid =model.y_data(:, 1) ;
    
    model.xs =  10  ;  %起点   相关信息 
    model.ys = 90  ;
    model.zs  =   interp2(  model.x_data ,  model.y_data,   model.z_data   ,  ...
        model.xs ,     model.ys   ,'linear' ) ;  %  高度为插值得到
    
    
    model.xt  =  150 ; % 终点 相关信息
    model.yt  = 40 ;
    model.zt = interp2(  model.x_data ,  model.y_data, model.z_data   ,  ...
        model.xt  ,    model.yt  ,  'linear');  %  高度为插值得到
    
    model.n=   5  ;  %  粗略导航点设置
    model.nn=  80 ;  %  插值法获得的导航点总数
    model.Safeh = 0.01 ;  %  与障碍物的最低飞行高度   
    
    % 导航点   边界值
    model.xmin=  min(  model.x_data(  :  ) ) ;
    model.xmax= max (  model.x_data(  :  ) ) ;
    model.ymin= min(  model.y_data(  :  ) ) ;
    model.ymax= max(  model.y_data(  :  ) ) ;
    model.zmin= min(  model.z_data(  :  ) ) ;
    model.zmax =model.zmin + (1+ 0.1)*( max( model.z_data(:) )-model.zmin ) ;
    
    % 模型的其他参数
    model.nVar  =  3*model.n ; % 编码长度
    model.pf = 10^7 ; % 惩罚系数
    
    %  障碍物 位置坐标及半径
    model.Barrier =  [10,60 , 8 ;
       
        100, 40,  15 ] ;
    model.Num_Barrier  =  size(model.Barrier , 1 ); %  障碍物的数目
    
    model.weight1 = 0.5; % 权重1 飞行线路长度权重
    model.weight2 = 0.3; % 权重2  飞行高度相关权重
    model.weight3 = 0.2; % 权重3  Jsmooth  指标权重
    
    %%  算法参数设置
    param.MaxIt =  400;          %    迭代次数
    param.nPop= 20;           %  种群数目
    param.w=1;                %   权重
    param.wdamp=0.99;         %    退化率
    param.c1=1.5;             % Personal Learning Coefficient
    param.c2=2 ;             % Global Learning Coefficient
    
    % 局部搜索部分参数
    param.MaxSubIt= 0;    % Maximum Number of Sub-iterations ( 内循环迭代次数  )
    param.T =  25;  %
    param.alpha1=0.99;     % Temp. Reduction Rate
    
    param.ShowIteration = 50; % 每过  多少次迭代显示一次图
    %%  运行算法
    CostFunction=@(x) MyCost(x,model);    %   设置目标函数
    [ GlobalBest  , BestCost ] =  pso( param   , model , CostFunction ) ;
    

    完整代码或代写添加QQ1575304183

    参考文献

    1. O. Wilson, E., Sociobiology: The New Synthesis. 1976.

    2. J Matari’c, M. and A. Brooks, Interaction and Intelligent Behavior. 1999.

    3. Trelea, I.C., The particle swarm optimization algorithm: convergence
      analysis and parameter selection.
       Information Processing Letters, 2003.
      85(6): p. 317-325.

    4. Kennedy, J. and R. Eberhart. Particle swarm optimization. in Proceedings
      of ICNN’95 - International Conference on Neural Networks
      . 1995.

    5. Zhan, Z., et al. Adaptive control of acceleration coefficients for particle
      swarm optimization based on clustering analysis
      . in 2007 IEEE Congress on
      Evolutionary Computation
      . 2007.

    展开全文
  • 蚁群算法实现三维路径规划Matlab源码 内有算法论文
  • 通过进行三维环境建模,设置可通行区域与禁飞区域,在利用蚁群算法规划无人机的飞行路径,实现三维环境下的路径规划
  • 一、简介 1、狼群算法中的狼种类分为以下几种: 头狼、探狼、猛狼。 2、猎物分配规则:论功行赏,先强后弱。 3、狼群算法的主体构成:探狼游走、... end end 、运行结果 四、备注 完整代码或者代写添加QQ2449341593。
  • A算法是一种典型的启发式搜索算法,建立在Dijkstra算法的基础之上,广泛应用于游戏地图、现实世界中,用来寻找两点之间的最短路径。A算法最主要的是维护了一个启发式估价函数,如式(1)所示。 f(n)=g(n)+h(n)(1) 其中...
  • 首先以一个问题为例引入今天所讲的三维路径规划,在21 km * 21 km的一片海域中搜索从起点到终点,并且避开所有障碍物的路径。起点坐标为(1,10,800),终点坐标为(21,8,1200),示意图如下所示。 面对这样一个...
  • [MCM] 基于蚁群算法的三维路径规划

    千次阅读 2018-09-01 12:45:00
    %% 该函数用于演示基于蚁群算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 HeightData = [2000 1400 800 650 500 750 1000 950 900 800 700 900 1100 1050 1000 1150 1300 1250 1200 1350 ...
  • 一、简介 蚁群算法,也是优化算法当中的一种。蚁群算法擅长解决组合优化问题。蚁群算法能够有效的解决著名的旅行商问题(TSP),不止...其实,蚂蚁的视力并不是很好,但是他们又是凭借什么区寻找到距离食物的最短路径
  • 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。遗传算法在模式...
  • 本程序基于MATLAB语言,主要实现的是路径规划的问题,实现三维环境下对运动路径的最优规划。
  • 我是在三维网格地图中实现的路径搜索,用的点而不是边来标记信息素的,主要是觉得边要麻烦一些,感兴趣的可以自己实现边标记信息素。蚂蚁在三维地图中走,每次可以上下,左右,斜着走,且都算作等效的一步距离。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 563
精华内容 225
关键字:

三维路径规划