多无人机协同路径规划是当前智能算法应用的前沿领域之一。在复杂三维环境中,如何让无人机集群高效、安全地完成飞行任务,同时兼顾路径成本、高度变化、威胁规避和飞行稳定性,一直是行业内的研究热点。传统算法在解决这类多维约束问题时往往存在收敛速度慢、易陷入局部最优等缺陷。
蜣螂优化算法(DBO)是近年来受自然界蜣螂滚球行为启发提出的一种新型群智能算法。其核心思想是模拟蜣螂在滚动粪球过程中表现出的智能协作和路径优化能力。相比遗传算法、粒子群优化等传统方法,DBO具有参数少、收敛快、鲁棒性强等优势。但在处理高维复杂问题时,标准DBO仍存在种群多样性不足、探索能力有限等问题。
本项目提出的多策略改进蜣螂算法(MSDBO),通过引入自适应权重机制、动态搜索策略和混合变异算子,显著提升了算法在三维路径规划场景中的性能。实测表明,该方法在保证路径安全性的前提下,能够将综合飞行成本降低12%-18%,特别适合需要同时考虑路径长度、飞行高度、威胁规避和转向角度的复杂任务场景。
标准DBO算法主要模拟蜣螂的滚球、舞蹈、繁殖和偷窃四种行为模式:
但在三维路径规划场景中,我们发现三个主要问题:
引入非线性递减权重因子:
matlab复制w = w_max - (w_max-w_min)*(iter/MaxIter)^2
其中w_max=0.9, w_min=0.4,通过动态调整滚球行为的步长,使算法在早期保持强探索能力,后期增强局部开发精度。
设计基于适应度方差的转换条件:
matlab复制if std(fitness) < threshold
activate_dance = true;
else
activate_roll = true;
end
当种群多样性不足时自动增强探索行为,避免早熟收敛。
结合高斯变异和柯西变异优势:
matlab复制if rand < 0.5
new_pos = pos + sigma*randn(size(pos));
else
new_pos = pos + sigma*tan(pi*(rand-0.5));
end
其中变异尺度sigma随迭代次数自适应调整,增强算法跳出局部最优的能力。
采用数字高程模型(DEM)叠加威胁源的方式构建三维环境:
matlab复制% 地形高程模型
[Z, refmat] = arcgridread('terrain.asc');
% 威胁源模型
threats = struct('x',[100,200],'y',[150,300],'z',[50,80],'r',[30,50]);
综合成本函数包含四个关键分量:
matlab复制function cost = objectiveFunc(path)
% 路径长度成本
L_cost = sum(sqrt(diff(path.x).^2 + diff(path.y).^2 + diff(path.z).^2));
% 高度惩罚项
H_cost = sum(max(0, path.z - safe_altitude));
% 威胁场成本
T_cost = 0;
for i = 1:length(threats)
dist = sqrt((path.x-threats(i).x).^2 + (path.y-threats(i).y).^2);
T_cost = T_cost + sum(exp(-(dist-threats(i).r).^2/(2*sigma^2)));
end
% 转向角惩罚
theta = acos(dot(v1,v2)./(norm(v1).*norm(v2)));
A_cost = sum(abs(diff(theta)));
cost = w1*L_cost + w2*H_cost + w3*T_cost + w4*A_cost;
end
其中权重系数w1-w4需根据任务需求调整,典型设置为[0.5, 0.2, 0.2, 0.1]。
matlab复制function [best_path, convergence] = MSDBO_3Dpath()
% 初始化参数
pop_size = 50;
max_iter = 200;
dim = 3*waypoints; % 每个航点的xyz坐标
% 初始化种群
pop = initPopulation(pop_size, dim, bounds);
% 主循环
for iter = 1:max_iter
% 计算适应度
fitness = evaluateFitness(pop);
% 更新自适应参数
w = updateInertiaWeight(iter, max_iter);
% 行为选择与位置更新
new_pop = updatePosition(pop, fitness, w);
% 混合变异操作
new_pop = hybridMutation(new_pop, iter/max_iter);
% 精英保留
pop = elitistSelection(pop, new_pop);
end
end
matlab复制function pop = initPopulation(N, dim, bounds)
pop = zeros(N, dim);
for i = 1:dim
pop(:,i) = bounds(i,1) + (bounds(i,2)-bounds(i,1))*rand(N,1);
end
% 确保起点终点固定
pop(:,1:3) = repmat(start_point, N, 1);
pop(:,end-2:end) = repmat(end_point, N, 1);
end
matlab复制function fitness = evaluateFitness(pop)
N = size(pop,1);
fitness = zeros(N,1);
for i = 1:N
path.x = pop(i,1:3:end);
path.y = pop(i,2:3:end);
path.z = pop(i,3:3:end);
fitness(i) = objectiveFunc(path);
end
end
matlab复制% 生成Voronoi图
[V,C] = voronoin([drone_positions; threat_positions]);
% 为每架无人机分配安全走廊
for i = 1:n_drones
safe_corridor{i} = V(C{i},:);
end
采用速度障碍法实现实时避碰:
matlab复制function new_vel = collisionAvoidance(drone, neighbors)
vo_cone = [];
for j = 1:length(neighbors)
% 计算相对速度和位置
rel_pos = neighbors(j).pos - drone.pos;
rel_vel = neighbors(j).vel - drone.vel;
% 构建速度障碍锥
theta = asin(safety_radius/norm(rel_pos));
vo_cone = [vo_cone; buildVOCone(rel_pos, rel_vel, theta)];
end
% 选择最优规避速度
new_vel = selectBestVelocity(drone.vel, vo_cone);
end
| 算法 | 平均路径成本 | 计算时间(s) | 成功率 |
|---|---|---|---|
| MSDBO | 1245.7 | 28.3 | 98% |
| 标准DBO | 1423.6 | 35.7 | 85% |
| PSO | 1532.8 | 42.1 | 76% |
| GA | 1627.4 | 51.9 | 68% |
![三维轨迹对比图]
可见MSDBO路径在保持安全距离的同时,转弯更平缓,高度变化更合理。
种群规模选择:
权重系数设置:
matlab复制% 侦察任务侧重路径长度
w = [0.6, 0.1, 0.2, 0.1];
% 物资运输侧重飞行平稳性
w = [0.3, 0.2, 0.3, 0.2];
航点稀疏化:
matlab复制% 采用Douglas-Peucker算法简化路径
simplified_path = reducePath(original_path, tolerance);
并行计算加速:
matlab复制parfor i = 1:pop_size
fitness(i) = evaluateFitness(pop(i,:));
end
现象:连续运行算法得到的路径差异较大
解决方法:
matlab复制smooth_penalty = sum(abs(diff(path.z,2)));
现象:相邻航点间高度变化过大
解决方法:
matlab复制max_climb = 5; % m/m
invalid = diff(path.z) > max_climb*dist_2D;
现象:迭代后期适应度不再改善
解决方法:
matlab复制mutation_rate = 0.1 + 0.4*(iter/max_iter);