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

一、算法灵感

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

图1 白骨顶鸡移动过程

二、算法介绍

2.1 初始化

  在COOT中,初始化白骨顶鸡种群位置的计算公式如下:
C o o t P o s ( i ) = r a n d ( 1 , dim ⁡ ) . ∗ ( u b − l b ) + l b (1) CootPos{ {(}}i{ {)}} = { {rand(}}1,\dim{ {)}}.*{ {(}}ub - lb{ {)}} + lb \tag{1} CootPos(i)=rand(1,dim).(ublb)+lb(1)其中, C o o t P o s ( i ) CootPos(i) CootPos(i) 表示第i只白骨顶鸡的位置, u b ub ub l b lb lb 分别表示搜索空间的上界和下界, r a n d rand rand 0 0 0 1 1 1 之间的随机数, d i m dim dim 表示维度。
  从白骨顶鸡种群中随机选取 N L NL NL 只白骨顶鸡作为领导者,记为 L e a d e r P o s LeaderPos LeaderPos,剩余的 N c o o t Ncoot Ncoot 只白骨顶鸡为跟随者,记为 F o l l o w P o s FollowPos FollowPos N L NL NL N c o o t Ncoot Ncoot 的计算公式如下:
N L = N p o p × P (2) NL = Npop \times P \tag{2} NL=Npop×P(2) N c o o t = N p o p − N L (3) Ncoot = Npop - NL \tag{3} Ncoot=NpopNL(3)其中, N p o p Npop Npop 为种群数量, P P P 为参数 0.1 0.1 0.1

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

2.2.1 主动更新

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

2.2.1.1 随机运动

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

2.2.1.2 链式运动

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

2.2.2 被动更新

  当 r a n d 1 < 0.5 rand_1<0.5 rand1<0.5 时,白骨顶鸡跟随者选择领导者引导更新位置。通常情况下,种群由前面的几只白骨顶鸡领导,其他个体必须根据领导者调整自己的位置,并向它们移动。为了实现这一运动利用式(8)的机制选择领导者。
k = 1 + ( i ) m o d ( N L ) (8) k = 1 + (i){ {mod(}}NL) \tag{8} k=1+(i)mod(NL)(8)其中, i i i 是跟随者的索引数, k k k 是领导者的索引数, m o d mod mod 为取余函数。跟随者随领导者的位置更新公式如下:
F o l l o w P o s ( i ) = L e a d P o s ( k ) + 2 × R 2 × cos ⁡ ( 2 R π ) × ( L e a d e r P o s ( k ) − F o l l o w P o s ( 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)其中, L e a d e r P o s ( k ) LeaderPos(k) LeaderPos(k) 为第 k k k 个领导者的位置, R R R R 2 R_2 R2 为区间 [ 0 , 1 ] [0,1] [0,1] 中的随机数, π π π 为圆周率的值。

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

L e a d e r P o s ( i ) = { B × R 3 × cos ⁡ ( 2 R π ) × ( g B e s t − L e a d e r P o s ( i ) ) + g B e s t R 4 < 0.5 B × R 3 × cos ⁡ ( 2 R π ) × ( g B e s t − L e a d e r P o s ( i ) ) − g B e s t R 4 ≥ 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π)×(gBestLeaderPos(i))+gBestR4<0.5B×R3×cos(2Rπ)×(gBestLeaderPos(i))gBestR40.5(10)其中, L e a d e r P o s ( i ) LeaderPos(i) LeaderPos(i) 为第 i i i 个领导者的位置, g B e s t gBest gBest 是种群最优位置, R 3 R_3 R3 R 4 R_4 R4 是区间 [ 0 , 1 ] [0, 1] [0,1] 中的随机数,参数 B B B 为在 [ 0 , 2 ] [0, 2] [0,2] 中线性递减的因子, B B B 根据公式(11)计算:
B = 2 − t × ( 1 / M a x I t e r ) (11) B = 2 - t \times { { (}}1/MaxIter) \tag{11} B=2t×(1/MaxIter)(11)

2.4 COOT算法的伪代码

  1. 初始化白骨顶鸡数量 N N N 和最大迭代次数 M a x I t e r MaxIter MaxIter
  2. 根据(2)、(3)式对种群进行层级划分,并对种群进行初始化: C o o t P o s i ( i = 1 , 2 , . . . , N ) CootPos_i (i=1,2,...,N) CootPosi(i=1,2,...,N)
  3. while t < M a x I t e r t < MaxIter t<MaxIter do
  4.   分别计算跟随者和领导者的适应度值,并找到适应度值最佳的白骨顶鸡 g B e s t gBest gBest
  5.   For i = 1 i = 1 i=1 to N c o o t Ncoot Ncoot do
  6.     If r a n d 1 > 0.5 rand_1>0.5 rand1>0.5 then
  7.       If r a n d 2 < 0.5 rand_2<0.5 rand2<0.5 then
  8.         根据式(5)更新跟随者位置
  9.       Else
  10.         根据式(7)更新跟随者位置
  11.       End If
  12.     Else
  13.       根据(9)式更新跟随者位置
  14.     End If
  15.   End For
  16.   For i = 1 i = 1 i=1 to N P NP NP do
  17.     根据(10)式更新领导者位置
  18.   End For
  19. End While
  20. 返回吃的最饱的白骨顶鸡(最优解) g B e s t gBest gBest

三、实验结果

COOT在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F1、F5、F8中的收敛曲线,测试函数公式如下:

函数 公式 理论值
F1 F 1 ( x ) = ∑ i = 1 n x i 2 {F_1}(x) = \sum\nolimits_{i = 1}^n {x_i^2} F1(x)=i=1nxi2 0.00 0.00 0.00
F5 F 5 ( x ) = ∑ i = 1 n − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] {F_5}(x) = \sum\nolimits_{i = 1}^{n - 1} {[100{ {({x_{i + 1}} - x_i^2)}^2} + { {({x_i} - 1)}^2}]} F5(x)=i=1n1[100(xi+1xi2)2+(xi1)2] 0.00 0.00 0.00
F8 F 8 ( x ) = ∑ i = 1 n − x i sin ⁡ ( ∣ x i ∣ ) {F_8}(x) = \sum\nolimits_{i = 1}^n { - {x_i}\sin (\sqrt {|{x_i}|} )} F8(x)=i=1nxisin(xi ) − 418.9829 × d i m -418.9829×dim 418.9829×dim

3.1 F1收敛曲线

在这里插入图片描述

3.2 F5收敛曲线

在这里插入图片描述

3.3 F8收敛曲线

在这里插入图片描述

四、改进白骨顶鸡优化算法

点这里:改进的白骨顶鸡优化算法(Improved Coot Optimization Algorithm,ICOOT)

五、参考文献

[1] Naruei I, Keynia F. A new optimization method based on COOT bird natural life model[J]. Expert Systems with Applications, 2021, 183, 115352.

猜你喜欢

转载自blog.csdn.net/jiaheming1983/article/details/129333514
今日推荐