• 《MATLAB智能算法30个案例》:第24章 基于蚁群算法的三维路径规划算法


    MATLAB智能算法30个案例》:第24章 基于蚁群算法的三维路径规划算法

    1. 前言

    《MATLAB智能算法30个案例分析》是2011年7月1日由北京航空航天大学出版社出版的图书,作者是郁磊、史峰、王辉、胡斐。本书案例是各位作者多年从事算法研究的经验总结。书中所有案例均因国内各大MATLAB技术论坛网友的切身需求而精心设计,其中不少案例所涉及的内容和求解方法在国内现已出版的MATLAB书籍中鲜有介绍。《MATLAB智能算法30个案例分析》采用案例形式,以智能算法为主线,讲解了遗传算法、免疫算法、退火算法、粒子群算法、鱼群算法、蚁群算法和神经网络算法等最常用的智能算法的MATLAB实现。

    本书共给出30个案例,每个案例都是一个使用智能算法解决问题的具体实例,所有案例均由理论讲解、案例背景、MATLAB程序实现和扩展阅读四个部分组成,并配有完整的原创程序,使读者在掌握算法的同时更能快速提高使用算法求解实际问题的能力。《MATLAB智能算法30个案例分析》可作为本科毕业设计、研究生项目设计、博士低年级课题设计参考书籍,同时对广大科研人员也有很高的参考价值。

    《MATLAB智能算法30个案例分析》与《MATLAB 神经网络43个案例分析》一样,都是由北京航空航天大学出版社出版,其中的智能算法应该是属于神经网络兴起之前的智能预测分类算法的热门领域,在数字信号处理,如图像和语音相关方面应用较为广泛。本系列文章结合MATLAB与实际案例进行仿真复现,有不少自己在研究生期间与工作后的学习中有过相关学习应用,这次复现仿真示例进行学习,希望可以温故知新,加强并提升自己在智能算法方面的理解与实践。下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第二十四章基于蚁群算法的三维路径规划算法实例,话不多说,开始!

    2. MATLAB 仿真示例

    打开MATLAB,点击“主页”,点击“打开”,找到示例文件
    在这里插入图片描述
    选中main.m,点击“打开”

    main.m源码如下:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %功能:基于蚁群算法的三维路径规划算法示例
    %环境:Win7,Matlab2015b
    %Modi: C.S
    %时间:2022-07-09
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% 清空环境
    clc
    clear all
    close all
    
    tic
    %% 数据初始化
    %下载数据
    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
    
    %% 最佳路径
    for i=1:21
        a(i,1)=bestpath(i*2-1);
        a(i,2)=bestpath(i*2);
    end
    figure(1)
    x=1:21;
    y=1:21;
    [x1,y1]=meshgrid(x,y);
    mesh(x1,y1,HeightData)
    axis([1,21,1,21,0,2000])
    hold on
    k=1:21;
    plot3(k(1)',a(1,1)',a(1,2)'*200,'--o','LineWidth',2,...
                           'MarkerEdgeColor','k',...
                           'MarkerFaceColor','g',...
                           'MarkerSize',10)
    plot3(k(21)',a(21,1)',a(21,2)'*200,'--o','LineWidth',2,...
                           'MarkerEdgeColor','k',...
                           'MarkerFaceColor','g',...
                           'MarkerSize',10)
                       text(k(1)',a(1,1)',a(1,2)'*200,'S');
    text(k(21)',a(21,1)',a(21,2)'*200,'T');
    xlabel('km','fontsize',12);
    ylabel('km','fontsize',12);
    zlabel('m','fontsize',12);
    title('三维路径规划空间','fontsize',12)
    set(gcf, 'Renderer', 'ZBuffer')
    hold on
    plot3(k',a(:,1)',a(:,2)'*200,'--o')
    
    %% 适应度变化
    figure(2)
    plot(BestFitness)
    title('最佳个体适应度变化趋势')
    xlabel('迭代次数')
    ylabel('适应度值')
    toc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110

    添加完毕,点击“运行”,开始仿真,输出仿真结果如下:
    在这里插入图片描述
    在这里插入图片描述

    3. 小结

    路径规划算法是指在有障碍物的工作环境中寻找一条从起点到终点、无碰撞地绕过所有障碍物的运动路径。路径规划算法较多,大体上可分为全局路径规划算法和局部路径规划算法两大类。上一章为基于蚁群算法的二维路径规划算法的仿真示例,链接见文末。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第二十四章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

    《MATLAB智能算法30个案例》:第23章 基于蚁群算法的二维路径规划算法

  • 相关阅读:
    JAVA面试题JVM篇(二)
    别在被MySQL中count(*)和count(1)的区别文章带偏了,count语句特性
    kafka 文件存储 消息同步机制
    基于动态自适应加权极限RUL 预测(Matlab代码实现)
    半导体聚合物纳米颗粒,PSQPNs-DBCO点击化学, 二苯并环辛炔-PSQPNs
    IIFE立即执行函数表达式使用
    语音播报speechSynthesis最简单的例子(亲测有用)
    基于yolov5的手掌特效app(安卓)
    【错误记录】exe4j 打包程序无法设置 jar 包依赖的问题 ( 将源码 和 依赖库打包到同一个 jar 包中 )
    美团2024届秋招笔试第一场编程【代码】
  • 原文地址:https://blog.csdn.net/sinat_34897952/article/details/125590850