智能优化算法:寄生-捕食算法-附代码

2024-06-18 07:18

本文主要是介绍智能优化算法:寄生-捕食算法-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

智能优化算法:寄生-捕食算法

文章目录

  • 智能优化算法:寄生-捕食算法
    • 1.算法原理
      • 1.1 种群初始化
      • 1.2 筑巢阶段(鸟窝)
      • 1.3 寄生阶段(crow-cuckoo)
      • 1.4 捕食阶段(crow-cat)
    • 2.实验结果
    • 3.参考文献
    • 4.Matlab代码

摘要:寄生-捕食(Parasitism – Predation algorithm,PPA)算法是于2019年提出的,它模仿捕食者猫,布谷鸟和乌鸦之间的寄生与捕食行为,形成乌鸦-布谷鸟-猫寄生与捕食系统。该算法具有精度高,收敛速度块等特点。

1.算法原理

1.1 种群初始化

种群初始化与其他优化算法一样,在边界范围内随机初始化:
X i N e w = X i m i n + r a n d ∗ ( X i m a x − X i m i n ) (1) X_i^{New}=X_i^{min}+rand*(X_i^{max}-X_i^{min})\tag{1} XiNew=Ximin+rand(XimaxXimin)(1)

1.2 筑巢阶段(鸟窝)

初始化后,将进入筑巢期、寄生期和捕食期。一开始,乌鸦的数量会随着时间的推移而减少。嵌套阶段被评估为模拟乌鸦通过两个状态飞行。第一个状态是通过生成随机的候选乌鸦,为乌鸦 i i i​生成一个新的位置见式(2)。
X i t + 1 = X i t + L F ∗ ( X r 1 − X i t ) , i ∈ n c r o w (2) X_i^{t+1}=X_i^t+LF*(X_{r1}-X_i^t),i\in n_{crow}\tag{2} Xit+1=Xit+LF(Xr1Xit),incrow(2)
其中: r 1 r1 r1为随机数, L F LF LF为莱维飞行函数,可参见布谷鸟算法。

在筑巢阶段,利用目前最优的一组鸟巢进行更新,通过Levy飞行过程发现鸟巢解决方案。许多物种都观察到了莱维飞行,这是一种随机行走。列维飞行的步长由重尾概率分布控制通常称为Lévy分布。Lévy飞行在探索搜索空间方面优于均匀随机分布,因此用它代替均匀随机运动来模拟局部最优陷入、过早收敛的回避行为,提高了整体搜索空间的探索能力。超出维度范围的种群初始化状态按照式(3)进行。
X i , o u t n e w = X i , o u t m i n + r a n d ∗ ( X i , o u t m a x − X i , o u t m i n ) (3) X_{i,out}^{new}=X_{i,out}^{min}+rand*(X_{i,out}^{max}-X_{i,out}^{min})\tag{3} Xi,outnew=Xi,outmin+rand(Xi,outmaxXi,outmin)(3)
重新初始化“呈现种群的随机变化,以获得增强的探索和增加搜索空间[48]的多样性。”这一阶段被设计为一个纯粹的探索阶段,其中Levy飞行在第一个状态中使用,提供了在整个搜索空间中分散乌鸦的高能力。

1.3 寄生阶段(crow-cuckoo)

一开始,当捕食效率低时,猫会将布谷鸟赶尽杀出。捕食效率高,导致布谷鸟灭绝。布谷鸟的效率被假定为小/中等,而猫的效率则降低了。在此阶段,将部分乌鸦卵(宿主)替换为布谷鸟卵,布谷鸟卵与乌鸦卵相似,被发现的可能性较小。此外,根据适合度选择被寄生的巢,巢越好,被寄生的几率越大。构建新的解决方案/巢穴来取代一些巢穴,并以概率pa发现一小部分较差的巢穴。布谷鸟的新巢可以得到:
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 (4) X_{i,new}^{cuckoo}=X_{i,old}^{cuckoo}+S_G*k\tag{4} Xi,newcuckoo=Xi,oldcuckoo+SGk(4)

S G = ( X r 2 − X r 3 ) ∗ r a n d (5) S_G=(X_{r2}-X_{r3})*rand \tag{5} SG=(Xr2Xr3)rand(5)

其中 X i , n e w c u c k o o X_{i,new}^{cuckoo} Xi,newcuckoo​采用轮盘选择,选择鸟巢位置, S G SG SG服从均匀高斯分布, k k k​定义为二进制矩阵,计算如下:
k = r a n d [ 0 , 1 ] > P a (6) k=rand[0,1]>Pa\tag{6} k=rand[0,1]>Pa(6)
其中: P a Pa Pa t / 2 T t/2T t/2T g / 2 G g/2G g/2G给出的递增因子,其中 t 或 g t或g tg为当前迭代次数, T T T G G G为最大迭代次数。利用二进位矩阵 k k k​尽可能地保留相当一部分旧布谷鸟,保持探索搜索空间。在寄生阶段开始时,矩阵 k k k被1填充。然后, k k k​逐渐增加,以保持种群多样性。

1.4 捕食阶段(crow-cat)

一开始,捕食效率高,导致猫、乌鸦数量爆发性增长,数量减少,无法为布谷鸟提供足够的生存资源,导致布谷鸟灭绝。此阶段基于猫的跟踪模式,可以是乌鸦-猫阶段。不需要执行搜索模式,因为猫知道搜索空间是空的,不需要搜索。在这个阶段,布谷鸟雏鸟发现了驱赶猫的令人厌恶的化合物。猫以低臭味分泌物追踪布谷鸟不在的巢,选择未寄生的巢,随机追踪模式。猫是根据自己的速度移动的每一个维度,一旦他们开始追踪猎物。猫的捕食效率高,导致猫的爆发性生长,乌鸦和布谷鸟的生长缓慢。这个阶段包括三个步骤:

步骤a:更新每个维度的速度如下:
v k , d = v k , d + r ∗ c ∗ ( x b e s t , d − x k , d ) (7) v_{k,d}=v_{k,d}+r*c*(x_{best,d}-x_{k,d})\tag{7} vk,d=vk,d+rc(xbest,dxk,d)(7)
式中: v k , d v_{k,d} vk,d​为 c a t k cat_k catk d d d维度上的速度, x b e s t , d x_{best,d} xbest,d为适应度值最好的猫的位置, x k , d x_{k,d} xk,d c a t k cat_k catk的位置, c c c为常数, r r r​为[0,1]范围内的随机数。

步骤b:检查更新速度是否超过最大速度范围。如果新的速度大于最大速度,则将其设置为等于限制(速度限制被修改为从1线性降低到0.25)。

步骤c:更新 c a t k cat_k catk的位置:
x k , d = v k , d + x k , d (8) x_{k,d}=v_{k,d}+x_{k,d} \tag{8} xk,d=vk,d+xk,d(8)
算法流程

步骤1:初始化种群及算法参数

步骤2:评估适应度函数值及确定最优解及最优鸟巢。

步骤3:计算猫群,乌鸦群和鸟巢数量。

步骤4:进入筑巢阶段,按照公式(2)和(3)更新鸟巢位置。

步骤5:进入寄生阶段,按照公式(4)和(6)更新鸟巢位置。

步骤6:进入捕食阶段,按照步骤(a)至(c)即公式(7)和(8)更新鸟巢位置。

步骤7:重新评估适应度函数值,并更新全局最优解。

步骤8:判断是否满足迭代条件,若是满足则输出最优解,否则返回步骤2重新迭代更新计算。

2.实验结果

请添加图片描述

3.参考文献

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

4.Matlab代码

这篇关于智能优化算法:寄生-捕食算法-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: