采用动态权重和概率扰动策略改进的灰狼优化算法-附代码

本文提出了一种改进的灰狼优化算法,通过引入基于GWO系数的动态权重因子,调整位置更新,解决局部最优问题。同时,采用概率扰动策略增强种群多样性,有效避免收敛,提高搜索精度。实验结果展示了新算法在优化问题上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用动态权重和概率扰动策略改进的灰狼优化算法


摘要: 针对基本灰狼优化(GWO)算法存在易陷入局部最优,进而导致搜索精度偏低的问题,提出了一种改进的GWO(IGWO)算法。一方面,通过引入由 GWO 算法系数向量构成的权值因子,动态调整算法的位置向量更新方程;另一方面,通过采用概率扰动策略,增强算法迭代后期的种群多样性,从而提升算法跳出局部最优的能力。

1.灰狼优化算法

基础灰狼算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107716390

2. 改进灰狼优化算法

2.1 引入权值因子

基本 GWO 算法通过计算三个最佳灰狼位置的平均值来更新灰狼位置,这种策略并没有考虑三头狼在群体狩猎活动中的贡献度问题。由于 GWO 算法的 狼 α 并不一定是全局最优解,这时在不断迭代中,随着其余狼 ω 向这三头狼逼近,这就容易陷入局部最优 。本文从最佳灰狼贡献问题角度设计一种权重因子,用来提升GWO算法的寻优能力。由于GWO算法中的系数向量 A 和 C 是动态随机的,而权重因子也应该随着寻优过程非线性调整变化,为此本文设计的权重因子来源于系数向量 A A A C C C 。在基本 G W O \mathrm{GWO} GWO 算法中, A 1 、 A 2 、 A 3 A_{1} 、 A_{2} 、 A_{3} A1A2A3 以及 C 1 C_{1} C1 C 2 、 C 3 \boldsymbol{C}_{2} 、 \boldsymbol{C}_{3} C2C3 是不相同的,在这里为了保证权重因子更新的相关联 性, 设计 A 1 、 A 2 \boldsymbol{A}_{1} 、 \boldsymbol{A}_{2} A1A2 A 3 \boldsymbol{A}_{3} A3 相同, C 1 、 C 2 \boldsymbol{C}_{1} 、 \boldsymbol{C}_{2} C1C2 C 3 \boldsymbol{C}_{3} C3 相同, 如下:
A 1 = A 2 = A 3 = 2 a ⋅ r 1 − a C 1 = C 2 = C 3 = 2 r 2 \begin{aligned} &\boldsymbol{A}_{1}=\boldsymbol{A}_{2}=\boldsymbol{A}_{3}=2 a \cdot \boldsymbol{r}_{1}-a \\ &\boldsymbol{C}_{1}=\boldsymbol{C}_{2}=\boldsymbol{C}_{3}=2 \boldsymbol{r}_{2} \end{aligned} A1=A2=A3=2ar1aC1=C2=C3=2r2
那么, 设计的位置向量权重因子分别为:
w 1 = ∣ A 1 ⋅ C 1 ∣ ∣ A 1 ⋅ C 1 ∣ + ∣ A 2 ⋅ C 2 ∣ + ∣ A 3 ⋅ C 3 ∣ = 1 3 w 2 = ∣ A 2 ⋅ C 2 ∣ w 1 + ∣ A 2 ⋅ C 2 ∣ + ∣ A 3 ⋅ C 3 ∣ = 3 ∣ A 1 ⋅ C 1 ∣ 1 + 6 ∣ A 1 ⋅ C 1 ∣ \begin{aligned} &w_{1}=\frac{\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|+\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\frac{1}{3} \\ &w_{2}=\frac{\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|}{w_{1}+\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\frac{3\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{1+6\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|} \end{aligned} w1=A1C1+A2C2+A3C3A1C1=31w2=w1+A2C2+A3C3A2C2=1+6A1C13A1C1
w 3 = ∣ A 3 ⋅ C 3 ∣ w 1 + w 2 + ∣ A 3 ⋅ C 3 ∣ = 18 ∣ A 1 ⋅ C 1 ∣ 2 + 3 ∣ A 1 ⋅ C 1 ∣ 18 ∣ A 1 ⋅ C 1 ∣ 2 + 18 ∣ A 1 ⋅ C 1 ∣ + 1 \begin{aligned} w_{3}=& \frac{\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}{w_{1}+w_{2}+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\\ & \frac{18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|^{2}+3\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|^{2}+18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|+1} \end{aligned} w3=w1+w2+A3C3A3C3=18A1C12+18A1C1+118A1C12+3A1C1
因此,得到新的位置更新公式为:
X ( t + 1 ) = w 1 X 1 + w 2 X 2 + w 3 X 3 3 \boldsymbol{X}(t+1)=\frac{w_{1} \boldsymbol{X}_{1}+w_{2} \boldsymbol{X}_{2}+w_{3} \boldsymbol{X}_{3}}{3} X(t+1)=3w1X1+w2X2+w3X3

2. 2 概率扰动策略

随着 GWO 算法迭代次数的不断增加,算法寻优逐渐趋于收敛,一旦收敛于局部最优很难跳出。在算法种群更新中加入扰动机制可以有效提升算法跳出局部最优的能力 。本文设计带有一定概率的扰动来增强算法寻优后期的种群多样性,为摆脱局部收敛创造有利条件。对于概率扰动策略,在以往的一些优化算法中有所研究,如胡宏梅等 提出采用随机概率扰动方式作为基本粒子群算法的全局更新条件,从而增强全局寻优区域的搜索能力,但它采用的是模拟退火算法的退火概率,计算过于复杂;张伟提出在差分进化算法中运用小概率扰动操作来增强种群的多样性,但它采用固定的概率形式,无法在不同迭代过程中充分发挥扰动策略。为此,本文设计一种简便且高效的扰动概率公式为:
P = ( G − 1 ) e ( t − 1 ) / T 4 G P=\frac{(G-1) \mathrm{e}^{(t-1) / T}}{4 G} P=4G(G1)e(t1)/T
其中: P P P 为扰动概率; G G G 为优化问题的维度; T T T 为最大迭代次 数。算法迭代初期, 扰动概率较小, 以便算法快速寻找全局最 优解; 算法迭代后期, 扰动概率增加, 增强了种群多样性。一般 来说 T T T 是一个较大的常数, 当算法迭代至后期 t → T t \rightarrow T tT, 扰动概 率 P = ( 1 − 1 / G ) e ( t / T − 1 / T ) 4 → ( 1 − 1 / G ) e 4 P=\frac{(1-1 / G) \mathrm{e}^{(t / T-1 / T)}}{4} \rightarrow \frac{(1-1 / G) \mathrm{e}}{4} P=4(11/G)e(t/T1/T)4(11/G)e 。灰狼个体进行扰动 的公式为:
M ( t + 1 ) = l b + r 3 ⋅ ( u b − l b ) ; r 3 < P \boldsymbol{M}(t+1)=\boldsymbol{l b}+\boldsymbol{r}_{3} \cdot(\boldsymbol{u} \boldsymbol{b}-\boldsymbol{l b}) ; \quad \boldsymbol{r}_{3}<P M(t+1)=lb+r3(ublb);r3<P
其中: M \boldsymbol{M} M 为扰动后的个体; l b \boldsymbol{l b} lb 为灰狼个体位置的下界; u b \boldsymbol{u} \boldsymbol{b} ub 为灰 狼个体位置的上界; ; r 3 ; \boldsymbol{r}_{3} ;r3 [ 0 , 1 ] [0,1] [0,1] 之间取值的随机向量。扰动后 的灰狼个体基于贪婪机制进行更新, 更新公式为:
X ( t + 1 ) = { M ( t + 1 ) , f ( M ( t + 1 ) ) < f ( X ( t + 1 ) ) X ( t + 1 ) ,  其他  \boldsymbol{X}(t+1)= \begin{cases}\boldsymbol{M}(t+1), & f(\boldsymbol{M}(t+1))<f(\boldsymbol{X}(t+1)) \\ \boldsymbol{X}(t+1), & \text { 其他 }\end{cases} X(t+1)={M(t+1),X(t+1),f(M(t+1))<f(X(t+1)) 其他 
其中: f ( M ( t + 1 ) ) f(\boldsymbol{M}(t+1)) f(M(t+1)) f ( X ( t + 1 ) ) f(\boldsymbol{X}(t+1)) f(X(t+1)) 分别表示第 t + 1 t+1 t+1 代扰动个 体 M \boldsymbol{M} M 和灰狼个体 X \boldsymbol{X} X 的目标函数值。

3.实验结果

请添加图片描述

4.参考文献

[1]陈闯,Ryad Chellali,邢尹.采用动态权重和概率扰动策略改进的灰狼优化算法[J].计算机应用,2017,37(12):3493-3497+3508.

5.Matlab代码

6.Python代码

### 改进灰狼优化算法并将其与CNN-LSTM集成 #### 灰狼优化器(Grey Wolf Optimizer, GWO)简介 灰狼优化是一种基于群体智能的元启发式优化方法,模拟了灰狼的社会等级制度及其狩猎行为。该算法通过追踪Alpha、BetaDelta三只最佳个体来指导种群中的其他成员向最优解靠近。 为了提高GWO的表现力以及更好地适应复杂的机器学习环境,可以考虑以下几个方面: 1. **引入自适应参数调整机制** 动态调节控制因子a其他影响收敛速度的关键参数能够使搜索过程更加灵活高效。例如,在早期迭代阶段采用较大的步长探索广阔的空间;随着迭代次数增加逐渐减小步长以精细化局部区域内的寻优操作[^1]。 2. **融合多种变异策略增强多样性** 结合差分进化(DE)等其他演化计算技术中优秀的交叉/突变算子有助于打破早熟现象维持种群内部基因交流活跃度从而避免陷入局部极值陷阱。这可以通过周期性地应用某些特定类型的扰动实现,比如高斯噪声注入或是随机交换部分位置信息等方式来进行全局范围内的跳跃尝试新路径的可能性。 3. **利用记忆功能保存历史优秀经验** 设计长期短期两种不同类型的记忆结构用于记录过往遇到过的优良模式以便后续重复利用或借鉴参考。当面临相似的任务情境时可以直接调用之前积累下来的成功案例作为初始猜测加快求解效率减少不必要的盲目摸索时间成本开销。 4. **结合具体应用场景定制化改造** 针对目标函数特性做出针对性修改让其更贴合实际需求场景下的特点规律。对于图像识别领域而言,则可着重加强特征提取环节的设计确保输入到神经网络之前的预处理工作已经充分挖掘出了原始数据集中蕴含的有效表征属性有利于提升最终分类准确性表现水平。 #### CNN-LSTM模型概述 卷积神经网络(Convolutional Neural Network,CNN)擅长捕捉空间上的关联关系而长短时记忆(Long Short-Term Memory,LSTM)则善于处理序列型的时间维度依赖问题两者结合起来形成了一套强大的时空联合建模框架特别适合用来解决视频动作理解预测这类既涉及静态帧间联系又存在动态变化趋势的任务类型。 #### 整合方案设计思路 将经过上述一系列改进措施后的GWO应用于超参设定过程中自动挑选出最适合当前训练集状况的一组配置参数组合包括但不限于批次大小(batch size),隐藏层数量(hidden layer count), 学习率(learning rate)等等重要指标项。与此同时还可以借助于GWO本身的全局搜索能力帮助初始化权重矩阵使得整个网络架构从一开始就处于一个相对较好的起点上进而加速收敛进程缩短达到预期性能所需经历的学习轮次数量。 ```python import torch from torch import nn from sklearn.model_selection import train_test_split from greywolf_optimizer import GreyWolfOptimizer # 假设这是一个实现了改进版GWO API 的库 class CNNGWOLSTM(nn.Module): def __init__(self, gw_params=None): super(CNNGWOLSTM, self).__init__() if gw_params is None: gw_params = {'batch_size': 64, 'hidden_layers': [128], 'lr': 0.001} self.cnn = nn.Sequential( nn.Conv2d(in_channels=..., out_channels=gw_params['cnn_out_ch'], kernel_size=(...)), ... ) self.lstm = nn.LSTM(input_size=sum(gw_params['hidden_layers']), hidden_size=...) self.fc = nn.Linear(...) def forward(self, x): batch_size = x.size()[0] c_out = self.cnn(x.view(-1,...)) r_out = c_out.reshape((batch_size,-1,c_out.shape[-1])) lstm_out,(h_n,c_n)=self.lstm(r_out) fc_in=lstm_out[:,-1,:].squeeze() y=self.fc(fc_in) return y def optimize_with_gwo(data_loader, gw_model_class=CNNGWOLSTM): gwo_instance = GreyWolfOptimizer(objective_function=lambda params: evaluate(params), search_space={'batch_size':[32,64], 'hidden_layers':[[64],[128]], 'lr':[0.001,0.01]}, n_iter=...) best_solution = gwo_instance.optimize() optimized_model = gw_model_class(best_solution.x) return optimized_model X_train,X_val,y_train,y_val=train_test_split(X,y,test_size=.2,stratify=y) train_loader=torch.utils.data.DataLoader(list(zip(X_train.tolist(),y_train)),shuffle=True,batch_size=best_batch_size) val_loader=torch.utils.data.DataLoader(list(zip(X_val.tolist(),y_val))) optimized_cnn_lstm=optimize_with_gwo(train_loader) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值