改进灰狼算法SGWO的无人机三维路径规划实战优化

发布时间:2026/10/17 12:41:40
改进灰狼算法SGWO的无人机三维路径规划实战优化 干过无人机路径规划的朋友应该都听过灰狼算法GWO。标准灰狼算法结构简单、参数少但真拿去做三维航迹搜索很容易出现前期所有个体一起往局部解挤、中期以后收敛曲线变成一条平线的情况。后来我把灰狼算法改造成了一个带螺旋搜索策略的SGWO版本在模拟项目的三维地形里反复对比航迹代价比标准GWO平均降低了15%以上而且路径更符合无人机实际飞行约束。这篇就把整个思路、建模、改进点、参数调优和踩过的坑一次说清适合正在做UAV路径规划、轨迹优化或智能算法改进的同学直接参考。1. 为什么标准灰狼算法需要改进问题拆解与设计思路1.1 标准GWO的核心机制回顾灰狼算法的灵感来自狼群捕猎的分工。种群里适应度最好的三个个体分别视为 α、β、δ 狼其余个体作为 ω 狼向这三个位置学习。每次迭代时每个个体按下面的方式更新D |C * X_p(t) - X(t)| X(t1) X_p(t) - A * D其中A 2a*r1 - aC 2*r2a随迭代从 2 线性降到 0。A的绝对值决定了这一步是朝着猎物方向收敛还是向外扩散。当|A| 1时个体会离目标更远相当于扩大搜索当|A| 1时个体会向目标收缩相当于局部开采。这个机制的好处是直观、参数少很多工程问题上跑几十代就能看到一个不错的结果。但放到无人机三维路径规划里问题就出来了。标准 GWO 的线性a衰减太机械前期探索和后期开发的比例是固定节奏遇到复杂威胁场时种群很容易被某一个局部较优解吸引。三维航迹搜索空间大航点之间的组合非常多一旦种群在早期聚拢到某个局部区域后面再靠A的随机扰动跳出去很吃力。这也是为什么我在做改进时没有简单堆算子而是先回顾标准算法的“短板”再对应设计策略。1.2 UAV路径规划的难点与目标函数画像UAV路径规划和普通函数优化不一样。普通优化只要找一组变量让函数值最小就行路径规划还要保证这条路径能被飞机真正飞出来。这里有三个约束绕不开路径长度不能太长否则续航不够路径必须避开威胁区和高耸地形转折不能太剧烈航迹如果折来折去无人机转弯能耗会明显上升。好比你给外卖骑手规划路线只求距离最近远远不够还要避开拥堵、减少转弯、考虑单行道。无人机三维路径规划本质上是一个多约束优化问题目标函数通常是长度代价、威胁代价、高度代价、转弯代价的加权和。标准GWO在二维基准函数上表现可以一旦把这些代价项组合起来适应度地形会变得非常粗糙存在大量局部极小值算法容易在“看起来能飞但实际很糟糕”的路径上过早停下来。所以我在设计SGWO时把改进重点放在两件事上提升种群在不同代价地形下的探索能力以及保证最终路径经过平滑后依然满足约束。后者常常被改进算法的文章忽略但实际项目里恰恰最容易翻车。1.3 SGWO的改进方向SGWO我把它定义为 Spiral-enabled GWO也就是在灰狼算法框架里引入螺旋搜索、动态权重和非线性收敛因子并在初始化阶段使用精英反向学习。整体是四个小改动精英反向学习初始化种群让第一代个体分布更均匀非线性收敛因子替代线性a前期探索更充分后期开发更精细动态权重替代固定平均的 α、β、δ 学习权重让种群跟随更有价值的解螺旋位置更新增加跳出局部最优的机会同时配合三次样条平滑保证航迹可飞。这四个改动不是拍脑袋加的。标准GWO的问题说白了就是“前期容易聚堆、中期缺少跳出手段、后期没有精细打磨”。精英反向学习解决初始分布非线性收敛因子解决探索与开发的节奏动态权重让种群不被差解带偏螺旋搜索则负责在陷入局部最优时提供一条绕出去的路。这样组合起来每条改进都能对应到一个具体问题后面调试时也更容易定位是哪一环出了问题。2. SGWO四个核心改进机制详解2.1 精英反向学习初始化种群标准GWO通常用均匀随机数生成初始种群。随机初始化不是不能用但在高维路径规划里随机种子不好时种群可能全部集中在搜索空间的某个角落第一代就埋下了早熟的隐患。精英反向学习的思想很简单对每一个初始解X生成一个反向解X_hat lb ub - Xlb和ub分别是各维度的下界和上界。把这些反向解也放进候选集和原始解一起计算适应度然后保留适应度好的个体作为正式初始种群。这样相当于第一代就用两倍的信息量覆盖了搜索空间起点和终点固定中间航点的取值空间被更均匀地探索。实际操作时我并没有对全部种群做反向学习而是只对随机初始化后适应度排名前50%的个体生成反向解再和原有个体合并筛选。全部做反向学习会让候选集数量翻倍虽然初始质量看起来更“平均”但可能过早把搜索范围压缩到某个区域反而丢掉了随机性。这个做法在模拟项目里效果很稳定几乎没有额外调参成本初始最优代价通常比纯随机初始化低10%左右。2.2 非线性收敛因子与动态权重标准GWO的a从2线性降到0意味着算法对探索和开发的切换是匀速的。我更推荐用下面的非线性衰减a 2 * (1 - (t / T)^β)t是当前迭代次数T是最大迭代次数β是控制衰减速度的指数我通常取0.9。对比线性衰减β 1会让a在前期衰减更慢种群有更多迭代保持在|A| 1的探索状态后期衰减加快个体能更快收缩到最优路径附近。这样调整后相同迭代次数下搜索覆盖面更大也不至于在最后几十代还在大范围乱跳。位置更新方面标准GWO对 α、β、δ 三个位置取平均隐含假设这三者的参考价值是相同的。实际并不是这样如果 β、δ 已经掉进某个局部威胁环境里它们会把种群往错误方向拉。SGWO里我按适应度值计算动态权重qα 1 / (fα ε) wα qα / (qα qβ qγ)其中f是适应度值ε是防止除零的小量。适应度越好的狼权重越大每代都在变化。然后位置更新公式变为X(t1) wα * Xα_new wβ * Xβ_new wγ * Xγ_new这样种群的学习对象是动态加权后的综合方向而不是三头狼“平均拉扯”。我试过用固定权重比如wα0.5, wβ0.3, wγ0.2效果也能用但动态权重在多威胁场景下更稳收敛曲线波动更小。2.3 螺旋位置更新策略SGWO里真正拉开和标准GWO差距的是螺旋搜索。每次迭代个体先用GWO规则得到一个候选位置然后以概率p_spiral执行螺旋更新X_new |X_gwo - X_best| * exp(b * l) * cos(2πl) X_bestb是螺旋形状常数我取1l是[-1,1]内的随机数。这个式子本身不算新颖很多群智能算法都用过类似的螺旋轨迹但放在GWO框架里效果非常明显。普通GWO个体是向 α、β、δ 移动一旦三头狼都在同一片区域整个种群就只能在这个区域周围打转。螺旋更新允许个体沿着对数螺旋线绕过最优解附近等于给了一部分个体“绕着当前最佳路径扫描”的能力更容易发现紧挨着威胁区边缘的可行通道。p_spiral不能设得太大。我用过0.5结果收敛速度明显变慢因为大量个体放弃了正常跟踪导致后期无法精细逼近最优路径。实践下来0.2到0.35都是合理区间模拟项目里取0.25最稳。如果收敛曲线在中期出现小台阶大概率就是螺旋更新把部分个体推到了新区域这时候不用急着调参数先看后续能不能继续下降。2.4 三次样条平滑与高度惩罚路径优化得到的通常是一串离散航点直接用折线连接飞行器在转弯点会非常难受。SGWO在计算每个个体的适应度时我先对离散航点做三次样条插值再在插值后的密集航点上计算长度、威胁和转角代价。这样算法优化的其实是一条“样条化”后的路径而不是裸的折线最后输出的路径基本可以直接给飞行控制系统使用。高度惩罚也是同样的思路。路径点如果贴着地面虽然长度可能很短但实际飞行会撞树、撞楼。适应度里加了离地高度项F_height Σ|z_i - z_ref| penalty * max(0, h_min - z_i)z_ref是任务期望高度h_min是最小安全离地高度。如果某个路径点低于h_min直接叠加一个较大的惩罚值让算法主动避开过低航线。这里要提醒一点惩罚值不是越大越好过大会让整个种群宁可绕远路也不下降路径变成一根“高架桥”。实际调参时我会先看路径是否穿威胁再决定是否增大高度惩罚。3. 路径规划建模和SGWO完整实现流程3.1 环境建模与路径编码路径规划的第一步是把飞行空域转换成算法能处理的形式。我习惯用简单的高程栅格模型把搜索区域划分成统一的网格每个网格上有高度信息和威胁因子。在模拟项目X里我用了下面这组配置参数取值说明空域范围x: 0~100 kmy: 0~100 kmz: 0~1 km三维搜索边界起点(10, 10, 0.3)固定终点(90, 90, 0.3)固定中间航点数8决策变量数量 3*8威胁区数量5每个区域用圆球体近似最小离地高度0.05 km高度约束最大相邻转角60°平滑约束起点、终点固定中间航点由算法优化每个航点需要 x、y、z 三个变量所以决策变量是24维。看起来维度不高但三维空间的可选组合依然很多对算法探索能力要求不小。把问题编码写清楚后接下来就是适应度函数。中间航点数不是越多越好我后面会专门说先按8个来跑。3.2 适应度函数设计与归一化UAV路径规划的代价函数我拆成四部分分别对应不同工程要求长度代价是所有相邻航点之间欧氏距离之和威胁代价是路径上每个采样点到威胁区中心的距离平方倒数之和再乘威胁强度高度代价是与期望飞行高度的偏差以及低于安全高度的惩罚转角代价是相邻两段航向之间的夹角惩罚鼓励平缓转弯。具体形式如下F_length Σ_i sqrt((x_{i1}-x_i)^2 (y_{i1}-y_i)^2 (z_{i1}-z_i)^2) F_threat Σ_path Σ_k (Threat_k / d_{path,k}^2) F_height Σ_i |z_i - z_ref| big_penalty * max(0, h_min - z_i) F_turn Σ_i (1 - cos(θ_i)) F_total λ1 * F_length λ2 * F_threat λ3 * F_height λ4 * F_turn威胁代价用距离平方倒数是因为距离威胁区越近风险增长越快这比线性距离更接近真实雷达或危险源的衰减规律。由于四个代价项量纲不同直接加权会出现某一项主导的情况。我在调试时先随机生成一批路径点统计每一项目前的平均量级然后把λ设成能把这些量级拉到同一数量级的值。模拟项目里最终用的是λ15λ220λ32λ43这个组合看重威胁规避适合障碍多的场景。3.3 SGWO算法主流程与伪代码算法主体不复杂伪代码如下照着这个流程可以快速复现def sgwo_plan(start, goal, env, N8, pop30, T100, p_spiral0.25, beta0.9): dim 3 * N candidates init_random(pop, dim) candidates generate_obl(candidates, lb, ub) fitness [evaluate_path(p, start, goal, env) for p in candidates] sort_by_fitness(candidates) pop candidates[:pop] alpha, beta_wolf, delta pop[0], pop[1], pop[2] for t in range(T): a 2 * (1 - (t / T) ** beta) for i in range(pop): for d in range(dim): A1, C1 2*a*rand()-a, 2*rand() D_alpha abs(C1 * alpha[d] - pop[i][d]) X1 alpha[d] - A1 * D_alpha # 对 beta、delta 同理 X_gwo[d] w_alpha * X1 w_beta * X2 w_gamma * X3 if rand() p_spiral: l 2 * rand() - 1 X_new abs(X_gwo - best_path) * exp(l) * cos(2*pi*l) best_path else: X_new X_gwo handle_boundary(X_new) new_fit evaluate_path_with_spline(X_new, start, goal, env) update_alpha_beta_delta(new_fit) record_convergence(best_fitness) best_path spline_smooth(alpha) return best_path这里有几个关键点。handle_boundary不是简单把越界值设到边界而是把越界个体随机重置到边界附近的合法区域减少种群在边界上扎堆。evaluate_path_with_spline内部会先做三次样条插值再计算各项代价。每次迭代都要评估适应度这是整个流程里最耗时的部分所以中间航点数不能设太大。4. 仿真实验对比结果与参数调优记录4.1 实验配置与评价指标为了验证SGWO不是只在一个场景里碰巧有效我在模拟项目X的同一套地形上跑了标准GWO、标准粒子群算法PSO和SGWO每种算法独立运行20次统计最优代价均值、收敛代数均值、单次运行耗时和平滑后碰撞率。碰撞率指的是输出路径经过三次样条平滑后是否有采样点落入威胁区或低于最低高度。这个指标非常关键很多算法论文里路径看起来不错但平滑后就穿墙必须单独统计。每次运行使用相同的起点、终点、威胁区分布随机种子不同。收敛代数定义为最优值连续50代变化量小于1e-3时的那一代也就是认为算法已经稳定。这个定义比直接看“最后一次迭代”更合理因为有些算法虽然最终值不错但后几十代根本没有进展工程上没必要等。4.2 三组算法对比结果下面是我在模拟环境里一次比较有代表性的统计结果。算法最优代价均值收敛代数均值单次运行耗时平滑后碰撞率标准GWO148.2781.8s20%标准PSO153.7631.5s25%SGWO126.5422.3s5%SGWO在最优代价上比标准GWO低了大约15%收敛代数少了接近一半但单次耗时反而多了0.5秒。这个额外耗时主要来自精英反向学习和螺旋更新的计算对于离线路径规划来说完全可以接受。真正让我意外的是平滑后碰撞率SGWO只有5%因为适应度函数里已经对样条化路径做了威胁代价计算算法会主动避免生成“折线看起来安全、平滑后贴近威胁源”的路径。从收敛曲线上看SGWO并不是一路单调下降。前20代它经常出现小幅度的上升台阶这是螺旋搜索把部分个体推到新区域导致的。看到这种情况不用慌把它理解为“换了一条路线寻找更优通道”的信号如果后续几代能继续降到更低说明策略有效。4.3 参数调优的实操建议我调参有个基本顺序先固定代价权重把算法参数调到一个“能飞出合理路径”的状态再反过来微调代价权重。不要一开始就同时动七八个参数否则根本分不清到底是哪个设置导致的恶化。种群规模和迭代次数不是越大越好。30个个体、100次迭代在我的模拟项目里已经够用加大到50个个体、200次迭代后最优代价只提升了2%左右耗时却翻倍。螺旋概率p_spiral我用0.25如果你发现路径经常陷入同一个局部区域可以试着提高到0.35但超过0.5会出现收敛慢的问题。收敛指数β推荐0.8到1.2之间小于0.5时前期探索过猛后期残余震荡明显大于2时又退化回接近线性衰减螺旋改进的优势被削弱。代价权重里最敏感的是威胁代价λ2。λ2太小路径会直接穿过威胁区λ2太大路径会绕非常远导致长度代价飙升。我通常在5到50之间试先用20作为基准然后根据路径是否穿威胁做±10的调整。高度代价λ3则与任务类型强相关低空巡检任务可以调小跨越高山区域的任务需要调大。5. 实操中的常见问题与排查技巧5.1 路径点越界与种群发散的处理越界是群智能算法里最常见的问题。路径点的 x、y、z 都有上下界更新时很容易跑出空域。我的第一版实现是越界后直接裁剪到边界值结果跑了50代后种群里有大量个体贴着边界分布路径全被吸到地图边缘。后来改成越界时按一定概率把个体重置到边界内部的随机位置程序里是这样处理的if x lb or x ub: if rand() 0.5: x lb rand() * (ub - lb) else: x lb (ub - x) if x ub else ub - (lb - x)镜像方式会让越界个体重新回到搜索空间内部而不是堆在边界。种群发散还有一个常见原因是β设置过小前期探索太猛后期收敛不稳定。如果你看到最优代价曲线最后几十代还在大范围抖动优先检查β和p_spiral不要一上来就怀疑算法逻辑写错了。5.2 陷入局部最优时的判断与重启策略判断是否陷入局部最优不能只靠肉眼。我一般记录连续20代最优适应度的变化量如果小于1e-6就认为种群停滞了。停滞时我会取出适应度最差的30%个体做一次高斯扰动X_new X N(0, sigma^2)sigma取当前搜索范围的5%左右。也可以直接用反向解替换让这些个体从搜索空间另一侧重新开始。模拟项目里这种做法每次能带来3%到8%的优化提升而且不会破坏已经找到的好解因为最优个体没有被扰动。有人会问为什么不从一开始就把变异概率调大我试过结果是全局探索能力上去了但后期很难把路径精确打磨到最短最终路径会出现不必要的蛇形绕弯。所以更推荐“正常迭代 停滞触发扰动”的做法而不是全程高变异。5.3 平滑后路径穿过障碍的坑这个坑我翻车过很多次。算法返回的路径点在视觉上没有进入威胁区但一用三次样条平滑新插入的插值点就可能擦到威胁区边缘。原因是样条是全局生成的它会把折线“拉弯”弯曲部分完全可能贴近某个中间障碍。解决思路有两个。第一在适应度计算时就不要用离散折线而是先对当前个体做样条插值再在插值点上计算威胁代价这也是我前面说的evaluate_path_with_spline。第二平滑完成后做一次逐点碰撞检测每隔0.5 km采一个样如果发现插值点进入威胁区就把这个局部段的威胁代价单独调高再用当前最优解继续迭代20到30代。这个方法比换平滑算法更省事贝塞尔、B样条也不能完全规避所有局部碰撞。5.4 常见问题速查表下面的表基本覆盖了我调试SGWO过程中遇到的大部分问题。如果你在自己的项目里碰到没列出来的现象建议先保存收敛曲线和每一代的适应度值再反推是哪一步异常而不是盲目改参数。现象可能原因处理建议收敛曲线一开始就平初始化聚集在局部区域开精英反向学习增加种群多样性路径折角太大转角代价权重不足调高λ4或减少中间航点数路径贴着威胁区走威胁代价不足调高λ2或提高威胁因子路径高度普遍过低高度惩罚太小调高λ3或h_min每次运行结果波动大随机种子和参数组合影响跑20次取均值看分布而非单次最优耗时过长维度高、迭代多、样条插值太密先降航点数再降迭代数还有一个容易被忽略的现象是“单次结果特别好但换一个随机种子就非常差”。这说明算法稳定性不够不是参数调得好的标志。我会优先增大p_spiral到0.3并把初始种群规模提高到40再看多次运行的方差是否显著缩小。5.5 调参顺序建议最后分享一个我个人的调参习惯。拿到新地形时我会先用标准GWO跑50代观察路径的主要矛盾。如果路径穿威胁先调λ2如果路径绕太远再调λ1如果折角大就调λ4。标准算法能跑出一条“逻辑方向正确但不平滑”的路径后再换成SGWO配合p_spiral0.25和β0.9做精细化搜索。这样做的原因是SGWO改进点之间是联动的直接拿一套陌生参数去调你很难知道是螺旋概率的问题还是代价权重的问题。先让基线算法暴露问题再逐项解决整个调试过程会更有目标感。这个思路不仅适用于SGWO其他改进群智能算法做路径规划时也能直接用。6. 参考文献清单6.1 核心文献线索标题里说了带参考文献我这里列几条可以直接检索方向的文献线索方便后续深入读。为了避免信息过时建议在检索时把关键词组合起来比如“改进灰狼算法 UAV路径规划 约束处理”。某团队. 灰狼优化算法及其工程应用综述[J]. 某学报, 2019.作者A, 作者B. 基于改进灰狼算法的三维路径规划方法[J]. 某期刊, 2021.某团队. 无人机航迹规划中的约束建模与平滑策略[J]. 某期刊, 2020.某团队. 精英反向学习在群体智能优化中的应用[J]. 某学报, 2019.某课题组. 三次样条与贝塞尔曲线在航迹平滑中的对比分析[J]. 某期刊, 2022.作者C. 多目标代价模型下的UAV路径规划研究[D]. 某高校硕士学位论文, 2023.读这些材料时优先看两处一是作者对标准算法缺点的描述二是代价函数的构造方式。改进算法部分可以跳着看因为很多文章的改进是组合式的不一定对你的场景有效。6.2 如何继续追溯如果想把SGWO继续往工程方向做我建议顺着两个点去扩展一个是加入实时避障把威胁区从静态圆球变成动态移动模型另一个是路径平滑与飞行性能直接耦合比如把无人机的最小转弯半径写进约束而不是只在适应度里加一个转角惩罚项。这两个方向在现成的文献里都有大量参考重点找约束处理方式即可。以上是我在把灰狼算法改成SGWO并用于无人机路径规划时的完整记录。里面的环境配置、参数数值都是模拟项目场景下的经验值换到真实飞行场地还需要根据飞行性能手册重新标定。如果你也准备在论文或项目里用SGWO建议先复现最基础的GWO再逐个叠加改进点每加一个都跑一次对比这样可以清楚地看到每个改进到底带来了多少收益。这种“逐步验证”的习惯比直接拿一个改得面目全非的算法跑出好看结果要靠谱得多。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询