声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
结果展示
原理讲解
一、路径长度成本 F1
二、安全性与可行性成本 F2
三、飞行高度成本 F3
四、路径平滑成本 F4
五、总成本 F4
参考文献
部分代码展示
完整代码
大家在改进智能优化算法的时候,传统的工程应用已经吸引不了审稿人的注意,非常容易被拒稿!正好前几天小伙伴也让我多做一些应用,那么今天为大家带来一期冠豪猪优化算法CPO优化无人机集群三维路径规划代码,适合作为创新点!
目前,大多数有关无人机三维路径规划的文章都还是单无人机的,翻来覆去还是那几张图,没有什么新意,本期采用无人机集群进行三维路径规划。相比于单无人机或多无人机,无人机集群要求无人机的数量在5个及以上,相应地,求解难度更大,也就更具有新意、更受审稿人的喜爱!
学会这一篇后,大家也可以自行替换成其他的优化算法!
结果展示
在本代码中,采用了五个无人机作为无人机集群,即采用冠豪猪CPO算法同时规划这五个无人机的路径。
无人机集群的目标函数即为总成本,总成本为5个无人机成本之和,每个无人机的总成本由路径成本、威胁成本、高度成本和转角成本四个部分构成。
这里以种群数量200,迭代1000次为例进行展示:
无人机集群三维路径图:
无人机集群二维路径图:
迭代曲线图:
各个无人机的总成本:
各个无人机单项成本的直方图显示(横轴为各无人机):
各个无人机单项成本的堆叠直方图显示(横轴为各无人机):
各个无人机单项成本的直方图显示(横轴为各成本):
可以看到,能出的图非常多,也非常美观,大家选择自己喜爱的图放到论文里即可!
当然,这里我因为时间关系只运行了1000次,如果你的时间充足或者你认为没有运行出自己理想的效果,可以运行2000次或5000次来进一步寻优,可根据自己的需求进行调整!
以上所有图片,作者都已精心整理过代码,都可以一键运行main直接出图!
适用平台:建议Matlab版本在2020及以上(防止乱码),没有的文件夹里已经免费提供安装包,直接下载即可!
原理讲解
无人机集群问题实际上是单无人机的扩展,即对每个无人机采用相同的约束条件,最后使所有无人机的总成本最小进行优化。因此,单个无人机的建模方法如下:
一、路径长度成本 F1
路径长度成本由相邻两个节点之间的欧氏距离和构成,计算公式如式(19)所示。
式(19)中Pij与Pi(j+1)分别为相邻两个节点,n个节点的n-1个线段之和为路径长度成本。
二、安全性与可行性成本 F2
无人机飞行中需要避开地面上高耸的障碍物, 路径安全性与可行性成本 F2 通过式(20)、(21)计算。图 15 中展示了安全约束条件。
式(21)和图15中可见,当距离dk小于危险区域半径Rk+D时,F2成本无限大,即:无人机必须远离危险区飞行。当距离dk在安全缓冲区内,无人机离障碍物越近成本越高。当距离dk大于Rk+D+S,安全成本为0,此时无人机路径最为理想。
三、飞行高度成本 F3
受到自然条件、应用场景的限制,无人机飞行高度受到约束。例如:测量和巡检任务中因摄像机、巡检设备特定的分辨率和视野要求,限制飞行海拔高度。如图16所示,无人机飞行中最小高度为hmin、最大高度为hmax。与航路点Pij相关联的高度成本为:
式(22)中hij表示无人机相对于地面的飞行高度,从图16中可看出,Hij保持了平均值高度,并惩罚超出范围的值。汇总所有Hij航路点给出了高度成本,如式(23)所示。
四、路径平滑成本 F4
为保证无人机平稳飞行,其拐弯角度和爬坡角度受到限制。
图 17 中投影向量通过如下公式计算:
拐弯角度计算公式:
式(25)中P’ijP’i,j+1为当前路径,P’ij+1P’i,j+2为下一路径,路径PijPi,j+1和Pij+1Pi,j+2向XOY面投影结果为P’ijP’i,j+1和P’ij+1P’i,j+2。
爬坡角度计算公式为:
式(26)中Zij为当前路径i上节点j的z方向坐标,Zi,j+1为路径i上的下一节点j+1的z方向坐标。
平滑成本的计算公式为:
式(27)中a1和a2分别是转弯角和爬坡角的惩罚系数。
五、总成本 F4
总成本由最优路径成本F1,安全性与可行性成本F2、飞行高度成本F3和路径平滑成本F4的线性加权所得。其中b为加权系数。
式(28)中权重b取值参考其他文献中的做法,取值为b1=5、b2=1、b3=10、b4=1。
参考文献
[1]张庭溢,汪弘健.路灯人影和离家出走改进的黑猩猩优化算法[J/OL].计算机科学与探索:1-21.
部分代码展示
close all
clear
clc
dbstop if all error
global model
model = CreateModel(); % 创建模型
F='F1';
[Xmin,Xmax,dim,fobj] = fun_info(F); % 获取函数信息
pop=200; % 种群大小(可以自己修改)
maxgen=1000; % 最大迭代次数(可以自己修改)
[fMin,bestX,ConvergenceCurve] = CPO(pop, maxgen,Xmin,Xmax,dim,fobj);
%% 计算无人机的相关信息
N=length(bestX)/(3*model.n); % 无人机的数量
St=1;
for i=1:N % 计算每个无人机的适应度值
Et=St+3*model.n-1;
Xbest=bestX(St:Et);
BestPosition(i,:) = SphericalToCart(Xbest); % 计算航迹坐标
BestFit(i)=MyCost(Xbest,1); % 计算每个无人机的适应度值
UAVfit(i,:)=MyCost(Xbest,2);
St=Et+1;
end
%% 保存结果
save BestPosition BestPosition % 每个无人机的航迹坐标
save BestFit BestFit % 每个无人机的总成本
save UAVfit UAVfit % 每个无人机的四个成本
save ConvergenceCurve ConvergenceCurve % 无人机集群的成本随迭代次数的变化
%% 画图
ColStr={'b-.','r--','c-.','m--','g-.'}; % 颜色
LegendStr={'UAV1','UAV2','UAV3','UAV4','UAV5'};
完整代码
点击下方小卡片,后台回复关键词:
无人机集群
其他更多需求或想要的代码均可点击下方小卡片,再后台私信,看到后会秒回~
更多代码链接:更多代码链接