䲟鱼优化算法(Remora Optimization Algorithm,ROA)(原文作者)

一、算法灵感

  䲟鱼优化算法(Remora Optimization Algorithm, ROA)是2021年提出的一种元启发式优化算法,其灵感来自于海洋中䲟鱼的寄生行为。作为海洋中最聪明的鱼,为了免受敌人的入侵,同时也为了节省体力,䲟鱼会寄生在旗鱼、鲸鱼或其他生物上觅食。算法以䲟鱼寄生在旗鱼(Swordfish Optimization Algorithm, SFO)和鲸鱼(Whale Optimization Algorithm, WOA)身上为例。因此,ROA借鉴了SFO和WOA的部分更新公式,进行全局和局部的位置更新。此外,为了确定是否需要更换宿主,䲟鱼会在宿主周围进行小范围移动,即经验积累,若不需要更换宿主,则进行宿主边觅食。图1展示了䲟鱼捕食的详细过程。
SFO 策略

图1 䲟鱼捕食过程

二、算法介绍

2.1 初始化阶段

  在ROA中,初始化䲟鱼种群位置的计算公式如下:
X i = l b + r a n d × ( u b − l b ) (1) {X_i} = lb + rand \times (ub - lb) \tag{1} Xi=lb+rand×(ublb)(1)式中, X i {X_i} Xi 为个体 i {i} i 的位置, l b {lb} lb u b {ub} ub 是搜索空间的下界和上界, r a n d {rand} rand 0 0 0 1 1 1 之间的随机数。

2.2 吸附跟随(探索阶段)

2.2.1 SFO 策略

  当䲟鱼吸附在旗鱼身上时,䲟鱼会跟随旗鱼移动。基于SFO算法的精英策略,对SFO算法的公式进行了改进,得到了以下公式:
X i t + 1 = X B e s t t − ( r a n d × ( X B e s t t + X r a n d t 2 ) − X r a n d t ) (2) {X_i}^{t + 1} = {X^t_{Best}} - {\rm{(rand}} \times {\rm{(}}{{{X^t_{Best}} + {X^t_{rand}}} \over 2}{\rm{)}} - {X^t_{rand}}{\rm{)}} \tag{2} Xit+1=XBestt(rand×(2XBestt+Xrandt)Xrandt)(2)其中, t {t} t 为当前迭代次数, X B e s t t {X^t_{Best}} XBestt 为当前最优䲟鱼个体, X r a n d t {X^t_{rand}} Xrandt 为当前随机䲟鱼个体。

2.2.2 经验积累

  当䲟鱼吸附宿主身上时,会根据上一代䲟鱼的位置与当前宿主的位置,在宿主周围进行小范围移动,判断是否需要更换宿主,该过程类似经验上的积累,其数学计算公式如下:
X a t t = X i t + ( X i t − X p r e ) × r a n d n (3) {X_{att}} = {X_i}^t + {\rm{(}}{{\rm{X}}_i}^t - {X_{pre}}{\rm{)}} \times {randn} \tag{3} Xatt=Xit+(XitXpre)×randn(3)其中, X a t t X_{att} Xatt 是䲟鱼的一次试探性移动, X p r e {X_{pre}} Xpre 表示上一代䲟鱼的位置,可以看做是一种经验, r a n d n randn randn 0 0 0 1 1 1 之间正态分布的随机数。
  经过小范围移动之后,䲟鱼根会公式(4)判断是否需要切换宿主,切换宿主的公式如公式(5)所示:
f ( X i t ) > f ( X a t t ) (4) f(X_i^t) > f({X_{att}}) \tag{4} f(Xit)>f(Xatt)(4) H ( i ) = r o u n d ( r a n d ) (5) H(i) = {\rm{round}}({rand}) \tag{5} H(i)=round(rand)(5)其中, H ( i ) H(i) H(i) 决定䲟鱼寄生的宿主,初始值为0或1,若 H ( i ) H(i) H(i) 等于0,则吸附鲸鱼,若 H ( i ) H(i) H(i) 等于1,则吸附旗鱼,round为四舍五入的函数, f ( X i t ) f(X_i^t) f(Xit) f ( X a t t ) f({X_{att}}) f(Xatt) 分别为 X i t X_i^t Xit X a t t X_{att} Xatt 的适应度值。

2.3 为吃着想(开发阶段)

2.3.1 WOA 策略

  当宿主为鲸鱼时,䲟鱼会跟随鲸鱼同步移动,其计算公式如下:
X i t + 1 = D × e k × cos ⁡ ( 2 π a ) + X i t (6) {X_i}^{t + 1} = D \times {e^k} \times \cos {\rm{(}}2\pi a{\rm{)}} + {X_i}^t \tag{6} Xit+1=D×ek×cos(2πa)+Xit(6) D = ∣ X B e s t t − X i t ∣ (7) D = \left| {{X_{Best}}^t - {X_i}^t} \right| \tag{7} D= XBesttXit (7) k = r a n d × ( a − 1 ) + 1 (8) k = {rand} \times {\rm{(}}a - 1{\rm{)}} + 1 \tag{8} k=rand×(a1)+1(8) a = − ( 1 + t T ) (9) a = - {\rm{(}}1 + {t \over T}{\rm{)}} \tag{9} a=(1+Tt)(9)其中, D D D 表示更新前最优位置与当前位置之间的距离, k k k − 1 -1 1 1 1 1 之间的随机数, a a a 在迭代中会在 [ − 2 , 1 ] [-2,1] [2,1] 之间线性递减, T T T 为最大迭代次数。

2.3.2 宿主边觅食

  宿主边觅食阶段是开发阶段的进一步细分,搜索范围减小,䲟鱼会在宿主周围寻找食物,不再考虑吸附,其数学计算公式如下:
X i t + 1 = X i t + A (10) {X_i}^{t + 1} = {X_i}^t + A \tag{10} Xit+1=Xit+A(10) A = B × ( X i t − C × X B e s t ) (11) A = B \times {\rm{(}}X_i^t - C \times {X_{Best}}{\rm{)}} \tag{11} A=B×(XitC×XBest)(11) B = 2 × V × r a n d − V (12) B = 2 \times V \times {\rm{rand}} - V \tag{12} B=2×V×randV(12) V = 2 ∗ ( 1 − t T ) (13) V = 2*{\rm{(}}1 - {t \over T}{\rm{)}} \tag{13} V=2(1Tt)(13)其中, A A A 为䲟鱼移动的距离,其与䲟鱼和宿主体积有关,䲟鱼因子 C C C 用于限制䲟鱼的位置,其值为 0.1 0.1 0.1 B B B 用于模拟宿主的体积, V V V 用于模拟䲟鱼的体积。

2.4 ROA的伪代码

  1. 初始化䲟鱼数量 N N N 和最大迭代次数 T T T
  2. 初始化种群: X i ( i = 1 , 2 , . . . , N ) X_i(i=1,2,...,N) Xi(i=1,2,...,N)
  3. While t < T t<T t<T do
  4.   检查是否有䲟鱼超出了搜索空间并进行修改
  5.   计算每条䲟鱼的饥饿值(适应度值),并找到吃的最饱的䲟鱼 X b e s t X_{best} Xbest
  6.   For i = 1 i=1 i=1 to N N N do
  7.     If H ( i ) H(i) H(i)==0 then
  8.       使用公式 (6) 更新被鲸鱼带到的位置
  9.     Else If H ( i ) H(i) H(i)==1 then
  10.       使用公式 (2) 更新被旗鱼带到的位置
  11.     End If
  12.     通过公式(3)进行经验积累,并判断是否更换宿主
  13.     If f ( X i t ) > f ( X a t t ) f(X_i^t) > f({X_{att}}) f(Xit)>f(Xatt) then
  14.       使用公式 (5) 切换宿主
  15.     Else
  16.       使用公式 (10) 进行宿主边觅食
  17.     End If
  18.   End For
  19.    t = t + 1 t=t+1 t=t+1
  20. End While
  21. 返回吃的最饱的鱼(最优解) X b e s t X_{best} Xbest

三、实验结果

ROA在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收敛曲线

F1收敛曲线

3.2 F5收敛曲线

F5收敛曲线

3.3 F8收敛曲线

F8收敛曲线

四、参考文献

[1] 贾鹤鸣, 智能优化算法及 MATLAB 实现[M], 清华大学出版社, 2024.
[2] Heming Jia, Xiaoxu Peng, Chunbo Lang. Remora optimization algorithm[J]. Expert Systems With Applications. 2021, 185, 115665.

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤鸣优化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值