捕鱼优化算法(Catch Fish Optimization Algorithm,CFOA)(原文作者)


提示:本文使用的是评价次数的代码。

前言

  捕鱼优化算法(Catch Fish Optimization Algorithm,CFOA)是2024年6月提出的一种元启发式优化算法。CFOA是受传统农村捕鱼方法的启发,提出三种捕获阶段的独立搜索、小组合作和集体围捕。算法先由独立搜索向小组合作转变,最后转变成集体捕获。其中,独立搜索和小组合作捕获为捕鱼优化算法的探索阶段,集体捕捞是捕鱼优化算法的开发阶段。CFOA具有较好的探索和开发能力,在CEC2014和CEC2020有着良好的优化效果。


一、捕鱼优化算法的实现

  CFOA算法的探索阶段受捕获率影响,在捕鱼开始时,鱼类最丰富,捕获率最高,但随着渔民捕获的鱼类数量逐渐减少,导致捕获率下降。因此在探索阶段,捕获率高则渔民(即搜索代理)着重于独立搜索,根据全局搜索空间中其他渔民的探索情况中学习进行探索。随捕获率下降,渔民们转而依靠小组捕获来对当地地区进行更集中和更彻底的探索。最后,在开发阶段,算法利用集体捕获和协同开发来细化和收敛到最优解。通过捕获率提高算法的探索和前期开发能力,最后使用集体围捕寻求更优质的解,使捕鱼优化算法具有更好的优化效果,能够更快的寻找到一个优异的适应度值。下面是捕鱼优化算法的具体介绍。

1. 初始化阶段

  元启发式算法通过搜索代理不断更新位置来探索全局情况,最终找到最佳的解决方案。在CFOA中,每个渔民对应一个搜索代理,其模型如下:
F i s h e r = [ l F i s h e r 1 , 1 F i s h e r 1 , 2 ⋯ F i s h e r 1 , n F i s h e r 2 , 1 F i s h e r 2 , 2 ⋯ F i s h e r 2 , n ⋮ ⋮ ⋱ ⋮ F i s h e r n , 1 F i s h e r n , 2 ⋯ F i s h e r n , n ] N × d Fisher=\left[ \begin{matrix}{l} Fisher_{1,1}& Fisher_{1,2}& \cdots& Fisher_{1,n}\\ Fisher_{2,1}& Fisher_{2,2}& \cdots& Fisher_{2,n}\\ \vdots& \vdots& \ddots& \vdots\\ Fisher_{n,1}& Fisher_{n,2}& \cdots& Fisher_{n,n}\\ \end{matrix} \right] _{N\times d} Fisher= lFisher1,1Fisher2,1Fishern,1Fisher1,2Fisher2,2Fishern,2Fisher1,nFisher2,nFishern,n N×dFisher是一个维数为d的空间中N个搜索代理的位置信息的综合矩阵,其初始化公式如下:
F i s h e r i , j = ( u b j − l b j ) × r + l b j Fisher_{i,j}=\left( ub_j-lb_j \right) \times r+lb_j Fisheri,j=(ubjlbj)×r+lbj F i s h e r i , j Fisher_{i,j} Fisheri,j是第i个渔夫在第j维上的位置, u b j ub_j ubj l b j lb_j lbj是第j维的上界和下界, r r r是一个介于(0,1)之间的随机数。 基于每个渔民的当前位置信息,我们使用适应度值评估函数fobj来计算他们的适应度值,得到以下适应度值矩阵:
f i t = [ f i t 1 f i t 2 ⋮ f i t n ] fit=\left[ \begin{array}{l} fit_1\\ fit_2\\ \vdots\\ fit_n\\ \end{array} \right] fit= fit1fit2fitn 其中lbj表示第j维的下界, u b j ub_j ubj表示第j维的上界, r r r是[0,1]的随机数。

2. 探索阶段

  在探索过程中,渔民最初注重独立搜索和干扰水域,以确立其优势,以群体包围作为辅助搜索方法。随着搜索工作的进行,环境优势逐渐从鱼的一侧转向渔民的一侧。在搜索过程中持续捕获鱼类会导致鱼类数量的减少,随后导致捕获率的下降。然后,渔民从独立探索转向主要依赖群体包围,以个体优势作为辅助作用。该模式中的转换使用捕获速率参数进行模拟,表示为α。
α = ( 1 − 3 × E F s 2 × M a x E F s ) 3 × E F s 2 × M a x E F s \alpha =\left( 1-\frac{3\times EFs}{2\times MaxEFs} \right) ^{\frac{3\times EFs}{2\times MaxEFs}} α=(12×MaxEFs3×EFs)2×MaxEFs3×EFs E F s EFs EFs是当前评估的数量,而 M a x E F s MaxEFs MaxEFs是评估的最大数量。
  渔民可以在独立搜索或群体捕获之间自由选择,但当捕获率α较高时,渔民的捕获策略倾向于独立搜索,随着α的减少,渔民会切换到群体捕获方法,我们使用随机数(0,1)进行模拟。当 p < α p < α p<α时,选择独立搜索,当 p ≥ α p≥α pα. 时,选择小组捕获,即(0,1)之间的一个随机数, p p p为概率。

2.1 独立搜索( p < α p<α p<α

  在寻找鱼群的同时,渔民们积极地干扰周围的水域,创造浑浊的环境。浑浊的环境迫使鱼伸出头来呼吸或释放气泡,从而在水面上产生涟漪。每个渔民都有一定程度的捕鱼经验,可以根据水面上的变化,独立地确定鱼类种群的潜在位置。它们会根据对他人的捕捉情况来调整探索的方向和位置。如果它们所在位置的捕获情况与参考捕获情况相似,则它们专注于本地勘探。如果参考捕获情况有利,它们就会继续向这个方向进行搜索。在个人捕获的良好情况下,他们会进行反向搜索。图1为该方法的示意图。更新公式如下:
E x p = f i t i − f i t p o s f i t max ⁡ − f i t min ⁡ Exp=\frac{fit_i-fit_{pos}}{fit_{\max}-fit_{\min}} Exp=fitmaxfitminfitifitpos R = D i s × ∣ E x p ∣ × ( 1 − E F s M a x E F s ) R=Dis\times \sqrt{\left| Exp \right|}\times \left( 1-\frac{EFs}{MaxEFs} \right) R=Dis×Exp ×(1MaxEFsEFs) F i s h e r i , j T + 1 = F i s h e r i , j T + ( F i s h e r p o s , j T + 1 − F i s h e r i , j T + 1 ) × E x p + r s × s × R Fisher_{i,j}^{T+1}=Fisher_{i,j}^{T}+\left( Fisher_{pos,j}^{T+1}-Fisher_{i,j}^{T+1} \right) \times Exp+r_s\times s\times R Fisheri,jT+1=Fisheri,jT+(Fisherpos,jT+1Fisheri,jT+1)×Exp+rs×s×R其中, E x p Exp Exp是渔民使用任何后数(pos=1,2,…, N N N p o s pos pos = i i i)渔民作为参考对象得到的实证分析值,该值的范围为(-1,1)。 f i t m a x fit_{max} fitmax f i t m i n fit_{min} fitmin分别是𝑇次完成位置更新后的最差适应度值和最佳适应度值。T表示渔民位置的迭代次数。和表示T次和T+1次迭代后第一个渔民在j维中的位置。rs是一个介于[0,1]之间的随机数。 D i s Dis Dis是第i个个体和参照物之间的欧氏距离。s是一个维数为d的随机单位向量。移动的主要方向(以渔民到参考人的方向为正方向)和距离。勘探范围R也随Exp的绝对值和当前评价次数的变化而变化, R R R小于或等于 D i s Dis Dis
  在图中,左图是准备移动的渔民,右图是随机参考的渔民。棕色范围是渔夫的运动范围, R R R是运动半径。黄色和红色的箭头表示渔民移动的主要方向。蓝色箭头表示渔夫自主搜索的漂移方向。
独立搜索的二维示意图

图1 独立搜索的二维示意图

2.2 小组捕获( p ≥ α p ≥ α pα

  渔民使用渔网来扩大他们的捕鱼能力,并与其他渔民合作。渔民随机由3-4人组成小组,合作并包围可疑点。通过利用每个人独特的移动能力,更精确地探索这个区域。模型和公式如下:
C e n t r e c = m e a n ( F i s h e r c T ) Centre_c=mean\left( Fisher_{c}^{T} \right) Centrec=mean(FishercT) F i s h e r c , i , j T + 1 = F i s h e r c , i , j T + r 2 × ( C e n t r e c − F i s h e r c , i , j T ) + ( 1 − 2 × E F s M a x E F s ) 2 × r 3 Fisher_{c,i,j}^{T+1}=Fisher_{c,i,j}^{T}+r_2\times \left( Centre_c-Fisher_{c,i,j}^{T} \right) +\left( 1-\frac{2\times EFs}{MaxEFs} \right) ^2\times r_3 Fisherc,i,jT+1=Fisherc,i,jT+r2×(CentrecFisherc,i,jT)+(1MaxEFs2×EFs)2×r3 c c c是一组3-4个位置没有更新的个体。 C e n t r e c Centre_c Centrec是c群包围的目标点,为图中的红橙色点。和代表了在T和T+1次更新后, c c c组中的第一个渔民在j维中的位置。 r 2 r_2 r2是渔夫接近中心的速度,它因人而异,范围从(0,1)不等。 r 3 r_3 r3为移动的偏移量,取值范围为(-1、1),随着 E F s EFs EFs的增加而逐渐减小。蓝色箭头是图中渔民移动的最终方向和距离的二维显示。
小组捕获二维图

图2 小组捕获二维图

3.开发阶段

3.1 集体捕获

  在搜索和捕鱼的阶段,一些鱼没有被渔民捕获。但所有的渔民都在统一的策略下进行搜索,并有目的地将流浪鱼和隐藏的鱼驱赶到同一个地方,聚集并包围它们。在诱捕过程中,渔民的分布情况如下:以鱼类种群为中心,从中部到周围区域的聚集程度逐渐稀疏,随着其向外移动,分布范围逐渐减小。该分布如图所示。更新公式如下:
σ = ( 2 ( 1 − E F s M a x E F s ) ( ( 1 − E F s M a x E F s ) 2 + 1 ) ) \sigma =\sqrt{\left( \dfrac{2\left( 1-\frac{EFs}{MaxEFs} \right)}{\left( \left( 1-\frac{EFs}{MaxEFs} \right) ^2+1 \right)} \right)} σ= ((1MaxEFsEFs)2+1)2(1MaxEFsEFs) F i s h e r i T + 1 = G b e s t + G D ( 0 , r 4 × σ × ∣ m e a n ( F i s h e r ) − G b e s t ∣ 3 ) Fisher_{i}^{T+1}=Gbest+GD\left( 0,\frac{r_4\times \sigma \times \left| mean\left( Fisher \right) -Gbest \right|}{3} \right) FisheriT+1=Gbest+GD(0,3r4×σ×mean(Fisher)Gbest)  其中, G D GD GD是一个高斯分布函数,总体均值 μ μ μ为0,总体方差 σ σ σ随着评价次数的增加而增加,从1趋于0。在𝑇+1𝑡ℎ更新后的第i个渔夫的位置。均值( F i s h e r Fisher Fisher)是渔民中心各维度的平均值的矩阵。 G b e s t Gbest Gbest为全局最优位置,即图中的红色圆圈, r 4 r_4 r4为{1、2、3}的随机数,分布在三个范围内。
集体捕获分布

图3 集体捕获分布

二、捕鱼优化算法的流程

CFOA主要关注于优化的两个阶段:探索阶段和开发阶段。算法的流程如下:
步骤1:初始化种群
步骤2:计算适应度值,更新最佳位置和适应度。
步骤3:确定当前阶段是勘探阶段还是开发阶段:
勘探阶段:随机打乱每个渔民的工作顺序,并使用公式(5-7)或(8-9)更新工作位置。
开发阶段:使用公式(10-11)进行位置更新。
步骤4:如果不满足终止条件,则重复步骤2-3。
步骤5:输出最佳位置和适应度值。

三、捕鱼优化算法的在CEC2020测试结果。

3.1 CEC2020部分测试函数描述

名称公式维度变量范围理论最优
F1 F 1 ( x ) = f 1 ( M ( x − o 1 ) ) + F 1 ∗ {F_1}(x) = {f_1}(M(x - {o_1})) + {F_1}* F1(x)=f1(M(xo1))+F130[-100,100]100
F2 F 2 ( x ) = f 11 ( M ( 1000 ( x − o 11 ) 100 ) ) + F 2 ∗ {F_2}(x) = {f_{11}}({\rm{M}}({{1000(x - {o_{11}})} \over {100}})) + {F_2} * F2(x)=f11(M(1001000(xo11)))+F230[-100,100]1100
F3 F 3 ( x ) = f 10 ( M ( 600 ( x − o 7 ) 100 ) ) + F 3 ∗ {F_3}(x) = {f_{10}}(M({{600(x - {o_7})} \over {100}})) + {F_3}* F3(x)=f10(M(100600(xo7)))+F330[-100,100]700

3.2 CFOA在CEC2020的测试效果

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

四、matlab代码

CFOA的代码已公布,可自行下载,也欢迎大家进行修改Catch Fish Optimization Algorithm

五、参考文献

[1] 贾鹤鸣, 智能优化算法及 MATLAB 实现[M], 清华大学出版社, 2024.

[2] Jia, H., Wen, Q., Wang, Y. et al. Catch fish optimization algorithm: a new human behavior algorithm for solving clustering problems. Cluster Comput (2024). https://doi.org/10.1007/s10586-024-04618-w.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鹤鸣优化

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

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

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

打赏作者

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

抵扣说明:

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

余额充值