一、无人机简介

0 引言
随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化、完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下救援的白鲨MIX水下无人机等,决定飞行器性能主要是内部的飞控系统和外部的路径规划问题。就路径问题而言,在具体实施任务时仅靠操作员手中的遥控器控制无人飞行器执行相应的工作,可能会对操作员心理以及技术提出极高的要求,为了避免个人操作失误,进而造成飞行器损坏的危险,一种解决问题的方法就是对飞行器进行航迹规划。
飞行器的测量精度,航迹路径的合理规划,飞行器工作时的稳定性、安全性等这些变化对飞行器的综合控制系统要求越来越高。无人机航路规划是为了保证无人机完成特定的飞行任务,并且能够在完成任务的过程中躲避各种障碍、威胁区域而设计出最优航迹路线的问题。

1 常见的航迹规划算法

图1 常见路径规划算法
文中主要对无人机巡航阶段的航迹规划进行研究,假设无人机在飞行中维持高度与速度不变,那么航迹规划成为一个二维平面的规划问题。在航迹规划算法中,A算法计算简单,容易实现。在改进A算法基础上,提出一种新的、易于理解的改进A算法的无人机航迹规划方法。传统A算法将规划区域栅格化,节点扩展只限于栅格线的交叉点,在栅格线的交叉点与交叉点之间往往存在一定角度的两个运动方向。将存在角度的两段路径无限放大、细化,然后分别用两段上的相应路径规划点作为切点,找到相对应的组成内切圆的圆心,然后作弧,并求出相对应的两切点之间的弧所对应的圆心角,根据下式计算出弧线的长度

式中:R———内切圆的半径;
α———切点之间弧线对应的圆心角。

二、蚁群算法简介

1 蚁群算法(ant colony algorithm,ACA)起源和发展历程
Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士论文中首次系统地提出一种基于蚂蚁种群的新型智能优化算法“蚂蚁系统(Ant system,简称AS)”,后来,提出者及许多研究者对该算法作了各种改进,将其应用于更为广泛的领域,如图着色问题、二次分配问题、工件排序问题、车辆路径问题、车间作业调度问题、网络路由问题、大规模集成电路设计等。近些年来,M.Dorigo等人把蚂蚁算法进一步发展成一种通用的优化技术“蚁群优化(Ant Colony Optimization,简称ACO)”,并将所有符合ACO框架的算法称为“蚁群优化算法(ACO algorithm)”。


具体来说,各个蚂蚁在没有事先告知食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种挥发性分泌物pheromone (称为信息素,该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近)信息素能够让其他蚂蚁感知从而起到一个引导的作用。通常多个路径上均有信息素时,蚂蚁会优先选择信息素浓度高的路径,从而使浓度高的路径信息素浓度更高,形成一个正反馈。有些蚂蚁并没有像其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果另开辟的道路比原来的其他道路更短,那么,渐渐地,更多的蚂蚁被吸引到这条较短的路上来。最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。最终,信息素浓度最高的路径即是最终被蚂蚁选中的最优路径。
与其他算法相比,蚁群算法是一种比较年轻的算法,具有分布式计算、无中心控制、个体之间异步间接通信等特点,并且易于与其他优化算法相结合,经过不少仁人志士的不断探索,到今天已经发展出了各式各样的改进蚁群算法,不过蚁群算法的原理仍是主干。

2 蚁群算法的求解原理
基于上述对蚁群觅食行为的描述,该算法主要对觅食行为进行以下几个方面模拟:
(1)模拟的图场景中包含了两种信息素,一种表示家,一种表示食物的地点,并且这两种信息素都在以一定的速率进行挥发。
(2)每个蚂蚁只能感知它周围的小部分地方的信息。蚂蚁在寻找食物的时候,如果在感知范围内,就可以直接过去,如果不在感知范围内,就要朝着信息素多的地方走,蚂蚁可以有一个小概率不往信息素多的地方走,而另辟蹊径,这个小概率事件很重要,代表了一种找路的创新,对于找到更优的解很重要。
(3)蚂蚁回窝的规则与找食物的规则相同。
(4)蚂蚁在移动时候首先会根据信息素的指引,如果没有信息素的指引,会按照自己的移动方向惯性走下去,但也有一定的机率改变方向,蚂蚁还可以记住已经走过的路,避免重复走一个地方。
(5)蚂蚁在找到食物时留下的信息素最多,然后距离食物越远的地方留下的信息素越少。找到窝的信息素留下的量的规则跟食物相同。蚁群算法有以下几个特点:正反馈算法、并发性算法、较强的鲁棒性、概率型全局搜索、不依赖严格的数学性质、搜索时间长,易出现停止现象。
蚂蚁转移概率公式:

公式中:是蚂蚁k从城市i转移到j的概率;α,β分别为信息素和启发式因子的相对重要程度;为边(i,j)上的信息素量;为启发式因子;为蚂蚁k下步允许选择的城市。上述公式即为蚂蚁系统中的信息素更新公式,是边(i,j)上的信息素量;ρ是信息素蒸发系数,0<ρ<1;为第k只蚂蚁在本次迭代中留在边(i,j)上的信息素量;Q为一正常系数;为第k只蚂蚁在本次周游中的路径长度。
在蚂蚁系统中,信息素更新公式为:

3 蚁群算法的求解步骤:
(1)初始化参数在计算之初,需要对相关参数进行初始化,如蚁群规模(蚂蚁数量)m、信息素重要程度因子α、启发函数重要程度因子β、信息素会发银子ρ、信息素释放总量Q、最大迭代次数iter_max、迭代次数初值iter=1。
(2)构建解空间将各个蚂蚁随机地置于不同的出发点,对每个蚂蚁k(k=1,2,3…m),按照(2-1)计算其下一个待访问城市,直到所有蚂蚁访问完所有城市。
(3)更新信息苏计算每个蚂蚁经过路径长度Lk(k=1,2,…,m),记录当前迭代次数中的最优解(最短路径)。同时,根据式(2-2)和(2-3)对各个城市连接路径上信息素浓度进行更新。
(4) 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。
(5)判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。3. 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。

三、部分源代码

t=[4 5;16 25.8;10 45;20 55;30 65;35 55;29 31;37 26;47 27;50 51.3;51 17;14 7;40 10;26.7 22.5;21 39;38 42;5 26;28 53;20 13;10 60;26 41;54 38;7 58;12 36;30 2] %24个点,第25个点事origin
save t.mat t
load t.mat
%%计算城市间相互距离
%n=size(t,1);
n=6;
D=zeros(25,25);
for i=1:25for j=1:25if i~=jD(i,j)=sqrt(sum((t(i,:)-t(j,:)).^2));elseD(i,j)=1e-4;endend
end
%%初始化参数
m=4;         %蚂蚁个数 【原来是1只蚂蚁要走过24个点,现在是4只蚂蚁总共走过24个点】【5组蚂蚁,每组里面4只,每只走过6个点】
alpha=1;      %信息素重要程度因子
beta=5;       %启发函数重要程度因子
rho=0.1;      %信息素挥发因子
Q=50;          %总量
eta=1./D;     %启发函数
tau=ones(25,25);%信息素矩阵
table=zeros(m,n);%路径记录表
iter=1;       %迭代次数初始值
iter_max=400;  %迭代次数最大值
route_best=zeros((4*iter_max),n); %每次迭代最佳路径
length_best=zeros(iter_max,1);%每次迭代最佳路径长度(应该是一次比一次小)
length_ave=zeros(iter_max,1); %每次迭代路径平均长度%%迭代寻找最佳路径
while iter<=iter_max    city_index=1:24;       %城市来标号wholetable=[];s=1;while s<=10start=zeros(4,1);temp=randperm(24);for i=1:4start(i)=temp(i);endtable(:,1)=start;for j=2:nfor i=1:mtabu=table(1:((j-1)*4+i-1));  %把第i只蚂蚁之前所走过的所有城市放入禁忌表中 【把table里面从第一个数到j-1全放到禁忌表中】allow_index=~ismember(city_index,tabu);  %【走过的变成0,能走的为1】【若tabu=(1 4)则allow_index=(0 1 1 0 1 1 1...)】【注意:allow_index与city_index同维】allow=city_index(allow_index);  %把还能走的序号摘出来了(待访问的城市集合)P=allow;%计算城市的转移概率for k=1:max(size(allow))P(k)=(tau(tabu(end-3),allow(k))^alpha)*(eta(tabu(end-3),allow(k))^beta);endP=P/sum(P);%轮盘赌法选择下一个城市pc=cumsum(P);  % (p1 p1+p2 p1+p2+p3 p1+p2+p3+p4 ....)【p1<->allow(1)  p2<->allow(2) ...】target_index=find(pc>=rand);  %选中那个概率较大的选中的点,返回的是allow数组中的序号target=allow(target_index(1));  %这次返回的是allow数组中城市的真正序号table(i,j)=target;  %把选好这个点放到路径表里面endendwholetable=[wholetable;table]; table=zeros(m,n); %下面要做的是把table表清零然后重新走s=s+1;                %第5次完了以后table里第一列有数,所以下次iter循环的时候应该清零,其实不清零也行,后面有再给table第一列覆盖数end%吧wholetable总共40行,先每行进行2-opt之后,再更新信息素s1=wholetable;wholetable2=wholetable;for tt=1:40% s1(tt,:)=wholetable(tt,:);l1(tt)=0;for e=1:5l1(tt)=l1(tt)+D(wholetable(tt,e),wholetable(tt,(e+1)));endl1(tt)=l1(tt)+D(wholetable(tt,1),25)+D(wholetable(tt,6),25); %l1是2opt之前每行的长度% wholetable2(tt,:)=wholetable(tt,:);for i=1:5for j=1:6if j>ifor k=0:fix((j-i)/2)u=s1(tt,(i+k));s1(tt,(i+k))=s1(tt,(j-k));s1(tt,(j-k))=u;endl0=0;for e=1:5l0=l0+D(s1(tt,e),s1(tt,(e+1)));endl0=l0+D(s1(tt,1),25)+D(s1(tt,6),25); %l0是每次之后每行的长度if l0<=l1(tt)l1(tt)=l0;wholetable2(tt,:)=s1(tt,:);elsel1(tt)=l1(tt);wholetable2(tt,:)=wholetable2(tt,:);ends1(tt,:)=wholetable(tt,:);endendendend  %wholetable2(tt,:)里面放的都是改过的最短的路径,共40行;l1(tt)放的是改过后最短的长度,共40行%%开始计算路径啦Length_=[];h=0;while h<=37Length1=zeros(4,1);for i=1:4route1=wholetable2((i+h),:);  %【把第i只蚂蚁走过的路径给route】【route里就是m只蚂蚁每只走过的序列了】for j=1:5Length1(i)=Length1(i)+D(route1(j),route1(j+1));endLength1(i)=Length1(i)+D(route1(6),25)+D(route1(1),25);endlength1=0;for r=1:4length1=length1+Length1(r);endLength_=[Length_;length1];  %Length_是一个10行的纵矩阵h=h+4;end%%计算最短路径及平均距离if iter==1[min_length,min_index]=min(Length_);length_best(iter)=min_length;length_ave(iter)=mean(Length_);route_best(1:4,:)=wholetable2((4*min_index-3):(4*min_index),:); %route_best(1:4,:)是本次10只蚂蚁中总和最短的4条路径else[min_length,min_index]=min(Length_);length_best(iter)=min(min_length,length_best(iter-1));length_ave(iter)=mean(Length_);if length_best(iter)==min_lengthroute_best((4*iter-3):(4*iter),:)=wholetable2((4*min_index-3):(4*min_index),:);elseroute_best((4*iter-3):(4*iter),:)=route_best((4*iter-7):(4*iter-4),:);endend  

``四、运行结果



五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]巫茜,罗金彪,顾晓群,曾青.基于改进PSO的无人机三维航迹规划优化算法[J].兵器装备工程学报. 2021,42(08)
[4]邓叶,姜香菊.基于改进人工势场法的四旋翼无人机航迹规划算法[J].传感器与微系统. 2021,40(07)
[5]马云红,张恒,齐乐融,贺建良.基于改进A*算法的三维无人机路径规划[J].电光与控制. 2019,26(10)
[6]焦阳.基于改进蚁群算法的无人机三维路径规划研究[J].舰船电子工程. 2019,39(03)

【协同任务】基于matlab蚁群算法多组群UAV协同任务路径规划【含Matlab源码 1578期】相关推荐

  1. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  2. java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟

    基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现,文章末尾附有本毕业设计的 ...

  3. 【数字信号去噪】基于matlab粒子群算法优化VMD分解分量选择数字信号降噪【含Matlab源码 1979期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号去噪]基于matlab粒子群算法优化VMD分解分量选择数字信号降噪[含Matlab源码 1979期] 点击上面蓝色字体,直接付费 ...

  4. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  5. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  6. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  7. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  8. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  9. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  10. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

最新文章

  1. 白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
  2. 平衡的阵容(洛谷-P2880)
  3. 自学前端,一天学4个小时左右,能到什么水平?
  4. win7 mysql 未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  5. Java:详解List集合的排序功能
  6. 2020CVPR对抗样本相关论文整理(无开源代码)
  7. [055] SSL 3.0曝出Poodle漏洞的解决方案-----开发者篇
  8. python数据采集6-读取文档
  9. 使用批处理进行简单U盘杀毒 - TEST
  10. firnbsp;提交的版本的iphone4amp;nbs…
  11. 打造数字生活新体验,华为终端云服务在盘算什么?
  12. [奥塔在线]压测大师养成之五:Centos下Jmeter安装与部署
  13. 树莓派利用3.5mm接口接扬声器播放语音提示
  14. 科研实习 | 北京大学可视化与可视分析实验室招收暑期实习生和推免研究生
  15. 「缠师课后回复精选」第11课:不会吻,无以高潮!
  16. 你想知道的DCMM认证评估,最全回答来了
  17. 【测试】用例篇2(黑盒测试的测试用例)
  18. java机动车实验代码要加包吗_机动车整车出厂合格证管理信息系统二次开发套件SDK和Demo----javai程序...
  19. 一文搞懂百度强推的Redis天花板笔记,原来数据库是这样理解的
  20. unset 函数php,PHP unset()函数

热门文章

  1. jenkins com.jcraft.jsch.JSchException: Auth cancel
  2. 从安装node js到构建一个vue并启动它
  3. bzoj1854 [Scoi2010]游戏【构图 并查集】
  4. python实现推荐系统(一)
  5. MyEclipse修改项目名称
  6. 简单的PHP数据后台实现用户登录
  7. Extjs GridPanel用法详解
  8. Eigen学习笔记1
  9. OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
  10. 2021-10-13