【智能算法】清道夫优化算法(CFO)原理及实现

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.结果展示
    • 4.参考文献
    • 5.代码获取


1.背景

2024年,W Zhang受到清道夫自然行为启发,提出了清道夫优化算法(Cleaner Fish Optimization Algorithm, CFO)。

在这里插入图片描述

在这里插入图片描述

2.算法原理

2.1算法思想

CFO模拟了清道夫在进行“清洁服务”时的移动行为,以及雌鱼变性为雄鱼的行为,并定义了两种位置更新模式。此外,还提出了一种两代循环操作策略来实现优化过程。

在这里插入图片描述

2.2算法过程

CFO采用三次混沌映射对算法进行初始化,保持了算法的多样性,提高了算法的全局搜索能力:
r k + 1 , j = 4 r k , j 3 − 3 r k , j , − 1 < r 1 , j < 1 , r k , j ≠ 0 k = 1 , 2 , . . . , N − 1. j = 1 , 2 , . . . , d (1) \begin{aligned}&r_{k+1,j}=4r_{k,j}^3-3r_{k,j},\quad-1<r_{1,j}<1,\quad r_{k,j}\neq0\\&k=1,2,...,N-1.\quad j=1,2,...,d\end{aligned}\tag{1} rk+1,j=4rk,j33rk,j,1<r1,j<1,rk,j=0k=1,2,...,N1.j=1,2,...,d(1)

种群初始化:
X i , j = l b i , j + ( u b i , j − l b i , j ) ⋅ ( r i , j + 1 2 ) (2) X_{i,j}=lb_{i,j}+(ub_{i,j}-lb_{i,j})\cdot\left(\frac{r_{i,j}+1}2\right)\tag{2} Xi,j=lbi,j+(ubi,jlbi,j)(2ri,j+1)(2)

CFO 提出了两代循环策略:分别是目标追踪和性别转换。一代采用目标追踪更新模式以实现“清洁服务”。而在下一代中,前三分之二的个体采用目标追踪更新模式,其他个体采用性别转换更新模式。

目标追踪

清道夫目标追踪行为:
X i , j t + 1 = X i , j t + V i , j t (2) X_{i,j}^{t+1}=X_{i,j}^t+V_{i,j}^t\tag{2} Xi,jt+1=Xi,jt+Vi,jt(2)
清道夫速度:
V i , j t + 1 = V i , j t + ( X i , j t − X b e s t , j ) ⋅ f (3) V_{i,j}^{t+1}=V_{i,j}^t+(X_{i,j}^t-X_{best,j})\cdot f\tag{3} Vi,jt+1=Vi,jt+(Xi,jtXbest,j)f(3)
f为每个个体对应的频率:
f = f m i n + ( f m a x − f m i n ) ⋅ r 1 (4) f=f_{min}+(f_{max}-f_{min})\cdot r_1\tag{4} f=fmin+(fmaxfmin)r1(4)
其中fmin, fmax分别为最小和最大频率。它们分别被设置为0和10。为了增强算法的探索能力,引入了随机行走策略:
X i , j = { X b e s t , j + 0.1 ⋅ r a n d ⋅ α t , i f r 2 < r X i , j t , o t h e r w i s e (5) X_{i,j}=\begin{cases}X_{best,j}+0.1\cdot rand\cdot\alpha^{t},&if\quad r_{2}<r\\X_{i,j}^{t},&otherwise&&\end{cases}\tag{5} Xi,j={Xbest,j+0.1randαt,Xi,jt,ifr2<rotherwise(5)
参数表述为:
α t + 1 = 0.97 × α t (6) \alpha^{t+1}=0.97\times\alpha^t\tag{6} αt+1=0.97×αt(6)
α \alpha α表示清道夫的清洁能力,也表示随着迭代次数的增加,清道夫的清洁能力下降。r为自适应参数:
r = 1 − e − γ ⋅ t (7) r=1-e^{-\gamma\cdot t}\tag{7} r=1eγt(7)

性别转换

在鱼类群体中,当雄性死亡时,雌性可能会改变性别,成为新的雄性。基于这种行为,本文提出了性别转换更新模式:
X i , j t + 1 = w ⋅ X i , j t + r 3 ⋅ ( X i , j t − X b e s t , j ) (8) X_{i,j}^{t+1}=w\cdot X_{i,j}^t+r_3\cdot(X_{i,j}^t-X_{best,j})\tag{8} Xi,jt+1=wXi,jt+r3(Xi,jtXbest,j)(8)
w为自适应权值,用于平衡探索和开发:
w = ( w m a x − w m i n ) e t T + w m i n (9) w=(w_{max}-w_{min})^{e^{\frac tT}}+w_{min}\tag{9} w=(wmaxwmin)eTt+wmin(9)

鱼类种群行为

清道夫是群居动物,为了表现这种行为,引入了准反射反向学习策略:
X i , j = r 4 × ( X i , j t − u b i , j + l b i , j 2 ) − u b i , j + l b i , j 2 (10) X_{i,j}=r_{4}\times\left(X_{i,j}^{t}-\frac{ub_{i,j}+lb_{i,j}}{2}\right)-\frac{ub_{i,j}+lb_{i,j}}{2}\tag{10} Xi,j=r4×(Xi,jt2ubi,j+lbi,j)2ubi,j+lbi,j(10)

流程图

在这里插入图片描述

伪代码

在这里插入图片描述

3.结果展示

在这里插入图片描述

4.参考文献

[1] Zhang W, Zhao J, Liu H, et al. Cleaner fish optimization algorithm: a new bio-inspired meta-heuristic optimization algorithm[J]. The Journal of Supercomputing, 2024: 1-39.

5.代码获取

资源清单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/705949.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

使用Docker进行Jmeter分布式搭建

大家好&#xff0c;随着技术的不断发展&#xff0c;对性能测试的要求也日益提高。在这样的背景下&#xff0c;如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在&#xff0c;就让我们开启这场探索之旅&#xff0c;揭开其神秘的面纱。前段时间给大家分享了关于 L…

SQL慢查询学习篇

https://www.cnblogs.com/isyues/p/17733015.html 1. 对扫到的SQL慢查询语句执行 explain explain select task_id, channel, count(task_id) as count from tablename where send_time > "2024-05-10 16:13:59" and send_time < "2024-05-14 16:13:59…

LeetCode 235. 二叉搜索树的最近公共祖先

LeetCode 235. 二叉搜索树的最近公共祖先 1、题目 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表…

【C语言】指针(二)

目录 一、传值调用和传址调用 二、数组名的理解 三、通过指针访问数组 四、一维数组传参的本质 五、指针数组 六、指针数组模拟实现二维数组 一、传值调用和传址调用 指针可以用在哪里呢&#xff1f;我们看下面一段代码&#xff1a; #include <stdio.h>void Swap(i…

ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处

1.需求分析&#xff1a; 就敌人ai而言&#xff0c;追踪到敌人有可能丢失目标&#xff0c;丢失目标后应该能返回原来位置&#xff0c;实现这一功能。 2.操作实现&#xff1a; 1.思路&#xff1a;利用clear value函数&#xff0c;禁用掉当前的追踪功能&#xff0c;执行之后的返…

JUnit5参数化用例(三)

JUnit5枚举参数的参数化&#xff1a; 使用枚举类作为测试数据枚举参数参数化注解EnumSource必须与ParameterizedTest结合使用 枚举参数化注解 -简单使用&#xff1a; 需要添加EnumSource注解测试方法传入枚举类作为参数 在执行前&#xff0c;我们需了解enum枚举的使用方式&…

分布式计算、并行计算、网格计算、边缘计算

分布式计算 分布式计算是一种计算方法&#xff0c;它将一个大型的计算任务分解成多个子任务&#xff0c;并将这些子任务分布在网络上的多台计算机&#xff08;节点&#xff09;上同时执行。这些节点通过通信网络协同工作&#xff0c;共同完成任务。每个节点可以独立处理自己的…

3D Tiles资源大全

本文汇总整理3D Tiles相关的各种资源&#xff0c;包括查看器、生成器、示例数据集、教程、演示等。 1、3D Tiles特色演示 注意&#xff1a;这些演示是基于 CesiumJS 1.87.1 Release 发布的&#xff0c;其中包括对 3D Tiles Next 扩展的实验性支持。这些演示中显示的大多数功能现…

Java入门基础学习笔记26——break,continue

跳转关键字&#xff1a; break&#xff1a; 跳出并结束当前所在循环的执行。 continue&#xff1a; 用于跳出当前循环中的当次执行&#xff0c;直接进入循环中的下一次执行。 package cn.ensource.loop;public class BreakContinueDemo8 {public static void main(String[] a…

在Ubuntu22.04搭建xfce远程桌面

由于Ubuntu22.04云服务器&#xff08;带GPU&#xff09;只开放部分端口&#xff0c;某些服务&#xff08;如nacos&#xff09;有Web前端需要访问&#xff0c;但是相应的端口并没有开放&#xff0c;只有SSH端口可以使用。于是&#xff0c;就在Ubuntu22.04上安装xfce桌面环境&…

centos无法联网解决方案(9步完成

1.打开终端&#xff0c;输入 su - root 进入到管理员模式&#xff08;-的前后都有空格哈&#xff09; 切换后&#xff0c;显示的就是root... 2.. &#xff0c;输入命令ip addr 2. 切换当前目录 cd /etc/sysconfig/network-scripts/ 3.输入命令&#xff0c;打开文件 vi /etc…