【智能算法】寄生捕食算法(PPA)原理及实现

2024-04-23 00:12

本文主要是介绍【智能算法】寄生捕食算法(PPA)原理及实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

目录

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


1.背景

2020年,AAA Mohamed等人受到自然界乌鸦-布谷鸟-猫寄生系统启发,提出了寄生捕食算法(Parasitism – Predation Algorithm, PPA)。

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

2.算法原理

2.1算法思想

PPA是受乌鸦和布谷鸟寄生互动启发,寄生系统中乌鸦允许布谷鸟在其巢中寄生,而布谷鸟幼鸟会分泌恶臭物质以保护自身及乌鸦幼鸟免受猫科动物的捕食。PPA主要分为三个阶段:筑巢阶段、寄生阶段和捕食阶段

2.2算法过程

筑巢阶段

刚开始乌鸦的数量会随着时间的推移而减少,筑巢阶段通过两种状态来模拟乌鸦的飞行:
X i t + 1 = X i t + F ( X r 1 − X i t ) ∀ i ∈ n c r o w (1) X_i^{t+1}=X_i^t+F(X_{r1}-X_i^t)\quad\forall i\in n_{crow}\tag{1} Xit+1=Xit+F(Xr1Xit)incrow(1)
其中,F是莱维飞行步长。在筑巢阶段,通过Levy飞行,利用当前最优的巢群来更新新的解决方案,从而发现鸟巢:
X i , o u t n e w = X i , o u t m i n + ( X i , o u t m a x − X i , o u t m i n ) (2) X_{i,out}^{new}=X_{i,out}^{min}+\begin{pmatrix}X_{i,out}^{max}-X_{i,out}^{min}\end{pmatrix}\tag{2} Xi,outnew=Xi,outmin+(Xi,outmaxXi,outmin)(2)

寄生阶段

布谷鸟根据适合度选择被寄生的巢穴,巢穴越好,被寄生的几率越高:
X i , n e w c u c k o o = X i , o l d c u c k o o + S G . k S G = ( X r 2 − X r 3 ) r a n d [ 0 , 1 ] (3) \begin{aligned}&X_{i,new}^{cuckoo}=X_{i,old}^{cuckoo}+S_{G}.k\\&S_{G}=(X_{r2}-X_{r3})rand[0,1]\end{aligned}\tag{3} Xi,newcuckoo=Xi,oldcuckoo+SG.kSG=(Xr2Xr3)rand[0,1](3)

捕食阶段

初始阶段,由于猫的高捕食效率,导致其数量迅速增加,而乌鸦数量减少,进而无法提供足够资源支持布谷鸟生存。此时,布谷鸟幼鸟会分泌特殊化合物来驱赶猫,而猫则倾向于追踪那些未被布谷鸟占据且无恶臭分泌的巢穴:
v k , d = v k , d + r . c . ( x b e s t , d − x k , d ) , d = 1 , 2 , ⋯ . . , M (4) v_{k,d}=v_{k,d}+r.c.(x_{best,d}-x_{k,d}),d=1,2,\cdots..,M\tag{4} vk,d=vk,d+r.c.(xbest,dxk,d),d=1,2,..,M(4)
位置更新:
x k , d = x k , d + v k , d (5) x_{k,d}=x_{k,d}+v_{k,d}\tag{5} xk,d=xk,d+vk,d(5)

伪代码

在这里插入图片描述

3.结果展示

使用测试框架,测试PPA性能 一键run.m

  • 【智能算法】省时方便,智能算法统计指标——一键运行~

CEC2017-F2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Mohamed A A A, Hassan S A, Hemeida A M, et al. Parasitism–Predation algorithm (PPA): A novel approach for feature selection[J]. Ain Shams Engineering Journal, 2020, 11(2): 293-308.

这篇关于【智能算法】寄生捕食算法(PPA)原理及实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927251

相关文章

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.