【启发式算法】狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍(Python)

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

【启发式算法】(12)---《狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍》

狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍

目录

1.算法绪论

2.算法理解

3.算法流程

4.数学模型

[4.1 符号体系](#4.1 符号体系)

[4.2 三大智能行为](#4.2 三大智能行为)

[4.3 强者生存机制(Population Renewal)](#4.3 强者生存机制(Population Renewal))

5.收敛性分析

6.实验亮点

[[Python] WPA算法实现](#[Python] WPA算法实现)

7.超参数(实战经验)

[[Notice] 注意事项](#[Notice] 注意事项)

8.局限性

9.总结


1.算法绪论

随着仿真、金融、能源、航天等领域对优化模型精度要求的不断提高,决策变量维度迅速膨胀,传统梯度类方法面临"维数灾难"与"局部陷阱"双重瓶颈。近二十年来,群体智能(Swarm Intelligence)以无梯度、高并行、鲁棒性强等优势异军突起,其中粒子群(PSO)、蚁群(ACO)、人工鱼群(AFSA)等算法已被广泛引用,但在 100 维以上的多峰问题中仍易出现早熟收敛。

2013 年,吴虎胜等受狼群捕食行为启发,在《系统工程与电子技术》提出狼群算法(Wolf Pack Algorithm, WPA)。该算法通过抽象"游走---召唤---围攻"三层协作机制,并引入"胜者为王"的头狼更新规则与"强者生存"的种群淘汰策略,在 15 座国际通用测试函数、最高 200 维场景下取得显著优于 PSO、AFSA、GA 的综合表现,为高维复杂优化提供了新的可行范式。


2.算法理解

想象你是一只狼。

冬天到了,雪原上食物稀缺,你和同伴必须合作找到那只肥美的鹿。你们不会一拥而上,而是分工明确:

  1. 几只"探狼"先出去闻味道,谁闻到最浓的血腥味,谁就"嗷呜"一声。

  2. 头狼收到信号,立刻"嚎叫"召集"猛狼"狂奔过来。

  3. 大家围成一圈,步步逼近,最终一起把鹿放倒。

  4. 分肉时,谁功劳大谁先吃,弱狼可能饿肚子------但整个族群越来越强。

把这套"狼群战术"写成数学,就是 2013 年吴虎胜等人在《系统工程与电子技术》提出的 狼群算法(Wolf Pack Algorithm, WPA)


3.算法流程

WPA算法分简单可以分5 步走

初始化 → 探狼游走 → 猛狼奔袭 → 合围攻击 → 强者生存(淘汰弱狼)

生物角色 对应解空间里的"个体" 数学意义 功能描述
头狼 当前最优解 全局最优候选 保存当前最佳决策向量,引导群体搜索方向
探狼 除头狼外最好的 S_num 匹狼 局部搜索,防止漏掉好解 在解空间边缘执行精细探测,负责"广域勘探"
猛狼 被头狼召唤的其余狼 快速向优解区域聚集 响应头狼召唤,执行"区域开采"
猎物分配 目标函数 f(x) 越"香"→函数值越大(假设求 max) 按贡献度优先分配资源,弱狼被淘汰以维持种群多样性

4.数学模型

4.1 符号体系
  • 搜索空间 Ω ⊂ ℝᴰ,第 i 匹狼状态 xᵢ = (xᵢ¹,...,xᵢᴰ)

  • 目标函数(最大化)(x)→ ℝ,称为"气味浓度"

  • 种群规模 N,最大迭代 k_max

  • 步长因子 S、距离判定因子 ω、更新比例因子 β

4.2 三大智能行为
  1. 游走行为(Scouting)

    探狼集合大小 S_num ∈ [N/(α+1), N/α]。每匹探狼在 h 个方向试探:

    xᵢᵈᵖ = xᵢᵈ + sin(2πp/h) · step_r , p=1,...,h

    若任一方向气味浓度高于头狼,则立即替换头狼并转入召唤阶段;否则继续游走直至达到最大游走次数 T_max。

  2. 召唤行为(Summoning)

    头狼通过"嚎叫"广播位置 g;猛狼以较大步长 step_b 奔袭:

    xᵢ(k+1) = xᵢ(k) + step_b · (g(k) − xᵢ(k)) / ‖g(k) − xᵢ(k)‖₂

    奔袭途中若发现更优解,即行"夺权"。当与头狼距离小于阈值 d_near 时转入围攻。

    阈值估算:
    d_near = (1/Dω) · Σ_{d=1}^{D}(max_d − min_d)

  3. 围攻行为(Beleaguering)

    将头狼位置视为猎物质心,实施多向压缩:

    xᵢ(k+1) = xᵢ(k) + λ · step_c · (g(k) − xᵢ(k))

    λ∼U(−1,1) 保证各向同性搜索。若新位置气味提升则接受,否则保持原状态。

4.3 强者生存机制(Population Renewal)

每代淘汰适应度最差的 R = uniform[N/(2β), N/β] 匹狼,并随机生成等量新个体,以维持多样性并防止早熟。


5.收敛性分析

引理 1 WPA 种群序列 {Q_k} 为有限齐次马尔可夫链。
引理 2 该链不可约、非周期且正常返,故为遍历链。
引理 3 若进化算法满足"任意状态可达"且"种群单调不劣化",则以概率 1 收敛至全局最优。
定理 WPA 满足上述两条件,因此具有概率 1 全局收敛性。

论文用马尔可夫链 证明:

狼群状态序列是"有限、齐次、遍历"的,而且单调不劣化 ,所以 WPA 以概率 1 收敛到全局最优。

(非数学专业读者可直接记结论:它理论上不会"集体犯傻"。)


6.实验亮点

实验测试集设计:

覆盖 2--200 维、单峰/多峰、可分/不可分共 15 个经典函数,例如 Sphere、Rastrigin、Ackley、Quadric 等。

对比算法与评价指标:
  • PSO(标准版)、AFSA、GA( Sheffield 工具箱)

  • 指标:最优值、最差值、均值、标准差、成功率(|f*−f_opt|/|f_opt|<1e−3)、平均耗时

  • 独立运行 100 次,种群规模统一 50,最大迭代 2000

函数特色 例子 维度 PSO GA FSA WPA
低维单峰 Matyas 2
30 维单峰 Sphere 30 偶尔失效 失效 失效 100% 成功率
200 维多峰 Ackley 200 误差 2.0+ 误差 18+ 误差 20+ 误差 ≈ 0
耗时 中等 最慢 比 PSO 还快一丢丢

结论:
维数越高、峰越多,WPA 越香!

  • 单次迭代时间复杂度 O(N·D·h),其中 h 为探狼试探方向数。

  • 实验平台:Windows XP、2 GB 内存、MATLAB R2008a。

  • 在 30 维 Sphere 函数上,WPA 平均耗时 0.75 s,低于 GA(26.7 s)与 AFSA(67.0 s),与 PSO(2.54 s)相比亦有优势


[Python] WPA算法实现

python 复制代码
"""《WPA算法》
    时间:2024.10.29
    作者:不去幼儿园
"""
import numpy as np

def WPA(f, N=50, D=10, k_max=500, alpha=4, beta=6, S=1000, w=500):
    # 1. 初始化
    X = np.random.uniform(low, high, (N, D))
    Y = np.array([f(x) for x in X])
    g = X[np.argmax(Y)].copy()          # 头狼
    for k in range(k_max):
        # 2. 探狼游走
        S_num = np.random.randint(N//(alpha+1), N//alpha)
        for i in np.argsort(-Y)[:S_num]:
            for _ in range(T_max):
                directions = random_directions()
                x_try = X[i] + step_r * directions
                y_try = f(x_try)
                if y_try > Y[i]:
                    X[i], Y[i] = x_try, y_try
                    if y_try > f(g): g = x_try.copy()
                    break
        # 3. 猛狼奔袭 + 4. 围攻
        M_num = N - S_num - 1
        for i in np.argsort(-Y)[S_num+1:]:
            while distance(X[i], g) > d_near:
                X[i] += step_b * (g - X[i]) / distance(X[i], g)
                Y[i] = f(X[i])
                if Y[i] > f(g): g = X[i].copy()
            # 围攻
            x_att = X[i] + step_c * (2*np.random.rand(D)-1)
            if f(x_att) > Y[i]:
                X[i], Y[i] = x_att, f(x_att)
        # 5. 强者生存
        R = np.random.randint(N//(2*beta), N//beta)
        worst = np.argsort(Y)[:R]
        X[worst] = np.random.uniform(low, high, (R, D))
        Y[worst] = [f(x) for x in X[worst]]
    return g, f(g)

7.超参数(实战经验)

  1. 距离判定因子 ω

    控制"奔袭→围攻"切换。实验表明 ω∈[200,1000] 时算法稳定;ω>1200 导致切换过迟,精细搜索不足,成功率下降。

  2. 步长因子 S

    决定搜索粒度。S∈[200,1200] 可在收敛精度与迭代次数之间取得平衡;S>1400 步长过小,探索效率降低。

值得注意的是,α 与 β 在限定区间内随机取值即可,对性能不敏感,显著降低了调参难度。

参数 作用 推荐范围 过大后果 过小后果
距离判定因子 ω 控制猛狼何时转围攻 200--1000 很难合围,迭代暴涨 合围太早,粗粗糙糙
步长因子 S 控制精细程度 200--1200 步长太小,跑不动 步长大,漏最优

WPA 的隐藏优点:α、β 在区间内随机取即可,对最终成绩不敏感,手残党友好。


[Notice] 注意事项

什么时候用 WPA?

  1. 目标函数维数高(>50 维)。

  2. landscape 崎岖,大量局部极值

  3. 传统 PSO/GA 容易早熟,成功率低。

  4. 你愿意牺牲一点点代码复杂度,换取更高的成功率

bash 复制代码
​# 环境配置
Python                  3.11.5
torch                   2.1.0
torchvision             0.16.0
gym                     0.26.2

8.局限性

现存局限:

  • 算子较多,工程实现相对复杂

  • 理论分析目前仍局限于概率收敛,缺乏有限时间收敛速率估计

  • 对于超高维(>1000 维)或动态优化问题,需进一步与分布式、并行计算框架结合


9.总结

狼群算法通过"游走---召唤---围攻"三层协作以及"胜者为王、强者生存"的演化机制,在全局勘探与局部开采之间实现了动态平衡。理论分析与大量实验共同表明,WPA 对高维、多峰复杂函数具有显著的求解精度、成功率和鲁棒性优势

狼群算法 ="探狼到处闻 + 猛狼听嚎冲 + 合围精细搜 + 弱狼被淘汰"。
把狼的生存智慧翻译成代码,就能在 200 维山峰里找到最低的那块洼地!

参考文献

1\] 吴虎胜, 张凤鸣, 吴庐山. 一种新的群体智能算法------狼群算法\[J\]. 系统工程与电子技术, 2013, 35(11): 2430-2438. \[2\] Kennedy J, Eberhart R. Particle swarm optimization\[C\]//IEEE International Conference on Neural Networks. 1995: 1942-1948. \[3\] Li X L, Shao Z J, Qian J X. An optimizing method based on autonomous animats: fish swarm algorithm\[J\]. 系统工程理论与实践, 2002, 22(11): 32-38. \[4\] Srinivas M, Patnaik L M. Genetic algorithms: a survey\[J\]. Computer, 1994, 27(6): 17-26. > 更多**启发式算法** 文章,请前往:[【启发式算法】专栏](https://blog.csdn.net/qq_51399582/category_12782813.html "【启发式算法】专栏") *** ** * ** *** > 博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:**Rainbook_2,**联系作者。✨

相关推荐
hweiyu0011 分钟前
数据结构和算法分类
数据结构·算法·分类
M K Q13 分钟前
2025.9 GESP三级 日历制作
算法
AI小云16 分钟前
【数据操作与可视化】Pandas数据处理-Series数据结构
开发语言·数据结构·python·numpy·pandas
Python大数据分析@28 分钟前
如何理解Python中的yield用法?
python
x***J34829 分钟前
算法竞赛训练方法
算法
前端小L32 分钟前
图论专题(十六):“依赖”的死结——用拓扑排序攻克「课程表」
数据结构·算法·深度优先·图论·宽度优先
前端小L32 分钟前
图论专题(十三):“边界”的救赎——逆向思维解救「被围绕的区域」
数据结构·算法·深度优先·图论
风筝在晴天搁浅37 分钟前
代码随想录 738.单调递增的数字
数据结构·算法
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 108: 01背包
数据结构·算法·leetcode·深度优先·动态规划
源码之家1 小时前
基于python新闻数据分析可视化系统 Hadoop 新闻平台 爬虫 情感分析 舆情分析 可视化 Django框架 vue框架 机器学习 大数据毕业设计✅
大数据·爬虫·python·数据分析·毕业设计·情感分析·新闻