灰狼算法(Grey Wolf Optimizer, GWO)是一种受自然界灰狼群体狩猎行为启发的智能优化算法。2014年由Mirjalili等人首次提出,它模拟了灰狼群体的社会等级制度和协作狩猎机制。与遗传算法、粒子群算法等传统优化方法相比,GWO具有参数少、收敛速度快、易于实现等显著优势。
在自然界中,灰狼群体通常按照严格的等级制度组织:α狼是领导者,负责决策;β狼是次级领导者,协助α狼;δ狼是普通成员;ω狼则处于等级最底层。这种社会结构在算法中被抽象为一种高效的搜索机制,使得GWO在解决复杂优化问题时表现出色。
灰狼算法将搜索代理(候选解)分为四个等级:
这种等级划分使得算法能够在探索(全局搜索)和开发(局部搜索)之间取得良好平衡。在迭代过程中,ω狼的位置会根据α、β、δ狼的位置进行更新,模拟了灰狼群体协作狩猎的行为模式。
灰狼算法的核心在于三个数学公式:
距离计算:
D = |C·X_p(t) - X(t)|
位置更新:
X(t+1) = X_p(t) - A·D
系数向量:
A = 2a·r_1 - a
C = 2·r_2
其中:
设定参数:
初始化种群:
X_i = lb + rand×(ub - lb), i=1,2,...,N
其中lb,ub分别为搜索空间的下界和上界
提示:种群规模不宜过小,否则可能陷入局部最优;也不宜过大,以免增加计算负担。
对于每一代t=1到T_max:
位置更新是算法的核心操作,具体步骤如下:
计算三个主导狼对当前狼的影响:
D_α = |C_1·X_α - X|
D_β = |C_2·X_β - X|
D_δ = |C_3·X_δ - X|
计算三个位置分量:
X_1 = X_α - A_1·D_α
X_2 = X_β - A_2·D_β
X_3 = X_δ - A_3·D_δ
新位置为三个分量的平均值:
X_new = (X_1 + X_2 + X_3)/3
这种加权平均的方式既考虑了多个优秀个体的引导作用,又保持了种群的多样性。
种群规模N:
收敛参数a:
系数A和C:
为提高算法性能,可采用自适应参数调整:
非线性收敛参数:
a = 2×(1 - (t/T_max)^k), k>0
k控制递减速度,通常k=0.5-2
动态种群规模:
初期较大以增强探索,后期减小以提高收敛速度
随机权重调整:
C = 2×rand×(1 - t/T_max) + 1
混合策略:
自适应机制:
并行化实现:
针对离散优化问题,可通过转换函数将连续GWO改造为二进制版本:
Sigmoid转换:
X_new = 1/(1 + exp(-X_cont))
阈值判断:
if rand < S(X_cont) then X_bin=1 else X_bin=0
这种变体已成功应用于特征选择、背包问题等离散优化场景。
以经典的Sphere函数为例:
f(x) = Σx_i^2, x_i∈[-100,100]
实现步骤:
测试结果表明,GWO通常能在300代内收敛到10^-30精度,显著优于基本PSO算法。
某机械设计问题:压缩弹簧设计优化
目标:最小化弹簧重量
约束条件:
GWO参数设置:
N=30, T_max=200
处理约束:罚函数法
结果对比:
向量化计算:
避免循环,使用矩阵运算加速
python复制# 示例:计算所有个体与α狼的距离
D_alpha = np.abs(C1 * X_alpha - X)
边界处理:
采用反射法或随机重置处理越界个体
python复制# 反射法示例
X_new[X_new < lb] = 2*lb - X_new[X_new < lb]
X_new[X_new > ub] = 2*ub - X_new[X_new > ub]
适应度缓存:
避免重复计算已评估个体的适应度
早熟收敛:
振荡现象:
性能下降:
在CEC2017测试函数集上的表现:
| 算法 | 参数数量 | 收敛速度 | 实现复杂度 | 适用场景 |
|---|---|---|---|---|
| GWO | 少(主要a) | 快 | 简单 | 连续优化 |
| PSO | 较多 | 中等 | 中等 | 广泛 |
| GA | 多 | 慢 | 复杂 | 离散问题 |
| DE | 中等 | 快 | 中等 | 高维问题 |
GWO的主要优势在于参数少、易于实现,特别适合快速原型开发和中低维优化问题。