
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏: 【启发式算法】(12)---《狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍》
随着仿真、金融、能源、航天等领域对优化模型精度要求的不断提高,决策变量维度迅速膨胀,传统梯度类方法面临“维数灾难”与“局部陷阱”双重瓶颈。近二十年来,群体智能(Swarm Intelligence)以无梯度、高并行、鲁棒性强等优势异军突起,其中粒子群(PSO)、蚁群(ACO)、人工鱼群(AFSA)等算法已被广泛引用,但在 100 维以上的多峰问题中仍易出现早熟收敛。
2013 年,吴虎胜等受狼群捕食行为启发,在《系统工程与电子技术》提出狼群算法(Wolf Pack Algorithm, WPA)。该算法通过抽象“游走—召唤—围攻”三层协作机制,并引入“胜者为王”的头狼更新规则与“强者生存”的种群淘汰策略,在 15 座国际通用测试函数、最高 200 维场景下取得显著优于 PSO、AFSA、GA 的综合表现,为高维复杂优化提供了新的可行范式。
想象你是一只狼。 冬天到了,雪原上食物稀缺,你和同伴必须合作找到那只肥美的鹿。你们不会一拥而上,而是分工明确:

把这套“狼群战术”写成数学,就是 2013 年吴虎胜等人在《系统工程与电子技术》提出的 狼群算法(Wolf Pack Algorithm, WPA)。
初始化 → 探狼游走 → 猛狼奔袭 → 合围攻击 → 强者生存(淘汰弱狼)

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

xᵢᵈᵖ = xᵢᵈ + sin(2πp/h) · step_r , p=1,…,h 若任一方向气味浓度高于头狼,则立即替换头狼并转入召唤阶段;否则继续游走直至达到最大游走次数 T_max。
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)xᵢ(k+1) = xᵢ(k) + λ · step_c · (g(k) − xᵢ(k)) λ∼U(−1,1) 保证各向同性搜索。若新位置气味提升则接受,否则保持原状态。
每代淘汰适应度最差的 R = uniform[N/(2β), N/β] 匹狼,并随机生成等量新个体,以维持多样性并防止早熟。
引理 1 WPA 种群序列 {Q_k} 为有限齐次马尔可夫链。 引理 2 该链不可约、非周期且正常返,故为遍历链。 引理 3 若进化算法满足“任意状态可达”且“种群单调不劣化”,则以概率 1 收敛至全局最优。 定理 WPA 满足上述两条件,因此具有概率 1 全局收敛性。
论文用马尔可夫链证明: 狼群状态序列是“有限、齐次、遍历”的,而且单调不劣化,所以 WPA 以概率 1 收敛到全局最优。 (非数学专业读者可直接记结论:它理论上不会“集体犯傻”。)
实验测试集设计:
覆盖 2–200 维、单峰/多峰、可分/不可分共 15 个经典函数,例如 Sphere、Rastrigin、Ackley、Quadric 等。
函数特色 | 例子 | 维度 | PSO | GA | FSA | WPA |
|---|---|---|---|---|---|---|
低维单峰 | Matyas | 2 | ✅ | ✅ | ✅ | ✅ |
30 维单峰 | Sphere | 30 | 偶尔失效 | 失效 | 失效 | 100% 成功率 |
200 维多峰 | Ackley | 200 | 误差 2.0+ | 误差 18+ | 误差 20+ | 误差 ≈ 0 |
耗时 | 中等 | 慢 | 最慢 | 比 PSO 还快一丢丢 |
结论: 维数越高、峰越多,WPA 越香!
"""《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)值得注意的是,α 与 β 在限定区间内随机取值即可,对性能不敏感,显著降低了调参难度。
参数 | 作用 | 推荐范围 | 过大后果 | 过小后果 |
|---|---|---|---|---|
距离判定因子 ω | 控制猛狼何时转围攻 | 200–1000 | 很难合围,迭代暴涨 | 合围太早,粗粗糙糙 |
步长因子 S | 控制精细程度 | 200–1200 | 步长太小,跑不动 | 步长大,漏最优 |
WPA 的隐藏优点:α、β 在区间内随机取即可,对最终成绩不敏感,手残党友好。
什么时候用 WPA?
# 环境配置
Python 3.11.5
torch 2.1.0
torchvision 0.16.0
gym 0.26.2现存局限:
狼群算法通过“游走—召唤—围攻”三层协作以及“胜者为王、强者生存”的演化机制,在全局勘探与局部开采之间实现了动态平衡。理论分析与大量实验共同表明,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.
更多启发式算法文章,请前往:【启发式算法】专栏
博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨