一种增强型鲸鱼优化算法-附代码

一种增强型鲸鱼优化算法


摘要:鲸鱼优化算法( whale optimization algorithm,WOA) 具有独特的搜索机制,非常适合解决复杂的优化问题。针对基本鲸鱼优化算法收敛速度慢、容易陷入局部最优的缺点,提出了一种增强型鲸鱼优化算法( enhanced whale optimization algorithm,EWOA ) 。首先通过引入非线性时变的自适应权重,提升了鲸鱼算法在全局探索和局部寻优阶段的性能; 其次在鲸鱼算法的收缩包围阶段引入差分变异微扰因子,避免了算法出现早熟收敛现象; 另外改进了鲸鱼个体的对数螺旋搜索方式,提高了算法遍历求解的能力。

1.鲸鱼优化算法

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

2. 改进鲸鱼优化算法

2.1 非线性时变的自适应权重

在基本 W O A \mathrm{WOA} WOA 算法中, 当 ∣ A ∣ ≥ 1 |\mathrm{A}| \geq 1 A1 时鲸鱼进入搜索受食 阶段, 需要尽可能的扩大搜索范围, 此时较大的 A 值可以使 鲸鱼个体维持较好的探索能力; 在 ∣ A ∣ < 1 |\mathrm{A}|<1 A<1 时, WOA 算法会 根据最优解的位置尽量实现更高的寻优精度, 较小的 A 值会 对应更佳的局部开发能力。也就是说 A \mathrm{A} A 值的变化直接影响 着算法不同阶段的全局探索能力和局部开发能力。
在基本鲸鱼优化算法中, A A A 的大小是由控制参数 a a a 来决 定, 可以引入一个随迭代次数变化的权重因子来控制 a a a 的大 小变化。本文提出了一种非线性时变的自适应权重, 其定义 如下​
KaTeX parse error: Expected 'EOF', got '_' at position 82: … t}{\text { Max_̲iter }}\right)\…
式 (11) 中的 k k k 为调节系数。
本文所提权重因子在迭代开始阶段下降较缓, 算法能维 持较好的全局探索能力; 在经过一定的迭代次数后权值迅速 下降, 使得算法在局部开发阶段能更精细搜索最优解。另外 在 W O A \mathrm{WOA} WOA 算法中因子 D \mathrm{D} D D ′ \mathrm{D}^{\prime} D 控制着当前个体与目标个体之间 的距离, 由文献 [7] 可知改变 D 和 D 变化时的速率和大小也 能调整算法寻优的精度和速度。

因此引入新的非线性时变自适应权重因子 w w w 后的式 (2) 和式 (9) 更新为
X ( t + 1 ) = X rand  ( t ) − w A D (12) X(t+1)=X_{\text {rand }}(t)-w A D \tag{12} X(t+1)=Xrand (t)wAD(12)

X ( t + 1 ) = w D ′ e b l cos ⁡ ( 2 π l ) + X best  ( t ) (13) \begin{gathered} X(t+1)=w D^{\prime} e^{b l} \cos (2 \pi l)+X_{\text {best }}(t) \end{gathered}\tag{13} X(t+1)=wDeblcos(2πl)+Xbest (t)(13)

2.2 差分变异微扰因子

在收缩包围阶段, 鲸鱼个体主要是利用当前最佳鲸鱼个 体的位置信息并向其靠近, 根据式 (6) 和 (7) 来更新自己的 位置。在算法的求解过程中不断在最优解周围产生新的可 行解, 随着迭代过程的不断进行, 种群多样性会不断损失, 算 法也容易出现早熟收玫现象。
针对基本鲸鱼算法的这个缺点, 本文借鉴了差分进化算 法变异算子的思想, 在收缩包围阶段引入了一个差分变异微 扰因子, 其定义如下
λ = F ( X b e s t ( t ) − X ( t ) ) (14) \lambda=F\left(X_{b e s t}(t)-X(t)\right)\tag{14} λ=F(Xbest(t)X(t))(14)
式中 F F F 为变异尺度因子。
引入差分变异微扰因子的 (7) 式更新为
X ( t + 1 ) = X best  ( t ) − A D + λ (15) X(t+1)=X_{\text {best }}(t)-A D+\lambda \tag{15} X(t+1)=Xbest (t)AD+λ(15)
在鲸鱼的收缩包围阶段通过引入差分变异微扰因子, 可 以使得鲸鱼个体更容易跳出局部最优, 增加群体多样性, 提 高局部寻优时的求解精度。

2.3 改进的螺旋更新方式

基本 WOA 算法在螺旋更新位置阶段, 鲸鱼个体在向当 前最佳鲸鱼个体位置前进时采取的是对数螺旋更新方式, 文 献指出对数螺旋搜索方式并不一定是最佳的,如果螺 旋步进间距超过搜索范围,会使得算法不能遍历整个搜索空 间, 从而降低了算法寻优的各态历经性。本文将对数螺旋搜 索方式替换为阿基米德螺旋更新方式, (13) 式进一步改进 为
X ( t + 1 ) = w D ′ ( b l ) cos ⁡ ( 2 π l ) + X b e s t ( t ) (16) X(t+1)=w D^{\prime}(b l) \cos (2 \pi l)+X_{b e s t}(t) \tag{16} X(t+1)=wD(bl)cos(2πl)+Xbest(t)(16)
式中 b b b 是常量系数, l l l [ − 1 , 1 ] [-1,1] [1,1] 之间的随机数。

请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]冯文涛,宋科康.一种增强型鲸鱼优化算法[J].计算机仿真,2020,37(11):275-279+357.

5.Matlab代码

6.Python代码

鲸鱼优化算法(Beluga whale optimization,BWO)是一种基于仿生学的优化算法,模拟了白鲸游泳、觅食和“鲸鱼坠落”行为。而双向长短期记忆(BiLSTM)是一种常用于时间序列预测的神经网络模型。将这两者结合起来,可以使用BWO算法来优化BiLSTM的权值和阈值,从而提高时间序列预测的准确性。 以下是使用BWO算法优化BiLSTM的示例代码: ```python # 导入必要的库 import numpy as np from keras.models import Sequential from keras.layers import Dense, LSTM, Bidirectional from keras.optimizers import Adam from bwo import BWO # 导入BWO算法实现 # 构建BiLSTM模型 model = Sequential() model.add(Bidirectional(LSTM(64, activation='relu'), input_shape=(n_steps, n_features))) model.add(Dense(1)) model.compile(optimizer=Adam(learning_rate=0.01), loss='mse') # 定义适应度函数 def fitness_func(solution): # 将解向量转换为权值和阈值 w1 = solution[:n_features * n_units].reshape((n_features, n_units)) b1 = solution[n_features * n_units:n_features * n_units + n_units] w2 = solution[n_features * n_units + n_units:].reshape((n_units * 2, 1)) b2 = solution[-1] # 设置权值和阈值 model.layers[0].set_weights([w1, b1, w2, b2]) # 训练模型并计算MAE model.fit(X_train, y_train, epochs=50, verbose=0) y_pred = model.predict(X_test) mae = np.mean(np.abs(y_test - y_pred)) return 1 / (mae + 1e-6) # 定义BWO算法参数 n_agents = 30 n_iterations = 100 lb = [-1] * (n_features * n_units + n_units * 2 + 1) ub = [1] * (n_features * n_units + n_units * 2 + 1) # 运行BWO算法 bwo = BWO(fitness_func, lb, ub, n_agents, n_iterations) best_solution, best_fitness = bwo.run() # 输出最优解和最优适应度 print('Best solution:', best_solution) print('Best fitness:', best_fitness) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值