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

本文详细介绍了蚁群算法在三维路径规划中的应用,包括算法的基本思想、实现过程和Matlab代码片段。通过信息素的挥发和增强机制,蚂蚁能够找到两点间的最短路径。给出了初始化信息素、启发值函数和路径搜索的算法细节,并展示了算法的运行结果。
摘要由CSDN通过智能技术生成


前言

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


一、蚁群算法简介

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

2 基本思想

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

二、算法精讲

1 实现过程

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

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

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

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

在这里插入图片描述

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

对信息素浓度进行增强的公式如4所示:
请添加图片描述

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

2 算法流程图

在这里插入图片描述

三、部分代码(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

启发值函数

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),point_next(1))<point_next<
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值