基于非线性收敛因子和局部扰动的鲸鱼算法-附代码
基于非线性收敛因子和局部扰动的鲸鱼算法
摘要:为提高鲸鱼算法的收敛速度和寻优精度,提出一种基于非线性收敛因子和局部扰动的鲸鱼优化算法。引入非线性收敛因子,提高鲸鱼种群的多样性,扩大鲸鱼搜索食物的范围;在鲸鱼包围捕食阶段,采用一种局部扰动策略,使算法在跳出局部极值时的能力增强,提高算法的寻优精度。
1.鲸鱼优化算法
基础鲸鱼算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107559167
2. 改进鲸鱼优化算法
2.1 非线性收敛因子
从基本鲸鱼算法中的式 (5)可以看出,收敛因子a 从2 线性递减到 0 , 在整个算法中递减速度相同, 这样大大降 低了鲸鱼种群的多样性和灵活性, 使算法前期搜索和后期 寻优失去平衡。为了解决该问题, 引入了非线性收玫因子。 其具体表达式如下
a
=
1
−
(
t
T
max
)
λ
⋅
(
e
+
μ
)
+
θ
⋅
κ
a=1-\left(\frac{t}{T_{\max }}\right)^{\lambda} \cdot(e+\mu)+\theta \cdot \kappa
a=1−(Tmaxt)λ⋅(e+μ)+θ⋅κ
式中:
λ
、
μ
、
κ
\lambda 、 \mu 、 \kappa
λ、μ、κ 为常量系数。
θ
\theta
θ 是区间
[
0
,
1
]
[0,1]
[0,1] 之间的随机 数,
t
t
t 是当前迭代次数,
T
max
T_{\max }
Tmax 是最大迭代次数,
a
a
a 是自然常 数。收玫因子
a
a
a 随进化迭代次数的增加而非线性递减, 在 初期
a
a
a 的衰减程度较低, 鲸鱼能够以较大步幅移动, 更好 地寻找全局最优解。到了后期,
a
a
a 的衰减程度提高, 鲸鱼 移动步幅减小, 可以更加精确地寻找最优解。从而更有效 地平衡了全局搜索时的开发能力与局部搜索时的挖掘能力。
2.2 局部扰动
从基本鲸鱼算法的包围猎物阶段中可以看出, 鲸鱼个 体以当前最优个体作为参照物进行移动, 这样的移动方式 极易使算法陷入局部最优解。为了进一步提高算法全局收 敛精度, 避免算法陷入局部极值。在包围猎物阶段鲸鱼个 体进行位置更新后, 增加了随机扰动机制。其具体扰动方 式如下
ξ
=
ξ
max
−
(
ξ
max
−
ξ
min
)
⋅
sin
(
π
2
⋅
t
T
max
)
x
l
=
ξ
⋅
x
f
\begin{gathered} \xi=\xi_{\max }-\left(\xi_{\max }-\xi_{\min }\right) \cdot \sin \left(\frac{\pi}{2} \cdot \frac{t}{T_{\max }}\right) \\ x_{l}=\xi \cdot x_{f} \end{gathered}
ξ=ξmax−(ξmax−ξmin)⋅sin(2π⋅Tmaxt)xl=ξ⋅xf
式中:
x
f
x_{f}
xf 是末扰动前的鲸鱼个体,
x
l
x_{l}
xl 是扰动后的鲸鱼个体。
t
t
t 是当前迭代次数,
T
max
T_{\max }
Tmax 是最大迭代次数。
ξ
\xi
ξ 是非线性扰动系 数,
ξ
max
\xi_{\text {max }}
ξmax 和
ξ
min
\xi_{\text {min }}
ξmin 分别为
ξ
\xi
ξ 的最大值和最小值。式 (10) 为凹函 数, 前期的扰动力度较大, 可使算法快速跳出局部最优值, 则后期的扰动力度相对较小, 可以更好平衡算法前后期的 搜索能力。
算法伪代码:
(1) 初始化参数, 初始化鲸鱼个体数
n
n
n, 最大迭代次 数
T
max
T_{\max }
Tmax 以及空间维数
d
d
d 。
(2) 随机产生每只鲸鱼的位置
x
i
x_{i}
xi, 根据适应度函数
f
(
x
)
f(x)
f(x), 求出每只鲸鱼的适应度函数值, 并且找出当前最 优值
f
min
f_{\min }
fmin 和当前最优鲸鱼位置
x
∗
x_{*}
x∗ 。
(3) while
(
t
<
T
max
)
\left(t<T_{\max }\right)
(t<Tmax)
(4) for
i
=
1
:
n
i=1: n
i=1:n
(5)
\quad
if
p
<
0.5
p<0.5
p<0.5
(6) if
abs
(
A
)
>
=
1
\operatorname{abs}(\mathrm{A})>=1
abs(A)>=1
(7) 执行式 (7)
(8) elseifabs
(
(
( A
)
<
1
)<1
)<1
(9)执行式(1)、式(2)、式(10)、式 (11)
(10) end
(11) elseif
p
>
=
0.5
p>=0.5
p>=0.5
(12) 执行式 (7)
(13) end
(14) end
(15)
t
=
t
+
1
\quad t=t+1
t=t+1
(16) end
3.实验结果
4.参考文献
[1]于俊洋,高宁杰,李涵.基于非线性收敛因子和局部扰动的鲸鱼算法[J].计算机工程与设计,2019,40(10):2861-2866.
5.Matlab代码
6.Python代码
相关文章
- 录屏回放+代码开源|2022江苏气象AI算法挑战赛
- 最简单的分类算法之一:KNN(原理解析+代码实现)[通俗易懂]
- 无监督学习的12个最重要的算法介绍及其用例总结(附链接)
- 算法刷题笔记04:Hash Table
- 25行代码实现完整的RSA算法
- Prim算法简易教程(~简单易懂,附最详细注释代码)
- VBA: 最优化算法(二分法、黄金分割法、循环迭代法)的代码实现
- 论文算法伪代码word_论文伪代码要配文字描述吗
- 【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
- ceres之LM算法
- MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正|附代码数据
- ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测|附代码数据
- 串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码)
- 三面“有赞”Java岗斩获offer:Spring+JVM+并发锁+分布式+算法
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-贪心算法
- python AES算法模块进行加密解密的代码片段详解编程语言
- python实现的堆排序算法代码详解编程语言
- JS维吉尼亚密码算法实现代码
- php排序算法(冒泡排序,快速排序)
- Java实现几种常见排序算法代码
- c#快速排序算法
- python插入排序算法的实现代码
- C#的3DES加密解密算法实例代码
- 一组PHP可逆加密解密算法实例代码
- C#算法之全排列递归算法实例讲解
- 数据挖掘之Apriori算法详解和Python实现代码分享