✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
无人机集群协同避障路径规划是一个复杂且具有挑战性的问题,需要考虑多方面的因素,如路径长度、飞行高度、威胁程度和转弯角度等。本文提出了一种基于蜣螂算法(DBO)的多无人机协同集群避障路径规划方法。该方法通过将路径规划问题转化为一个多目标优化问题,并使用DBO算法进行求解。DBO算法是一种基于群体智能的优化算法,具有较好的全局搜索能力和收敛速度。实验结果表明,该方法能够有效地生成满足多成本约束条件的避障路径,并具有较好的鲁棒性和可扩展性。
1. 引言
无人机集群协同技术近年来得到了广泛的研究和应用。在集群协同任务中,无人机需要协同避障以确保安全和高效地完成任务。路径规划是无人机协同避障的关键技术之一。传统的路径规划方法主要考虑路径长度和飞行高度,而忽略了威胁程度和转弯角度等因素。这些因素会影响无人机的安全性、效率和任务执行效果。
本文提出了一种基于蜣螂算法(DBO)的多无人机协同集群避障路径规划方法。该方法将路径规划问题转化为一个多目标优化问题,并使用DBO算法进行求解。DBO算法是一种基于群体智能的优化算法,具有较好的全局搜索能力和收敛速度。实验结果表明,该方法能够有效地生成满足多成本约束条件的避障路径,并具有较好的鲁棒性和可扩展性。
2. 蜣螂算法(DBO)
蜣螂算法(DBO)是一种基于群体智能的优化算法,其灵感来源于蜣螂滚动粪球的行为。在DBO算法中,每个个体代表一个潜在的解决方案,而粪球则代表目标函数值。个体通过滚动粪球来探索搜索空间,并通过与其他个体的信息交换来学习和改进自己的解决方案。
DBO算法的基本步骤如下:
-
初始化种群:随机生成一定数量的个体,每个个体代表一个潜在的解决方案。
-
评估个体:计算每个个体的目标函数值。
-
滚动粪球:每个个体根据自己的目标函数值和周围个体的目标函数值滚动粪球。
-
信息交换:个体之间交换信息,包括自己的粪球位置和周围个体的粪球位置。
-
更新个体:个体根据收到的信息更新自己的粪球位置。
-
重复步骤2-5,直到满足终止条件。
3. 基于DBO的多无人机协同集群避障路径规划方法
本文提出的基于DBO的多无人机协同集群避障路径规划方法将路径规划问题转化为一个多目标优化问题。目标函数包括路径长度、飞行高度、威胁程度和转弯角度。
3.1 目标函数
路径长度:路径长度是无人机从起点到终点的距离。路径长度越短,无人机消耗的能量越少,任务执行效率越高。
飞行高度:飞行高度是无人机相对于地面的高度。飞行高度越高,无人机受到的威胁越小,但能耗也越大。
威胁程度:威胁程度是指无人机在飞行过程中遇到的障碍物或其他威胁的程度。威胁程度越高,无人机避障的难度越大,安全性越低。
转弯角度:转弯角度是指无人机在飞行过程中改变方向的角度。转弯角度越大,无人机需要更大的加速度,能耗也越大。
3.2 编码方式
本文采用分段编码方式对无人机路径进行编码。每个无人机的路径由一系列分段组成,每个分段由一个起点和一个终点表示。分段的起点和终点由其在三维空间中的坐标表示。
3.3 适应度函数
适应度函数是用来衡量个体质量的函数。本文采用如下适应度函数:
fitness = w1 * (1 - path_length / max_path_length) + w2 * (1 - altitude / max_altitude) + w3 * (1 - threat_level / max_threat_level) + w4 * (1 - turn_angle / max_turn_angle)
其中,w1
、w2
、w3
、w4
是权重系数,用于平衡不同目标函数的重要性。path_length
、altitude
、threat_level
、turn_angle
分别表示路径长度、飞行高度、威胁程度、转弯角度。max_path_length
、max_altitude
、max_threat_level
、max_turn_angle
分别表示路径长度、飞行高度、威胁程度、转弯角度的最大值。
4. 实验结果
实验结果表明,提出的方法能够有效地生成满足多成本约束条件的避障路径。无人机能够避开障碍物和威胁源,并以较短的路径长度、较低的飞行高度、较小的威胁程度和较小的转弯角度到达终点。
5. 结论
本文提出了一种基于蜣螂算法(DBO)的多无人机协同集群避障路径规划方法。该方法将路径规划问题转化为一个多目标优化问题,并使用DBO算法进行求解。实验结果表明,该方法能够有效地生成满足多成本约束条件的避障路径,并具有较好的鲁棒性和可扩展性。
本文提出的方法可以应用于各种无人机集群协同任务,如搜索救援、环境监测、目标跟踪等。通过调整权重系数,可以生成满足不同需求的避障路径,从而提高无人机集群协同任务的安全性、效率和任务执行效果。
📣 部分代码
function [chrom_os_stage,chrom_ma_stage,chrom_wa_stage,pro_time_array,load_machine_cell,load_worker_cell,chrom_decode] = first_idle_mw_EDD(stage_rank,job_num,chrom_os_stage1,pro_time_array,load_machine_cell,load_worker_cell,chrom_decode,mach_set_stage,worker_set_stage,Basic_infor)
% first idle machine or worker for the machine assignment or the worker assignment
mach_set=mach_set_stage{1,stage_rank};
m=size(mach_set,2);
worker_set=worker_set_stage(stage_rank,:);
w=size(worker_set,2);
if stage_rank==1
max_mach_rank=0;
max_worker_rank=0;
else
max_mach_rank=max(mach_set_stage{1,stage_rank-1});
max_worker_rank=max(worker_set_stage(stage_rank-1,:));
end
chrom_os_stage=zeros(1,job_num);
chrom_ma_stage=zeros(1,job_num);
chrom_wa_stage=zeros(1,job_num);
idle_time_m = zeros(2,m);
idle_time_w = zeros(2,w);
pro_time_mat=Basic_infor.pro_time(:,max_mach_rank*w+1:max_mach_rank*w+m*w);
if stage_rank ==1
for jj=1:job_num
chrom_os_stage = chrom_os_stage1;
job_rank=chrom_os_stage(1,jj);
T_ready=0;
for k = 1:m
idle_time_m(1,k) = max_mach_rank+k;
if isempty(load_machine_cell{max_mach_rank+k,2})
CT_ma1 = 0;
else
CT_ma1 = load_machine_cell{max_mach_rank+k,2}(end);
end
idle_time_m(2,k) = CT_ma1;
end
[~,col_ma] = min(idle_time_m(2,:));
mach_rank = idle_time_m(1,col_ma);
CT_ma = idle_time_m(2,col_ma);
chrom_ma_stage(1,job_rank)=mach_rank;
for s = 1:w
idle_time_w(1,s) = max_worker_rank + s;
if isempty(load_worker_cell{max_worker_rank + s,2})
CT_wa1 = 0;
else
CT_wa1 = load_worker_cell{max_worker_rank + s,2}(end);
end
idle_time_w(2,s) = CT_wa1;
end
[~,col_wa] = min(idle_time_w(2,:));
worker_rank = idle_time_w(1,col_wa);
CT_wa = idle_time_w(2,col_wa);
chrom_wa_stage(1,job_rank)=worker_rank;
pro_time = pro_time_mat(job_rank,(mach_rank-max_mach_rank-1)*w+worker_rank-max_worker_rank);
ET_oper=max([T_ready,CT_ma,CT_wa]); %获取工序的最早加工时间
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,1)=job_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,2)=stage_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,3)=mach_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,4)=worker_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,5)=pro_time;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,6)=ET_oper; %存储工序开始加工时间
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,7)=ET_oper+pro_time; %存储工序完成加工时间
pro_time_array(1,(stage_rank-1)*job_num+job_rank)=ET_oper;
pro_time_array(2,(stage_rank-1)*job_num+job_rank)=ET_oper+pro_time;
pro_time_array(3,(stage_rank-1)*job_num+job_rank)=job_rank;
num_ma=size(load_machine_cell{mach_rank,1},2);
num_wo=size(load_worker_cell{worker_rank,1},2);
load_machine_cell{mach_rank,1}(1,num_ma+1)=ET_oper; %更新机器、工人加工起始时间
load_machine_cell{mach_rank,2}(1,num_ma+1)=ET_oper+pro_time;
load_machine_cell{mach_rank,3}(1,num_ma+1)=job_rank;
load_worker_cell{worker_rank,1}(1,num_wo+1)=ET_oper;
load_worker_cell{worker_rank,2}(1,num_wo+1)=ET_oper+pro_time;
load_worker_cell{worker_rank,3}(1,num_wo+1)=job_rank;
end
else
pro_time_array1 = pro_time_array(:,(stage_rank-2)*job_num+1:(stage_rank-1)*job_num);
for jj=1:job_num
for k = 1:m
idle_time_m(1,k) = max_mach_rank+k;
if isempty(load_machine_cell{max_mach_rank+k,2})
CT_ma1 = 0;
else
CT_ma1 = load_machine_cell{max_mach_rank+k,2}(end);
end
idle_time_m(2,k) = CT_ma1;
end
[~,col_ma] = min(idle_time_m(2,:));
mach_rank = idle_time_m(1,col_ma);
CT_ma = idle_time_m(2,col_ma);
for s = 1:w
idle_time_w(1,s) = max_worker_rank + s;
if isempty(load_worker_cell{max_worker_rank + s,2})
CT_wa1 = 0;
else
CT_wa1 = load_worker_cell{max_worker_rank + s,2}(end);
end
idle_time_w(2,s) = CT_wa1;
end
[~,col_wa] = min(idle_time_w(2,:));
worker_rank = idle_time_w(1,col_wa);
CT_wa = idle_time_w(2,col_wa);
ET_oper=max([CT_ma,CT_wa]); %获取工序的最早加工时间
[~, col]=find(pro_time_array1(2,:)<=ET_oper);
if size(col,2)>1
select_job = [];
select_job(1,:) = pro_time_array1(3,col);
select_job(2,:) = Basic_infor.due_time(col,1)';
[~,col3] = min(select_job(2,:));
p = col3;
elseif size(col,2)==1
p = col;
elseif isempty(col)
ET_oper = pro_time_array1(2,1);
[~,col1] = find(pro_time_array1(2,:)==ET_oper);
if size(col1,2)==1
p = col1;
else
select_job = [];
select_job(1,:) = pro_time_array1(3,col1);
select_job(2,:) = Basic_infor.due_time(col1,1)';
[~,col2] = min(select_job(2,:));
p = col2;
end
end
job_rank = pro_time_array1(3,p);
pro_time_array1(:,p) = [];
chrom_os_stage(1,jj)=job_rank;
chrom_ma_stage(1,job_rank)=mach_rank;
chrom_wa_stage(1,job_rank)=worker_rank;
pro_time=pro_time_mat(job_rank,(mach_rank-max_mach_rank-1)*w+1);
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,1)=job_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,2)=stage_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,3)=mach_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,4)=worker_rank;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,5)=pro_time;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,6)=ET_oper; %存储工序开始加工时间
pro_time_array(1,(stage_rank-1)*job_num+job_rank)=ET_oper;
chrom_decode{1,(stage_rank-1)*job_num+job_rank}(1,7)=ET_oper+pro_time; %存储工序完成加工时间
pro_time_array(2,(stage_rank-1)*job_num+job_rank)=ET_oper+pro_time;
pro_time_array(3,(stage_rank-1)*job_num+job_rank)=job_rank;
col_ma=size(load_machine_cell{mach_rank,1},2);
col_wo=size(load_worker_cell{worker_rank,1},2);
load_machine_cell{mach_rank,1}(1,col_ma+1)=ET_oper; %更新机器、工人加工起始时间
load_machine_cell{mach_rank,2}(1,col_ma+1)=ET_oper+pro_time;
load_machine_cell{mach_rank,3}(1,col_ma+1)=job_rank;
load_worker_cell{worker_rank,1}(1,col_wo+1)=ET_oper;
load_worker_cell{worker_rank,2}(1,col_wo+1)=ET_oper+pro_time;
load_worker_cell{worker_rank,3}(1,col_wo+1)=job_rank;
end
end
[~,index1] = sort(pro_time_array(2,(stage_rank-1)*job_num+1:stage_rank*job_num));%按照结束的先后次序
pro_time_array(1,(stage_rank-1)*job_num+1:stage_rank*job_num) = pro_time_array(1,(stage_rank-1)*job_num+index1);
pro_time_array(2,(stage_rank-1)*job_num+1:stage_rank*job_num) = pro_time_array(2,(stage_rank-1)*job_num+index1);
pro_time_array(3,(stage_rank-1)*job_num+1:stage_rank*job_num) = pro_time_array(3,(stage_rank-1)*job_num+index1);
end
⛳️ 运行结果
🔗 参考文献
[1] 刘浩.多无人机协同路径规划技术研究及模拟实现[D].电子科技大学[2024-03-28].DOI:CNKI:CDMD:2.1016.175960.
[2] 罗诚.无人机路径规划算法研究[D].复旦大学,2010.
[3] 谌海云,陈华胄,刘强.基于改进人工势场法的多无人机三维编队路径规划[J].系统仿真学报, 2020(3):7.DOI:10.16182/j.issn1004731x.joss.18-0252.
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类