声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
目前,大多数有关无人机三维路径规划的文章都还是单无人机的,缺少新意,且大多利用单目标优化算法进行求解,缺少新意,难以获得审稿人的青睐。
今天,为大家带来一期多目标水母算法MOJS求解多无人机协同路径规划代码。多无人机协同路径规划问题主要涉及多个无人机在共享空域中同时执行任务时的路径优化,以实现任务的高效完成,减少时间、能量消耗,并确保安全。
注意,本期代码仅针对两个无人机进行协同路径规划的代码与讲解,目标函数1为第一个无人机的总成本,目标函数2为第二个无人机的总成本,自变量即为无人机起始点间的各点坐标~
您只需做的工作:一键运行main文件,即可出图,非常适合新手小白!
原理简介
一、无人机协同路径规划原理
在本代码中,多无人机协同问题实际上是对单无人机的扩展,即对每个无人机采用相同的约束条件,最后利用多目标水母算法求解两个无人机的总成本的帕累托解。为了防止多无人机相互冲突的问题,这里采用设置不同的起点位置与终点位置。其中,单个无人机的建模方法如下:
(1)路径长度成本 F1
路径长度成本由相邻两个节点之间的欧氏距离和构成,计算公式如式(19)所示。
式(19)中Pij与Pi(j+1)分别为相邻两个节点,n个节点的n-1个线段之和为路径长度成本。
(2)安全性与可行性成本 F2
无人机飞行中需要避开地面上高耸的障碍物, 路径安全性与可行性成本 F2 通过式(20)、(21)计算。图 15 中展示了安全约束条件。
式(21)和图15中可见,当距离dk小于危险区域半径Rk+D时,F2成本无限大,即:无人机必须远离危险区飞行。当距离dk在安全缓冲区内,无人机离障碍物越近成本越高。当距离dk大于Rk+D+S,安全成本为0,此时无人机路径最为理想。
(3)飞行高度成本 F3
受到自然条件、应用场景的限制,无人机飞行高度受到约束。例如:测量和巡检任务中因摄像机、巡检设备特定的分辨率和视野要求,限制飞行海拔高度。如图16所示,无人机飞行中最小高度为hmin、最大高度为hmax。与航路点Pij相关联的高度成本为:
式(22)中hij表示无人机相对于地面的飞行高度,从图16中可看出,Hij保持了平均值高度,并惩罚超出范围的值。汇总所有Hij航路点给出了高度成本,如式(23)所示。
(4)路径平滑成本 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分别是转弯角和爬坡角的惩罚系数。
(5)总成本 F4
总成本由最优路径成本F1,安全性与可行性成本F2、飞行高度成本F3和路径平滑成本F4的线性加权所得。其中b为加权系数。
式(28)中权重b取值参考其他文献中的做法,取值为b1=5、b2=1、b3=10、b4=1。
二、多目标水母算法原理
水母搜索算法(JS, Jellyfish Search) 是一种基于水母群体行为的自然启发式优化算法。
MOJS在传统水母算法的基础上,采用多目标优化框架,通过同时优化多个目标函数来得到Pareto最优解集,发表于SCI一区期刊《Chaos, Solitons & Fractals》上!
你先用,你就是创新!
原文作者在20个多目标数学基准问题上对该算法进行了测试,并与6种知名的元启发式优化算法(MOALO、MODA、MOEA/D、MOGWO、MOPSO和NSGA-II)进行了比较。结果表明,MOJS在测试函数上得到的pareto最优前沿的精度最高!
原理不难理解,这边不过多赘述,感兴趣的小伙伴可以查看下面的流程图或者原文:
[1]Chou J S, Truong D N. Multiobjective optimization inspired by behavior of jellyfish for solving structural design problems[J]. Chaos, Solitons & Fractals, 2020, 135: 109738.
结果展示
首先,说一下实验设置。
在优化算法方面,设置MOJS种群大小为100,存档大小为200,最大迭代次数为500,每个维度的网格数为20,以上参数均可自行修改~
在无人机方面,设置每个无人机起始点间共12个待求点;第一个无人机起始位置为[150,200,150],结束位置为[800,800,150];第一个无人机起始位置为[400,100,150],结束位置为[900,550,150],以上位置也可在CreateModel函数中自行修改~
最后,设置9个柱状障碍物的位置及半径即可~(以下为默认设置,可自行更改):
%% 设置威胁区域为圆柱体,可以根据需要调整
R1 = 60; % 威胁区域1的半径
x1 = 350; y1 = 500; z1 = 100; % 圆柱体中心坐标 (x1, y1, z1)
R2 = 70; % 威胁区域2的半径
x2 = 600; y2 = 200; z2 = 150; % 圆柱体中心坐标 (x2, y2, z2)
R3 = 80; % 威胁区域3的半径
x3 = 500; y3 = 350; z3 = 150; % 圆柱体中心坐标 (x3, y3, z3)
R4 = 70; % 威胁区域4的半径
x4 = 350; y4 = 200; z4 = 150; % 圆柱体中心坐标 (x4, y4, z4)
R5 = 70; % 威胁区域5的半径
x5 = 700; y5 = 550; z5 = 150; % 圆柱体中心坐标 (x5, y5, z5)
R6 = 80; % 威胁区域6的半径
x6 = 650; y6 = 750; z6 = 150; % 圆柱体中心坐标 (x6, y6, z6)
R7 = 70; % 威胁区域7的半径
x7 = 800; y7 = 400; z7 = 150; % 圆柱体中心坐标 (x7, y7, z7)
R8 = 50; % 威胁区域8的半径
x8 = 300; y8 = 350; z8 = 100; % 圆柱体中心坐标 (x8, y8, z8)
R9 = 50; % 威胁区域9的半径
x9 = 500; y9 = 600; z9 = 100; % 圆柱体中心坐标 (x9, y9, z9)
随后一键运行main文件即可出图~
优化后的三维地形图(其中红线为第一个无人机的路线图,紫线为第二个无人机的路径图):
对应的二维平面图:
对应的高度平面图:
对应的帕累托图:
由于帕累托图上的点均可作为最优解,因此本文只选择了其中了一个解作为最优解进行画图,小伙伴们也可以自行选择其他解集~
参考文献
以下仅为原理参考文献,利用本文算法求解无人机模型尚未发表过。
[1]张庭溢,汪弘健.路灯人影和离家出走改进的黑猩猩优化算法[J].计算机科学与探索,2024,18(06):1491-1512.
[2]Chou J S, Truong D N. Multiobjective optimization inspired by behavior of jellyfish for solving structural design problems[J]. Chaos, Solitons & Fractals, 2020, 135: 109738.
[3]Phung M D, Ha Q P. Safety-enhanced UAV path planning with spherical vector-based particle swarm optimization[J]. Applied Soft Computing, 2021, 107: 107376.
部分代码展示
%% 清除环境变量
clear
clc
close all
MultiObj = GetFunInfo(1); % 获取多无人机路径规划的相关信息
MultiObjFnc=MultiObj.name; % 获取问题名称
%% 参数设置
params.Np = 100; % 种群规模
params.Nr = 200; % 存档大小
params.maxiter = 500; % 最大迭代次数
params.ngrid = 20; % 每维度的网格数
%% MOJS算法
ERP = MOJS(params,MultiObj); % 调用MOJS优化算法
Xbest = ERP.pos; % 获取最优位置
Fbest = ERP.pos_fit; % 获取最优适应度
%% 绘制结果图
figure
if(size(Fbest,2)==2) % 如果目标函数为二维
h_rep = plot(Fbest(:,1),Fbest(:,2),'ok','MarkerFaceColor','g'); hold on; % 绘制MOJS的结果
if(isfield(MultiObj,'truePF')) % 如果有真实的Pareto前沿
h_pf = plot(MultiObj.truePF(:,1),MultiObj.truePF(:,2),'.r'); hold on; % 绘制真实的Pareto前沿
legend('MOJS','TruePF'); % 添加图例
else
legend('MOJS');
end
grid on;
xlabel('无人机1目标函数');
ylabel('无人机2目标函数');
end
文件夹内容也非常清晰,并且附赠了上面的参考文献与使用说明,您只需一键运行main即可得到结果展示中的所有图片!
完整代码
如果需要以上完整代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:
无人机02