改进的白骨顶鸡优化算法(Improved Coot Optimization Algorithm,ICOOT)(原文作者)

  • 一、算法灵感
  • 二、算法介绍
    • 2.1 初始化
    • 2.2 跟随者位置更新(探索阶段)
      • 2.2.1 主动更新
        • 2.2.1.1 随机运动
        • 2.2.1.2 链式运动
      • 2.2.2 被动更新
    • 2.3 领导者位置更新(开发阶段)
  • 三、改进的白骨顶鸡优化算法
    • 3.1 随机反向学习策略
    • 3.2 复合突变策略
    • 3.3 ICOOT算法的伪代码
  • 四、实验结果
    • 4.1 F4收敛曲线
    • 4.2 F5收敛曲线
    • 4.3 F8收敛曲线
  • 五、参考文献

一、算法灵感

  白骨顶鸡优化算法(Coot Optimization Algorithm, COOT)是2021年提出的一种元启发式优化算法,灵感来源于白骨顶鸡的移动习性。算法对白骨顶鸡种群进行了层级划分,适应度值高者为种群领导者,其余为跟随者。跟随者具有两种位置更新方式,分别为主动更新和被动更新。主动更新过程中,跟随者根据链式运动或随机运动更新位置,并不依赖领导者;在被动更新过程中,跟随者需要向领导者方向发生靠拢。种群需要朝着最佳区域前进,因此在跟随者向领导者靠拢的同时,领导者也要同时不断调整自身位置向最优区域靠近。图1展示了白骨顶鸡的具体移动过程。

图1 白骨顶鸡移动过程

二、算法介绍

2.1 初始化

  在COOT中,初始化白骨顶鸡种群位置的计算公式如下:
CootPos(i)=rand(1,dim⁡).∗(ub−lb)+lb(1)CootPos{{(}}i{{)}} = {{rand(}}1,\dim{{)}}.*{{(}}ub - lb{{)}} + lb \tag{1}CootPos(i)=rand(1,dim).∗(ub−lb)+lb(1)其中,CootPos(i)CootPos(i)CootPos(i) 表示第i只白骨顶鸡的位置,ububub 和 lblblb 分别表示搜索空间的上界和下界,randrandrand 为 000 到 111 之间的随机数,dimdimdim 表示维度。
  从白骨顶鸡种群中随机选取 NLNLNL 只白骨顶鸡作为领导者,记为 LeaderPosLeaderPosLeaderPos,剩余的 NcootNcootNcoot 只白骨顶鸡为跟随者,记为 FollowPosFollowPosFollowPos,NLNLNL 和 NcootNcootNcoot 的计算公式如下:
NL=Npop×P(2)NL = Npop \times P \tag{2}NL=Npop×P(2)Ncoot=Npop−NL(3)Ncoot = Npop - NL \tag{3}Ncoot=Npop−NL(3)其中,NpopNpopNpop 为种群数量,PPP 为参数 0.10.10.1。

2.2 跟随者位置更新(探索阶段)

2.2.1 主动更新

  当一个取值范围为 [0,1][0,1][0,1] 的随机数 rand1>0.5rand_1>0.5rand1​>0.5 时,白骨顶鸡跟随者将选择主动更新策略,主动更新策略包括两种运动方式,通过一个取值范围为 [0,1][0,1][0,1] 的随机数 rand2rand_2rand2​ 来决定选择哪一种运动方式。

2.2.1.1 随机运动

  当 rand2<0.5rand_2<0.5rand2​<0.5 时白骨顶鸡跟随者进行随机运动,为了体现运动的随机性,首先在位置空间内生成一个随机位置 QQQ。其数学公式如下:
Q=rand(1,d).∗(ub−lb)+lb(4)Q = {{rand(}}1,d{{)}}.*{{(}}ub - lb{{)}} + lb \tag{4}Q=rand(1,d).∗(ub−lb)+lb(4)  然后白骨顶鸡个体会向移动到随机生成的位置,其数学公式如下:
FollowPos(i)=FollowPos(i)+A×R1×(Q−FollowPos(i))(5)FollowPos{{(}}i{{)}} = FollowPos{{(}}i{{)}} + A \times {R_1} \times {{(}}Q - FollowPos{{(}}i{{))}} \tag{5}FollowPos(i)=FollowPos(i)+A×R1​×(Q−FollowPos(i))(5)其中,FollowerPos(i)FollowerPos(i)FollowerPos(i) 表示第i个跟随者的位置,R1R_1R1​ 是区间 [0,1][0,1][0,1] 中的随机数,参数 AAA 为在 [0,1][0,1][0,1] 中线性递减的因子。其计算公式如下:
A=1−t×(1/MaxIter)(6)A = 1 - t \times {{(}}1/MaxIter{{)}} \tag{6}A=1−t×(1/MaxIter)(6)其中,ttt 是当前迭代次数,MaxIterMaxIterMaxIter 是最大迭代次数。

2.2.1.2 链式运动

  当 rand2>0.5rand_2>0.5rand2​>0.5 时,执行链式运动,算法将相邻两只白骨顶鸡的中间位置用于实现链式运动。其数学公式如下:
FollowPos(i)=0.5×(FollowPos(i−1)+FollowPos(i))(7)FollowPos{{(}}i{{)}} = 0.5 \times {{(}}FollowPos{{(}}i - 1{{)}} + FollowPos{{(}}i{{))}} \tag{7}FollowPos(i)=0.5×(FollowPos(i−1)+FollowPos(i))(7)其中,FollowPos(i−1)FollowPos(i-1)FollowPos(i−1) 是上一只白骨顶鸡跟随者的位置。

2.2.2 被动更新

  当 rand1<0.5rand_1<0.5rand1​<0.5 时,白骨顶鸡跟随者选择领导者引导更新位置。通常情况下,种群由前面的几只白骨顶鸡领导,其他个体必须根据领导者调整自己的位置,并向它们移动。为了实现这一运动利用式(8)的机制选择领导者。
k=1+(i)mod(NL)(8)k = 1 + (i){{mod(}}NL) \tag{8}k=1+(i)mod(NL)(8)其中,iii 是跟随者的索引数,kkk 是领导者的索引数,modmodmod 为取余函数。跟随者随领导者的位置更新公式如下:
FollowPos(i)=LeadPos(k)+2×R2×cos⁡(2Rπ)×(LeaderPos(k)−FollowPos(i))(9)FollowPos(i) = LeadPos(k) + 2 \times {R_2} \times \cos (2R\pi ) \times (LeaderPos(k) - FollowPos(i)) \tag{9}FollowPos(i)=LeadPos(k)+2×R2​×cos(2Rπ)×(LeaderPos(k)−FollowPos(i))(9)其中,LeaderPos(k)LeaderPos(k)LeaderPos(k) 为第 kkk 个领导者的位置,RRR 和 R2R_2R2​ 为区间 [0,1][0,1][0,1] 中的随机数,πππ 为圆周率的值。

2.3 领导者位置更新(开发阶段)

LeaderPos(i)={B×R3×cos⁡(2Rπ)×(gBest−LeaderPos(i))+gBestR4<0.5B×R3×cos⁡(2Rπ)×(gBest−LeaderPos(i))−gBestR4≥0.5(10)LeaderPos(i) = \left\{ \begin{aligned} {B \times {R_3} \times \cos (2R\pi ) \times (gBest - LeaderPos(i)) + gBest\qquad{R_4} < 0.5} \cr {B \times {R_3} \times \cos (2R\pi ) \times (gBest - LeaderPos(i)) - gBest\qquad{R_4} \ge 0.5} \cr \end{aligned}\right. \tag{10}LeaderPos(i)={B×R3​×cos(2Rπ)×(gBest−LeaderPos(i))+gBestR4​<0.5B×R3​×cos(2Rπ)×(gBest−LeaderPos(i))−gBestR4​≥0.5​(10)其中,LeaderPos(i)LeaderPos(i)LeaderPos(i) 为第 iii 个领导者的位置,gBestgBestgBest 是种群最优位置,R3R_3R3​ 和 R4R_4R4​ 是区间 [0,1][0, 1][0,1] 中的随机数,参数 BBB 为在 [0,2][0, 2][0,2] 中线性递减的因子,BBB 根据公式(11)计算:
B=2−t×(1/MaxIter)(11)B = 2 - t \times {{ (}}1/MaxIter) \tag{11}B=2−t×(1/MaxIter)(11)

三、改进的白骨顶鸡优化算法

3.1 随机反向学习策略

  反向学习策略(opposition-based learning,OBL)是Tizhoosh于2005年提出的群智能领域中的一种改进策略,通过产生一个反向解,比较当前解与反向解的适应度值,择优进入下一次迭代。数学表达式如下:
X′=lb+ub−LeaderPos(12)X' = lb + ub - LeaderPos \tag{12}X′=lb+ub−LeaderPos(12)  由于反向学习策略生成的反向解缺乏随机性,Long等人提出了一种改进的反向学习策略(Random Opposition-based Learning, ROBL),引入随机值 randrandrand 进一步加强了种群多样性,提高了种群跳出局部最优的能力。其数学公式如下:
Xrand=lb+ub−r×LeaderPos(13){X_{rand}} = lb + ub - r \times LeaderPos \tag{13}Xrand​=lb+ub−r×LeaderPos(13)其中,XrandX_{rand}Xrand​ 表示随机反向解,rrr 表示 000 到 111 之间的随机数。

3.2 复合突变策略

  引入复合突变策略来改进COOT。首先该策略在进行位置更新时会产生三个新的白骨顶鸡个体分别为 Vi1V_{i1}Vi1​、Vi2V_{i2}Vi2​、Vi3V_{i3}Vi3​,计算公式如下:
Vi1,j={FollowPosr1,j+F1×(FollowPosr2,j−FollowPosr3,j),ifrand<C1orj=jrandFollowPosi,j,otherwise(14){V_{i1,j}} = \left\{ \begin{aligned} &{FollowPo{s_{r1,j}} + {F_1} \times (FollowPo{s_{r2,j}} - FollowPo{s_{r3,j}})\ ,{{ if\ }}rand{{ < }}{C_1}{{\ or\ }}j{{ = }}{j_{rand}}} \cr &{FollowPo{s_{i,j}}\ ,{{otherwise}}} \cr \end{aligned}\right. \tag{14}Vi1,j​={​FollowPosr1,j​+F1​×(FollowPosr2,j​−FollowPosr3,j​) ,if rand<C1​ or j=jrand​FollowPosi,j​ ,otherwise​(14)Vi2,j={FollowPosr4,j+F2×(FollowPosr5,j−FollowPosr6,j)+F2×(FollowPosr7,j−FollowPosr8,j),ifrand<C2orj=jrandFollowPosi,j,otherwise(15){V_{i2,j}} = \left\{ \begin{aligned} &{FollowPo{s_{r4,j}} + {F_2} \times {{(}}FollowPo{s_{r5,j}} - FollowPo{s_{r6,j}}{{) + }}{F_2} \times (FollowPo{s_{r7,j}} - FollowPo{s_{r8,j}})\ ,{{if\ }}rand{{ < }}{C_2}{{\ or\ }}j{{ = }}{j_{rand}}} \cr &{FollowPo{s_{i,j}}\ ,{{otherwise}}} \cr \end{aligned} \right. \tag{15}Vi2,j​={​FollowPosr4,j​+F2​×(FollowPosr5,j​−FollowPosr6,j​)+F2​×(FollowPosr7,j​−FollowPosr8,j​) ,if rand<C2​ or j=jrand​FollowPosi,j​ ,otherwise​(15)Vi3,j={FollowPosi,j+rand×(FollowPosr9,j−FollowPosx,j)+F3×(FollowPosr10,j−FollowPosr11,j),ifrand<C3orj=jrandXi,j,otherwise(16){V_{i3,j}} = \left\{ \begin{aligned} &{FollowPo{s_{i,j}} + {{rand}} \times (FollowPo{s_{r9,j}} - FollowPo{s_{x,j}}) + {F_3} \times (FollowPo{s_{r10,j}} - FollowPo{s_{r11,j}})\ ,{{if\ }}rand{{ < }}{C_3}{{\ or\ }}j{{ = }}{j_{rand}}} \cr &{{X_{i,j}}\ ,{{otherwise}}} \cr \end{aligned} \right. \tag{16}Vi3,j​={​FollowPosi,j​+rand×(FollowPosr9,j​−FollowPosx,j​)+F3​×(FollowPosr10,j​−FollowPosr11,j​) ,if rand<C3​ or j=jrand​Xi,j​ ,otherwise​(16)其中 r1,r2,⋅⋅⋅,r11r1,r2,···,r11r1,r2,⋅⋅⋅,r11 是 [1,Npop][1,Npop][1,Npop] 间不同的整数,FollowPosi,jFollowPos_{i,j}FollowPosi,j​ 表示 iii 个体在 jjj 维度的位置,jrandj_{rand}jrand​表示区间 [1,dim][1,dim][1,dim] 中的整数。C1,C2,C3C_1,C_2,C_3C1​,C2​,C3​ 为交叉率值分别为 0.10.10.1、0.20.20.2、0.90.90.9。F1F_1F1​,F2F_2F2​,F3F_3F3​ 表示尺度系数分别为 111、0.80.80.8、111。
  从 Vi1V_{i1}Vi1​、Vi2V_{i2}Vi2​、Vi3V_{i3}Vi3​ 中找出最佳候选解,与当前解比较,选择更优的解,其计算公式如下:
FollowPos(i)={Vi,iff(Vi)<f(FollowPos(i))FollowPos(i),otherwise(17)FollowPos(i) = \left\{ \begin{aligned} &{{V_i}\ ,{{if\ }}f({V_i}){{ }} < {{ }}f(FollowPos(i))} \cr &{FollowPos(i){{\ ,otherwise}}} \cr \end{aligned}\right. \tag{17}FollowPos(i)={​Vi​ ,if f(Vi​)<f(FollowPos(i))FollowPos(i) ,otherwise​(17)其中,ViV_iVi​ 为最佳候选解。

3.3 ICOOT算法的伪代码

  1. 初始化白骨顶鸡数量 NNN 和最大迭代次数 MaxIterMaxIterMaxIter 等
  2. 根据(2)、(3)式对种群进行层级划分,并对种群进行初始化:CootPosi(i=1,2,...,N)CootPos_i (i=1,2,...,N)CootPosi​(i=1,2,...,N)
  3. while t<MaxItert < MaxItert<MaxIter do
  4.   分别计算跟随者和领导者的适应度值,并找到适应度值最佳的白骨顶鸡 gBestgBestgBest
  5.   For i=1i = 1i=1 to NcootNcootNcoot do
  6.     If rand1>0.5rand_1>0.5rand1​>0.5 then
  7.       If rand2<0.5rand_2<0.5rand2​<0.5 then
  8.         根据公式(5)更新跟随者位置
  9.       Else
  10.         根据公式(7)更新跟随者位置
  11.       End If
  12.     Else
  13.       根据公式(9)更新跟随者位置
  14.     End If
  15.     根据公式(14)、(15)、(16)产生三个新个体,并择优对原个体进行替换
  16.   End For
  17.   For i=1i = 1i=1 to NPNPNP do
  18.     根据(10)式更新领导者位置
  19.     使用公式(13)根据每个领导者产生一个随机反向解,比较当前解与随机反向解的适应度值,并择优
  20.   End For
  21. End While
  22. 返回吃的最饱的白骨顶鸡(最优解) gBestgBestgBest

四、实验结果

ICOOT和COOT在23个经典测试函数(设置维度 dim=30dim=30dim=30)的F4、F6、F12中的收敛曲线,测试函数公式如下:

函数 公式 理论值
F4 F4(x)=max⁡{∣xi∣,1≤i≤n}{F_4}(x) = \max \{ \left| {{x_i}} \right|,1 \le i \le n\} F4​(x)=max{∣xi​∣,1≤i≤n} 0.000.000.00
F6 F6(x)=∑i=1n(xi+5)2{F_6}(x) = {\sum\nolimits_{i = 1}^n {({x_i} + 5)} ^2}F6​(x)=∑i=1n​(xi​+5)2 0.000.000.00
F12 F12(x)=πn{10sin⁡(πy1)+∑i=1n−1(yi−1)2[1+10sin⁡2(πyi+1)]+(yn−1)2}+∑i=1nu(xi,10,100,4),whereyi=1+xi+14{F_{12}}(x) = {\pi \over n}\{ 10\sin (\pi {y_1}) + \sum\nolimits_{i = 1}^{n - 1} {{{({y_i} - 1)}^2}[1 + 10{{\sin }^2}(\pi {y_{i + 1}})] + {{({y_n} - 1)}^2}} \} + \sum\nolimits_{i = 1}^n {u({x_i},10,100,4),{{where\ }}{y_i} = 1 + {{{x_i} + 1} \over 4}} F12​(x)=nπ​{10sin(πy1​)+∑i=1n−1​(yi​−1)2[1+10sin2(πyi+1​)]+(yn​−1)2}+∑i=1n​u(xi​,10,100,4),where yi​=1+4xi​+1​ 0.000.000.00

其中:u(xi,a,k,m)={k(xi−a)m,xi>a0,−a<xi<ak(−xi−a)m,xi<−au({x_i},a,k,m) = \left\{ \begin{aligned} &k{({x_i} - a)^m}\ \ \ \ ,{x_i} > a \cr &0\qquad\qquad \ \ \ \ ,- a < {x_i} < a \cr &k{( - {x_i} - a)^m}\ ,{x_i} < - a \cr \end{aligned} \right. u(xi​,a,k,m)=⎩⎨⎧​​k(xi​−a)m    ,xi​>a0    ,−a<xi​<ak(−xi​−a)m ,xi​<−a​

4.1 F4收敛曲线

4.2 F5收敛曲线

4.3 F8收敛曲线

五、参考文献

[1] 贾鹤鸣, 李玉海, 文昌盛, 孟彬, 饶洪华, 李政邦. 改进白骨顶鸡优化算法的 WSN 网络覆盖[J]. 福建工程学院学报, 2022, 20(6), 561-566.

改进的白骨顶鸡优化算法(Improved Coot Optimization Algorithm,ICOOT)(原文作者)相关推荐

  1. 白骨顶鸡优化算法(Coot Optimization Algorithm,COOT)

    白骨顶鸡优化算法(Coot Optimization Algorithm,COOT) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 跟随者位置更新(探索阶段) 2.2.1 主动更新 2.2.1. ...

  2. 多目标优化算法:多目标白骨顶鸡优化算法MOCOOT(提供Matlab代码)

    一.算法简介 白骨顶鸡优化算法(Coot optimization algorithm,COOT)由Iraj Naruei和Farshid Keynia于2021年提出.该算法主要模拟了白骨顶鸡在水中 ...

  3. 黑寡妇优化算法(Black Widow Optimization Algorithm, BWOA)

    文章目录 一.理论基础 1.数学模型 1.1 移动 1.2 信息素 2.算法伪代码 二.总结 参考文献 一.理论基础 黑寡妇优化算法(Black Widow Optimization Algorith ...

  4. 基于白骨顶鸡优化算法的函数寻优算法

    文章目录 一.理论基础 1.白骨顶鸡优化算法 1.1 个体随机运动 1.2 链式运动 1.3 最优个体引导运动 1.3.1 根据组长调整位置 1.3.2 领导者引领团队走向最佳区域(领导运动) 2.C ...

  5. 群体智能优化算法之细菌觅食优化算法(Bacterial Foraging Optimization Algorithm,BFOA)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 第十四章 细菌觅食优化算法 14.1 介绍 14.2 BFOA的基本原理与流程 14.2.1 趋向性操作 14.2.2 复制操作 14.2.3 迁徙操 ...

  6. 瞪羚优化算法(Gazelle Optimization Algorithm,GOA)

    瞪羚优化算法(Gazelle Optimization Algorithm,GOA)由Agushaka等人于2022年提出,该算法模拟了瞪羚逃避捕食者的行为,思路新颖,性能高效. 瞪羚的身高60-11 ...

  7. 单目标应用:瞪羚优化算法(Gazelle Optimization Algorithm,GOA)优化BiLSTM权值和阈值(提供Matlab代码)

    瞪羚优化算法(Gazelle Optimization Algorithm,GOA)由Agushaka等人于2022年提出,该算法模拟了瞪羚逃避捕食者的行为,思路新颖,性能高效. 瞪羚的身高60-11 ...

  8. CEC2017:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解cec2017(提供MATLAB代码)

    一.鱼鹰优化算法简介 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovský于2023年提出,其模拟 ...

  9. 鲸鱼优化算法(Whale Optimization Algorithm,WOA)

    鲸鱼优化算法(Whale Optimization Algorithm,WOA) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 包围猎物阶段 2.3 气泡网捕食法 2.3.1 收缩包围 2.3. ...

最新文章

  1. flume写入mysql_Flume高级之自定义MySQLSource
  2. 杭电2682--Tree(Prim)
  3. C# 准备开始学习 并行程序开发
  4. 鞭策你一辈子的好文章
  5. 精通 WPF UI Virtualization
  6. redis 高可用
  7. 中国开启开源新纪元!
  8. python unpack 到数列_842. 将数组拆分成斐波那契数列(Python)
  9. java后端开发需要学什么知识点(JAVA难学吗)
  10. 【pyqt5学习】——日历控件calendarWidget设置单元格格式(前景、背景)、日历控件属性编辑
  11. SoC,SiP,IP和Chiplet的区别
  12. 卡方检验的统计量推导_如何通俗的理解A / B测试与卡方检验
  13. pca图解读_主成分分析pca图解读,主成分分析散点图解读
  14. 台式电脑显示无法连接服务器,台式电脑无法连接网络怎么办
  15. 推荐!十个好用的百度网盘搜索引擎
  16. 如何实现bat一键关机
  17. 腾讯云服务器性能评测:配置参数16核 32G 28M
  18. excel数据库_最新技术让excel秒变web数据库
  19. 【NOI2011】阿狸的打字机
  20. c语言中fl,用C语言操作SPMC75内部FLSASH.doc

热门文章

  1. 作文批改网如何粘贴英语作文
  2. C语言GDF中是什么作用,深度解密格力GDF-40X21C怎么样呢?质量好不好?真相揭秘必看...
  3. 数字化时代需要迎接新技术
  4. 实战Go语言:多人聊天室-欧阳桫-专题视频课程
  5. SNS交友网站会成为下一个分众吗
  6. 龙芯2k1000 linux内核,2017年的龙芯2K1000 已获得新的Linux内核补丁
  7. 吾爱破解160个crackme之005
  8. 专升本-计算机公共课考点(6)——数据库技术与 Access 2010
  9. IDRISI软件的MCE 模块建立各个地类的适宜性图像详细教程2
  10. android中的sign加密,[原创]某交通app的sign加密分析