改进的白骨顶鸡优化算法(Improved Coot Optimization Algorithm,ICOOT)(原文作者)
改进的白骨顶鸡优化算法(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=jrandFollowPosi,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=jrandFollowPosi,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=jrandXi,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算法的伪代码
- 初始化白骨顶鸡数量 NNN 和最大迭代次数 MaxIterMaxIterMaxIter 等
- 根据(2)、(3)式对种群进行层级划分,并对种群进行初始化:CootPosi(i=1,2,...,N)CootPos_i (i=1,2,...,N)CootPosi(i=1,2,...,N)
- while t<MaxItert < MaxItert<MaxIter do
- 分别计算跟随者和领导者的适应度值,并找到适应度值最佳的白骨顶鸡 gBestgBestgBest
- For i=1i = 1i=1 to NcootNcootNcoot do
- If rand1>0.5rand_1>0.5rand1>0.5 then
- If rand2<0.5rand_2<0.5rand2<0.5 then
- 根据公式(5)更新跟随者位置
- Else
- 根据公式(7)更新跟随者位置
- End If
- Else
- 根据公式(9)更新跟随者位置
- End If
- 根据公式(14)、(15)、(16)产生三个新个体,并择优对原个体进行替换
- End For
- For i=1i = 1i=1 to NPNPNP do
- 根据(10)式更新领导者位置
- 使用公式(13)根据每个领导者产生一个随机反向解,比较当前解与随机反向解的适应度值,并择优
- End For
- End While
- 返回吃的最饱的白骨顶鸡(最优解) 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+10sin2(π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=1nu(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)(原文作者)相关推荐
- 白骨顶鸡优化算法(Coot Optimization Algorithm,COOT)
白骨顶鸡优化算法(Coot Optimization Algorithm,COOT) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 跟随者位置更新(探索阶段) 2.2.1 主动更新 2.2.1. ...
- 多目标优化算法:多目标白骨顶鸡优化算法MOCOOT(提供Matlab代码)
一.算法简介 白骨顶鸡优化算法(Coot optimization algorithm,COOT)由Iraj Naruei和Farshid Keynia于2021年提出.该算法主要模拟了白骨顶鸡在水中 ...
- 黑寡妇优化算法(Black Widow Optimization Algorithm, BWOA)
文章目录 一.理论基础 1.数学模型 1.1 移动 1.2 信息素 2.算法伪代码 二.总结 参考文献 一.理论基础 黑寡妇优化算法(Black Widow Optimization Algorith ...
- 基于白骨顶鸡优化算法的函数寻优算法
文章目录 一.理论基础 1.白骨顶鸡优化算法 1.1 个体随机运动 1.2 链式运动 1.3 最优个体引导运动 1.3.1 根据组长调整位置 1.3.2 领导者引领团队走向最佳区域(领导运动) 2.C ...
- 群体智能优化算法之细菌觅食优化算法(Bacterial Foraging Optimization Algorithm,BFOA)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 第十四章 细菌觅食优化算法 14.1 介绍 14.2 BFOA的基本原理与流程 14.2.1 趋向性操作 14.2.2 复制操作 14.2.3 迁徙操 ...
- 瞪羚优化算法(Gazelle Optimization Algorithm,GOA)
瞪羚优化算法(Gazelle Optimization Algorithm,GOA)由Agushaka等人于2022年提出,该算法模拟了瞪羚逃避捕食者的行为,思路新颖,性能高效. 瞪羚的身高60-11 ...
- 单目标应用:瞪羚优化算法(Gazelle Optimization Algorithm,GOA)优化BiLSTM权值和阈值(提供Matlab代码)
瞪羚优化算法(Gazelle Optimization Algorithm,GOA)由Agushaka等人于2022年提出,该算法模拟了瞪羚逃避捕食者的行为,思路新颖,性能高效. 瞪羚的身高60-11 ...
- CEC2017:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解cec2017(提供MATLAB代码)
一.鱼鹰优化算法简介 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovský于2023年提出,其模拟 ...
- 鲸鱼优化算法(Whale Optimization Algorithm,WOA)
鲸鱼优化算法(Whale Optimization Algorithm,WOA) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 包围猎物阶段 2.3 气泡网捕食法 2.3.1 收缩包围 2.3. ...
最新文章
- flume写入mysql_Flume高级之自定义MySQLSource
- 杭电2682--Tree(Prim)
- C# 准备开始学习 并行程序开发
- 鞭策你一辈子的好文章
- 精通 WPF UI Virtualization
- redis 高可用
- 中国开启开源新纪元!
- python unpack 到数列_842. 将数组拆分成斐波那契数列(Python)
- java后端开发需要学什么知识点(JAVA难学吗)
- 【pyqt5学习】——日历控件calendarWidget设置单元格格式(前景、背景)、日历控件属性编辑
- SoC,SiP,IP和Chiplet的区别
- 卡方检验的统计量推导_如何通俗的理解A / B测试与卡方检验
- pca图解读_主成分分析pca图解读,主成分分析散点图解读
- 台式电脑显示无法连接服务器,台式电脑无法连接网络怎么办
- 推荐!十个好用的百度网盘搜索引擎
- 如何实现bat一键关机
- 腾讯云服务器性能评测:配置参数16核 32G 28M
- excel数据库_最新技术让excel秒变web数据库
- 【NOI2011】阿狸的打字机
- c语言中fl,用C语言操作SPMC75内部FLSASH.doc
热门文章
- 作文批改网如何粘贴英语作文
- C语言GDF中是什么作用,深度解密格力GDF-40X21C怎么样呢?质量好不好?真相揭秘必看...
- 数字化时代需要迎接新技术
- 实战Go语言:多人聊天室-欧阳桫-专题视频课程
- SNS交友网站会成为下一个分众吗
- 龙芯2k1000 linux内核,2017年的龙芯2K1000 已获得新的Linux内核补丁
- 吾爱破解160个crackme之005
- 专升本-计算机公共课考点(6)——数据库技术与 Access 2010
- IDRISI软件的MCE 模块建立各个地类的适宜性图像详细教程2
- android中的sign加密,[原创]某交通app的sign加密分析