蚁群算法的三维路径规划【Matlab】

这篇具有很好参考价值的文章主要介绍了蚁群算法的三维路径规划【Matlab】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章主要记录了蚁群算法在三维路径规划中实现的过程


一、蚁群算法简介

1 引言
在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注,学者们通过对简单生物体的群体行为进行模拟,进而提出了群智能算法。其中, 模拟蚁群觅食过程的蚁群优化算法(Ant Colony Optimization, ACO) 和模拟鸟群运动方式的粒子群算法(ParticleS warm Optimization,PSO) 是两种最主要的群智能算法。
蚁群算法是一种源于大自然生物世界的新的仿生进化算法,由意大利学者M.Dorigo,V.Mani ezzo和A.Color ni等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法。蚂蚁有能力在没有任何提示的情形下找到从巢穴到食物源的最短路径,并且能随环境的变化,适应性地搜索新的路径,产生新的选择。其根本原因是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物――信息素2,随着时间的推移该物质会逐渐挥发,后来的蚂蚁选择该路径的概率与当时这条路径上信息素的强度成正比。当一条路径上通过的蚂蚁越来越时,其留下的信息素也越来越多,后来蚂蚁选择该路径的概率也就越高,从而更增加了该路径上的信息素强度。而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。通过这种正反馈机制,蚂蚁最终可以发现最短路径。

2 基本思想

蚁群算法在三维路径规划中实际情况是对每个方向的信息素进行探索,选择最合适的方向继续前进并对该方向上的信息素进行更新,蚂蚁的信息素随时间衰减,精英蚂蚁的信息素正反馈增强,让之后蚁群更好的选择最优的路线,最终可以得到一条三维地形中两点之间的最短路径。

二、算法精讲

1 实现过程

因为要寻找三维中两点之间的最短路径,为了加快收敛速度,添加一个初始化蚁群信息素的过程,在进行信息素初始化的时刻为不同的点赋予了不同的选择概率。即可以建立一个以终点为中心的概率球,直线距离终点越远的点其相应的信息素浓度越低,其相应的选择该点的概率越小。初始化信息素浓度的公式(1)如下所示:
蚁群算法的三维路径规划【Matlab】

式中, pheromone(goal)为飞行环境中goal位置的信息素浓度,a表示控制参数;Distanced表两点之间的欧式距离;goal_end表示终点的位置。

通过上述的公式就可以生成一个以终点为中心,沿四周概率不断降低的一个概率球。同时依据蚁群在搜索路径的过程中,需要对周围的信息素进行嗅探并且有一定倾向选择信息素浓度较高的位置,这里我采用的是设定一个启发值函数对周围上下左右等26个点进行选择,启发值越高表示蚂蚁下一个点的位置更倾向与这个位置,这就模拟蚂蚁向信息素浓度高方向前进下的倾向,同时信息素浓度随时间而挥发。启发值函数和信息素浓度挥发如公式(2),(3)所示:
蚁群算法的三维路径规划【Matlab】

式中, QFZ 为蚁群在一次行走周围 26 个点中的启发值,S 表示这 26 个点可否到达,到达 S=1,
否 S=0;M 为加额外参数之后的两点之间的欧式距离;D 为加额外参数之后 26 个点的高度

蚁群算法的三维路径规划【Matlab】

式中, pheromone(goal)为飞行环境中goal位置的信息素浓度;M为加额外参数之后的两点之间的欧式距离;decr表示信息素浓度挥发因子。

对信息素浓度进行增强的公式如4所示:
蚁群算法的三维路径规划【Matlab】

式中, pheromone(goal)为飞行环境中goal位置的信息素浓度;rou为适应度对信息素更新的影响;fitness为通过函数计算的路径适应度。

2 算法流程图

蚁群算法的三维路径规划【Matlab】

三、部分代码(Matlab)

计算两点之间的欧式距离

%计算两点之间的欧式距离
function dist=distance(x1,y1,z1,x2,y2,z2)
dist=sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2);

初始化信息素函数

function pheromone=initial_pheromone(pheromone,point_end)
%% 
%point_end   input       终点
%pheromone   output      信息素

for x=1:200
    for y=1:200
        for z=1:200
            pheromone(x,y,z)=5000/distance(x,y,z,point_end(1),point_end(2),point_end(3));
        end
    end
end

启发值函数文章来源地址https://www.toymoban.com/news/detail-420465.html

function qfz=CacuQfz(point_next,point_now,point_end,mapdata)
%% 该函数用于计算各点的启发值(越大越好)
% point_next    input    下个点坐标
% point_now     input    当前点坐标
% point_end     input    终点坐标
% mapdata       input    地图高度
% qfz           output    启发值
%% 判断下个点是否可达,不可达为0
if mapdata(point_next(2)

到了这里,关于蚁群算法的三维路径规划【Matlab】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包