基于混沌搜索策略的鲸鱼优化算法

2023-11-10

一、理论基础

1、鲸鱼优化算法

请参考这里

2、基于混沌搜索策略的鲸鱼优化算法

(1)混沌反向学习初始化策略

为了增强种群的多样性并提高求解效率,为算法进行全局搜索奠定多样性基础,CWOA算法采用混沌反向学习初始化策略。首先,利用混沌变量的随机性、遍历性和规律性特征,产生具有较好多样性的混沌初始种群;其次,通过对混沌初始种群及其反向种群进行排序选择,将适应度值较优的解作为初始种群,提高求解效率。
假设种群规模为 N N N,采用具有较好遍历均匀性和较快迭代速度的Tent混沌映射在 D D D维欧氏空间中生成混沌序列 y = { y d , d = 1 , 2 , ⋯   , D } , y d = { y i d , i = 1 , 2 , ⋯   , N } y =\{y_d, d = 1, 2, \cdots, D\}, y_d =\{y_{id}, i =1, 2, \cdots, N\} y={yd,d=1,2,,D},yd={yid,i=1,2,,N},Tent混沌映射函数表达式为 y i + 1 , d = { 2 y i d ,     y i d < 0.5 2 ( 1 − y i d ) , y i d ≥ 0.5 (1) y_{i+1,d}=\begin{dcases}2y_{id},\quad\quad\quad\,\,\, y_{id}<0.5\\2(1-y_{id}),\quad y_{id}\geq0.5\end{dcases}\tag{1} yi+1,d={2yid,yid<0.52(1yid),yid0.5(1)将混沌序列映射到解空间中,得到种群 X = { X i , i = 1 , 2 , ⋯   , N } , X i = { X i d , d = 1 , 2 , ⋯   , D } X=\{X_i, i = 1, 2, \cdots, N\}, X_i = \{X_{id}, d = 1, 2,\cdots,D\} X={Xi,i=1,2,,N},Xi={Xid,d=1,2,,D},种群个体 X i d X_{id} Xid表示为 X i d = X min ⁡ d + y i d ⋅ ( X max ⁡ d − X min ⁡ d ) (2) X_{id}=X_{\min d}+y_{id}\cdot(X_{\max d}-X_{\min d})\tag{2} Xid=Xmind+yid(XmaxdXmind)(2)其中, X i d X_{id} Xid为第 i i i个种群个体的第 d d d维值, X min ⁡ d X_{\min d} Xmind X max ⁡ d X_{\max d} Xmaxd X i d X_{id} Xid的搜索上下界。
由种群 X X X计算反向种群 O X = { O X i , i = 1 , 2 , ⋯   , N } , O X i = { O X i d , d = 1 , 2 , ⋯   , D } {\rm{OX}}=\{{\rm{OX}}_i,i=1,2,\cdots,N\},{\rm{OX}}_i=\{{\rm{OX}}_{id},d=1,2,\cdots,D\} OX={OXi,i=1,2,,N},OXi={OXid,d=1,2,,D},反向种群个体 O X i d {\rm{OX}}_{id} OXid表示为 O X i d = X min ⁡ d + X max ⁡ d − X i d (3) {\rm{OX}}_{id}=X_{\min d}+X_{\max d}-X_{id}\tag{3} OXid=Xmind+XmaxdXid(3)种群 X X X与反向种群 O X {\rm{OX}} OX合并,得到新种群 { X ⋃ O X } \{X\bigcup\rm{OX}\} {XOX}。计算新种群的目标函数值并排序,选取其中适应度值最好的 N N N个个体作为初始种群。

(2)收敛因子和惯性权重混沌扰动协同更新策略

本文采用具有较好遍历性的逻辑自映射函数产生混沌序列,进而对收敛因子进行混沌
扰动,提出一种带混沌扰动的收敛因子非线性时变更新策略,收敛因子更新公式为 a = a i n i t i a l ⋅ ∣ y t ∣ − ( a i n i t i a l − a f i n a l ) ⋅ tan ⁡ ( 0.875 ⋅ t t max ⁡ ) (4) a=a_{\rm{initial}}\cdot|y^t|-(a_{\rm{initial}}-a_{\rm{final}})\cdot\tan\left(0.875\cdot\frac{t}{t_{\max}}\right)\tag{4} a=ainitialyt(ainitialafinal)tan(0.875tmaxt)(4)其中, a i n i t i a l a_{\rm{initial}} ainitial a f i n a l a_{\rm{final}} afinal分别为收敛因子 a a a的初值和终值; y t = 1 − 2 ( y t − 1 ) 2 , y t ∈ ( − 1 , 1 ) y^t = 1− 2(y^{t−1})^2, y^t\in(−1, 1) yt=12(yt1)2,yt(1,1)为自逻辑映射函数产生的混沌序列。带混沌扰动的收敛因子随迭代次数的变化如图1所示。
在这里插入图片描述

图1 收敛因子变化值

通过施加带混沌扰动的收敛因子非线性时变更新策略,在一定程度上提升了算法性能.然而,当涉及到时变更新策略时,单独依靠收敛因子并不能在种群全局探索能力与局部开发能力之间进行有效平衡。因此,CWOA算法借鉴PSO算法,引入惯性权重配合收敛因子共同调节种群全局探索能力和局部开发能力,惯性权重更新策略同样选择带混沌扰动的非线性时变更新策略。惯性权重更新公式为 ω = ω f i n a l ⋅ ∣ y t ∣ + ( ω i n i t i a l − ω f i n a l ) ⋅ ( t max ⁡ − t t max ⁡ ) 2 (5) \omega=\omega_{\rm{final}}\cdot|y^t|+(\omega_{\rm{initial}}-\omega_{\rm{final}})\cdot\left(\frac{t_{\max}-t}{t_{\max}}\right)^2\tag{5} ω=ωfinalyt+(ωinitialωfinal)(tmaxtmaxt)2(5)其中, ω i n i t i a l \omega_{\rm{initial}} ωinitial ω f i n a l \omega_{\rm{final}} ωfinal分别为惯性权重 ω \omega ω的初值和终值。带混沌扰动的惯性权重随迭代次数的变化如图2所示。
在这里插入图片描述

图2 惯性权重变化值

通过收敛因子和惯性权重混沌扰动协同更新,当前个体的位置更新和螺旋更新位置公式分别为 X t + 1 = ω ⋅ X g b e s t t − A ⋅ ∣ C ⋅ X g b e s t t − X t ∣ (6) X^{t+1}=\omega\cdot X_{\rm{gbest}}^t-A\cdot|C\cdot X_{\rm{gbest}}^t-X^t|\tag{6} Xt+1=ωXgbesttACXgbesttXt(6) X t + 1 = ω ⋅ X g b e s t t + D ⋅ e b l ⋅ cos ⁡ ( 2 π l ) (7) X^{t+1}=\omega\cdot X_{\rm{gbest}}^t+D\cdot e^{bl}\cdot\cos(2\pi l)\tag{7} Xt+1=ωXgbestt+Deblcos(2πl)(7)

(3)最优个体混沌搜索策略

为了减少WOA算法出现早熟收敛现象的概率,CWOA算法通过对当前最优鲸鱼个体施加混沌搜索策略,以当前搜索到最优个体位置向量 X g b e s t t = ( X g b e s t 1 t , X g b e s t 2 t , ⋯   , X g b e s t D t ) X_{\rm{gbest}}^t=(X_{\rm{gbest1}}^t,X_{\rm{gbest2}}^t,\cdots,X_{\rm{gbestD}}^t) Xgbestt=(Xgbest1t,Xgbest2t,,XgbestDt)为基础,将当前最优个体位置向量线性映射到混沌变量的取值区间,利用混沌变量的随机性、遍历性和规律性等内在特性进行混沌优化搜索,最终将获得的混沌优化解线性转换到优化空间,此时的混沌优化本质上是一种深度局部搜索方法。混沌搜索主要步骤如下:
Step 1:按照 y g b e s t   d = 2 ( X g b e s t   d − X min ⁡ d ) X max ⁡ d − X min ⁡ d − 1 y_{{\rm{gbest}}\,d}=\frac{2(X_{{\rm{gbest}}\,d}-X_{\min d})}{X_{\max d}-X_{\min d}}-1 ygbestd=XmaxdXmind2(XgbestdXmind)1将当前最优个体位置向量的每一维映射到区间 ( − 1 , 1 ) (-1,1) (1,1)
Step 2:将混沌变量加载于待搜索的个体变量 y g b e s t   d y_{{\rm{gbest}}\,d} ygbestd,即将 y g b e s t   d y_{{\rm{gbest}}\,d} ygbestd代入逻辑自映射函数 y g b e s t   d t c = 1 − 2 ( y g b e s t   d t c − 1 ) 2 y_{{\rm{gbest}}\,d}^{t_c}=1-2(y_{{\rm{gbest}}\,d}^{t_c-1})^2 ygbestdtc=12(ygbestdtc1)2进行迭代,产生混沌序列 y g b e s t   d t c ( t c = 1 , 2 , ⋯   , t c max ⁡ ) y_{{\rm{gbest}}\,d}^{t_c}(t_c=1,2,\cdots,t_{c\max}) ygbestdtc(tc=1,2,,tcmax)。其中: t c max ⁡ t_{c\max} tcmax为混沌搜索的最大迭代次数, y g b e s t   d t c ∈ ( − 1 , 1 ) y_{{\rm{gbest}}\,d}^{t_c}\in(-1,1) ygbestdtc(1,1)
Step 3:利用式 X g b e s t   d ′ = 1 2 ( X max ⁡ d − X min ⁡ d ) × y g b e s t   d + 1 2 ( X max ⁡ d − X min ⁡ d ) X_{{\rm{gbest}}\,d}'=\frac12(X_{\max d}-X_{\min d})\times y_{{\rm{gbest}}\,d}+\frac12(X_{\max d}-X_{\min d}) Xgbestd=21(XmaxdXmind)×ygbestd+21(XmaxdXmind) y g b e s t   d y_{{\rm{gbest}}\,d} ygbestd载波到原搜索空间邻域内以产生新最优个体位置向量 X g b e s t ′ X_{\rm{gbest}}' Xgbest
Step 4:对 X g b e s t X_{\rm{gbest}} Xgbest X g b e s t ′ X_{\rm{gbest}}' Xgbest进行适应度函数值评价,更新当前最优个体位置。
Step 5:判断是否达到最大混沌搜索次数,如果是,则终止混沌搜索,否则转入Step 2

二、数值实验及比较

为了测试CWOA算法性能,将其与基本WOA和IWOA算法进行对比,实验设置种群规模 N = 30 N=30 N=30,最大迭代次数 t max ⁡ = 500 t_{\max}=500 tmax=500,每种算法均独立运行30次,以文献[1]中表1所示的200维的基准测试函数为例,结果显示如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数:F1
IWOA:最差值: 6.1711e-111, 最优值: 1.3099e-124, 平均值: 2.2263e-112, 标准差: 1.1248e-111, 秩和检验: 1.2118e-12
WOA:最差值: 6.7221e-65, 最优值: 4.2044e-86, 平均值: 2.2408e-66, 标准差: 1.2273e-65, 秩和检验: 1.2118e-12
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F2
IWOA:最差值: 1.7276e-65, 最优值: 4.2003e-73, 平均值: 1.0023e-66, 标准差: 3.3446e-66, 秩和检验: 1.2118e-12
WOA:最差值: 1.1748e-48, 最优值: 6.2355e-57, 平均值: 6.3411e-50, 标准差: 2.384e-49, 秩和检验: 1.2118e-12
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F3
IWOA:最差值: 97.192, 最优值: 0.16104, 平均值: 62.987, 标准差: 28.5035, 秩和检验: 1.2118e-12
WOA:最差值: 97.8221, 最优值: 13.5497, 平均值: 72.5433, 标准差: 27.8119, 秩和检验: 1.2118e-12
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F4
IWOA:最差值: 198.337, 最优值: 197.4125, 平均值: 197.7512, 标准差: 0.22661, 秩和检验: 3.0199e-11
WOA:最差值: 197.7801, 最优值: 197.057, 平均值: 197.4586, 标准差: 0.19964, 秩和检验: 3.0199e-11
CWOA:最差值: 2.6341, 最优值: 1.6302e-07, 平均值: 0.20422, 标准差: 0.60223, 秩和检验: 1
函数:F5
IWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
WOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F6
IWOA:最差值: 0.0062306, 最优值: 8.3145e-05, 平均值: 0.001682, 标准差: 0.0016324, 秩和检验: 3.4742e-10
WOA:最差值: 0.029679, 最优值: 0.00017025, 平均值: 0.0049583, 标准差: 0.0069267, 秩和检验: 8.9934e-11
CWOA:最差值: 0.00030323, 最优值: 2.3623e-06, 平均值: 0.00011608, 标准差: 8.4097e-05, 秩和检验: 1
函数:F7
IWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
WOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F8
IWOA:最差值: 7.9936e-15, 最优值: 8.8818e-16, 平均值: 4.0856e-15, 标准差: 2.3511e-15, 秩和检验: 1.0055e-08
WOA:最差值: 7.9936e-15, 最优值: 8.8818e-16, 平均值: 4.4409e-15, 标准差: 2.799e-15, 秩和检验: 3.7564e-08
CWOA:最差值: 8.8818e-16, 最优值: 8.8818e-16, 平均值: 8.8818e-16, 标准差: 0, 秩和检验: NaN
函数:F9
IWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
WOA:最差值: 1.1102e-16, 最优值: 0, 平均值: 3.7007e-18, 标准差: 2.027e-17, 秩和检验: 0.33371
CWOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F10
IWOA:最差值: 0.37912, 最优值: 0.021824, 平均值: 0.18355, 标准差: 0.087139, 秩和检验: 3.3384e-11
WOA:最差值: 0.17644, 最优值: 0.031639, 平均值: 0.069084, 标准差: 0.032246, 秩和检验: 3.6897e-11
CWOA:最差值: 0.036366, 最优值: 1.4413e-10, 平均值: 0.0014288, 标准差: 0.006701, 秩和检验: 1

实验结果表明,CWOA在收敛速度、收敛精度、鲁棒性方面均较对比算法有较大提升。

三、参考文献

[1] 王坚浩, 张亮, 史超, 等. 基于混沌搜索策略的鲸鱼优化算法[J]. 控制与决策, 2019, 34(9): 1893-1900.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于混沌搜索策略的鲸鱼优化算法 的相关文章

  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • 通过多次合并相同的行向量来构建矩阵

    有没有一个matlab函数可以让我执行以下操作 x 1 2 2 3 然后基于x我想建立矩阵m 1 2 2 3 1 2 2 3 1 2 2 3 1 2 2 3 您正在寻找REPMAT http www mathworks com help t
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 更新:随机将行添加到矩阵中,但遵循严格的规则

    以下是一个更大的矩阵的一部分 0 1 0000 1 0000 77 0000 100 0000 0 0 2500 0 1 0000 1 0000 72 0000 100 0000 0 2500 0 2500 0 1 0000 1 0000
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • 二维随机微分方程 (SDE)

    我第一次研究随机微分方程 我正在寻求模拟和求解二维随机微分方程 模型如下 dp F t p dt G t p dW t where p 是一个 2 1 向量 p theta t phi t F是列向量 F sin theta Psi cos
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 在 Matlab/Java 中将手部运动建模为 3D 曲线

    我只需要一些关于我遇到的问题 在哪里查看等的指导 我在我的一个项目中使用了运动跟踪手套 它返回每个手指和手掌的 X Y 和 Z 值 我想做的是首先根据这些坐标创建每个手指运动的表示 然后将它们每个附加到手掌的运动 以获得手的表示 一旦我完成
  • 用于读取csv写入数组的c++程序;然后操作并打印到文本文件中(已经用 matlab 编写)

    我想知道是否有人可以帮助我 我正在尝试构建一个程序 从 csv 文件中读取大小未知的浮点数大数据块 我已经在 MATLAB 中编写了此代码 但想要编译和分发此代码 因此转向 C 我只是在学习并尝试阅读本文以开始 7 5 19892 4 23
  • MATLAB 问题中的 Parfor

    为什么我不能使用parfor在这段代码中 parfor i 1 r for j 1 N r xr j N r i 1 x i r j 1 end end 这是错误 错误 parfor 中的变量 xr 无法分类 请参阅 MATLAB 中的并行
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • MATLAB 图形渲染:OpenGL 与 Painters?

    当谈到使用哪个渲染器来处理 MATLAB 图形或何时它很重要时 我一无所知 但我遇到过某些示例 其中does matter plot 0 0 ko markersize 50 linewidth 8 set gcf renderer ope

随机推荐