基于寄生-捕食算法的函数寻优算法

news2025/2/23 21:09:10

文章目录

  • 一、理论基础
    • 1、寄生-捕食算法
      • (1)初始化
      • (2)筑巢阶段(鸟窝)
      • (3)寄生阶段(乌鸦-布谷鸟)
      • (4)捕食阶段(乌鸦-猫)
    • 2、PPA算法伪代码
  • 二、仿真实验与结果分析
  • 三、参考文献

一、理论基础

1、寄生-捕食算法

文献[1]提出了一种新的元启发式优化方法—寄生-捕食算法(Parasitism-Predation Algorithm, PPA),该算法在乌鸦-布谷鸟-猫系统模型中模拟捕食者(猫)、寄生虫(布谷鸟)和宿主(乌鸦)之间的相互作用,以克服大数据的低收敛性和维数诅咒的问题。

(1)初始化

通过获得 n n n个最佳鸟巢,评估所有新的解决方案以解决 d d d维优化问题,如下所示: X i n e w = X i min ⁡ + r 1 ( X i max ⁡ − X i min ⁡ ) (1) X_i^{new}=X_i^{\min}+r_1(X_i^{\max}-X_i^{\min})\tag{1} Xinew=Ximin+r1(XimaxXimin)(1)其中, X i n e w X_i^{new} Xinew是初始解( i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,,n), X i min ⁡ X_i^{\min} Ximin是下限, X i max ⁡ X_i^{\max} Ximax是上限, r 1 r_1 r1是从0到1之间的均匀分布中提取的随机变量。

(2)筑巢阶段(鸟窝)

初始化后,优化算法将进入筑巢阶段、寄生阶段和捕食阶段。一开始,随着时间的推移,猫减少了乌鸦的数量。通过模拟乌鸦飞行的两种状态来评估筑巢阶段。第一种状态是通过生成随机候选乌鸦,为乌鸦 i i i生成一个新位置,如下所示: X i t + 1 = X i t + F ( X r 1 − X i t ) ∀ i ∈ n c r o w (2) X_i^{t+1}=X_i^t+F(X_{r_1}-X_i^t)\quad\forall i\in n_{crow}\tag{2} Xit+1=Xit+F(Xr1Xit)incrow(2)其中, r 1 r_1 r1是一个随机指数, F F F是一个Levy飞行步长,它是基于 ∝ \propto 稳定分布计算的,具有使用不同步长跨越大尺度距离的能力。 L e v y ( σ , μ ) Levy(\sigma,\mu) Levy(σ,μ)分布的简单版本密度是: f ( q ) = γ 2 π 1 ( q − μ ) 3 / 2 exp ⁡ ( − σ 2 ( q − μ ) ) 0 < μ < q < ∞ (3) f(q)=\sqrt{\frac{\gamma}{2\pi}}\frac{1}{(q-\mu)^{3/2}}\exp\left(-\frac{\sigma}{2(q-\mu)}\right)\quad 0<\mu<q<\infty\tag{3} f(q)=2πγ (qμ)3/21exp(2(qμ)σ)0<μ<q<(3)使用蒙特卡洛算法生成具有与Levy飞行相同行为的随机样本 L i L_i Li,用于模拟 ∝ \propto 稳定分布: L i ∼ s t e p ⊕ L e v y ( ∝ ) ∼ 0.01 u ∣ y ∣ 1 / α (4) L_i\sim step\oplus Levy(\propto)\sim0.01\frac{u}{|y|^{1/\alpha}}\tag{4} ListepLevy()0.01y1/αu(4)其中, s t e p step step是与问题规模相关的缩放系数, u = N ( 0 , σ u 2 ) u=N(0,\sigma_u^2) u=N(0,σu2) y = N ( 0 , σ y 2 ) y=N(0,\sigma_y^2) y=N(0,σy2)分别是满足 σ u = [ Γ ( 1 + α ) sin ⁡ ( π α / 2 ) Γ ( ( 1 + α ) / 2 ) α 2 ( α − 1 ) / 2 ] 1 / α ,    σ y = 1 \sigma_u=\left[\frac{\Gamma(1+\alpha)\sin(\pi\alpha/2)}{\Gamma((1+\alpha)/2)\alpha2^{(\alpha-1)/2}}\right]^{1/\alpha},\,\,\sigma_y=1 σu=[Γ((1+α)/2)α2(α1)/2Γ(1+α)sin(πα/2)]1/α,σy=1的正态分布, ⊕ \oplus 表示矢量乘法。
在筑巢阶段,通过Levy飞行过程,利用当前最佳巢群更新解,发现鸟窝。Levy飞行已经在许多物种中被观察到,这是一种随机游走。Levy飞行的步长由重尾概率分布控制,通常称为Levy分布。Levy飞行在搜索空间的探索上优于均匀随机分布,因此用它代替均匀随机运动来模拟陷入局部最优、过早收敛的规避行为,提高整体搜索空间的探索能力。第二步是通过重新初始化被违反的维度,从之前的状态修改被违反的维度,如下所示: X i , o u t n e w = X i , o u t min ⁡ + ( X i , o u t max ⁡ − X i , o u t min ⁡ ) r a n d [ 0 , 1 ] ∀    o u t ∈ v i o l a t e d d i m e n s i o n (5) X_{i,out}^{new}=X_{i,out}^{\min}+\left(X_{i,out}^{\max}-X_{i,out}^{\min}\right)rand[0,1]\quad\forall\,\,out\in violateddimension\tag{5} Xi,outnew=Xi,outmin+(Xi,outmaxXi,outmin)rand[0,1]outviolateddimension(5)重新初始化“呈现总体的随机变化,以获得增强的探索和增强搜索空间的多样性。这一阶段被设计为纯粹的探索阶段,在第一种状态下使用Levy飞行,提供在整个搜索空间中散布乌鸦的高能力。此外,超出边界外的维度都要受到约束。

(3)寄生阶段(乌鸦-布谷鸟)

一开始,当捕食效率较低时,猫会将布谷鸟赶尽杀绝;捕食效率高时,导致布谷鸟灭绝。布谷鸟的效率被假定为弱/中等,而猫的效率则降低了。在此阶段,将部分乌鸦卵(宿主)替换为布谷鸟卵,布谷鸟卵与乌鸦卵相似,被发现的可能性较小。此外,根据适应度值选择被寄生的巢,巢越好,被寄生的几率越大。构建新的巢穴来取代一些巢穴,并以概率 p a p_a 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 (6) X_{i,new}^{cuckoo}=X_{i,old}^{cuckoo}+S_G\cdot k\tag{6} Xi,newcuckoo=Xi,oldcuckoo+SGk(6) S G = ( X r 2 − X r 3 ) r a n d [ 0 , 1 ] (7) S_G=(X_{r_2}-X_{r_3})rand[0,1]\tag{7} SG=(Xr2Xr3)rand[0,1](7)其中, X i , o l d c u c k o o X_{i,old}^{cuckoo} Xi,oldcuckoo是通过轮盘赌选择的个体; S G S_G SG是均匀高斯分布步长; k k k定义为二进制矩阵,计算如下: k = r a n d [ 0 , 1 ] > p a (8) k=rand[0,1]>p_a\tag{8} k=rand[0,1]>pa(8)其中, p a p_a pa是由 t / 2 T t/2T t/2T g / 2 G g/2G g/2G给出的递增因子,其中 T T T G G G是最大迭代次数, t t t g g g是当前迭代次数。采用二元矩阵 k k k尽可能保留老布谷鸟的相当部分,保留探索搜索空间。寄生阶段开始时,矩阵 k k k被1填充。然后,增加其价值以改善种群。
由于布谷鸟分泌的驱虫剂,寄生鸟巢被捕食的可能性要小得多。在鸟巢内,有布谷鸟雏鸟的鸟会有更少的乌鸦。根据捕食的压力有多大,这种过程产生的平衡影响范围基本上是从寄生到筑巢。

(4)捕食阶段(乌鸦-猫)

一开始,强大的捕食效率导致猫和乌鸦的爆炸性增长减少,无法为布谷鸟提供足够的生存资源,因此布谷鸟灭绝。这个阶段基于猫的追踪模式,可以是乌鸦-猫阶段。不需要执行搜索模式,因为猫知道空的搜索空间并且不需要搜索。在这个阶段,布谷鸟雏鸟会释放出排斥猫的排斥性化合物。猫追踪巢穴时,臭味分泌物很少,而不是被布谷鸟占据,并随机选择非寄生巢穴作为追踪模式。一旦猫开始追踪猎物,它们就会根据自己的速度在各个维度上移动。猫的强捕食效率导致猫的爆炸性增长,乌鸦和杜鹃的低增长。该阶段包括三个步骤:
步骤1:更新各个维度的速度如下: v k , d = v k , d + r . c . ( x b e s t , d − x k , d ) , d = 1 , 2 , ⋯   , M (9) v_{k,d}=v_{k,d}+r.c.(x_{best,d}-x_{k,d}),\quad d=1,2,\cdots,M\tag{9} vk,d=vk,d+r.c.(xbest,dxk,d),d=1,2,,M(9)其中, 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 ] [0,1] [0,1]范围内的随机值。
步骤2:检查更新速度是否超过最大速度范围。在新速度大于最大速度的情况下,它被设置为等于极限(速度极限被修改为从1线性下降到0.25)
步骤3:更新 c a t k cat_k catk的位置如下: x k , d = x k , d + v k , d (10) x_{k,d}=x_{k,d}+v_{k,d}\tag{10} xk,d=xk,d+vk,d(10)

2、PPA算法伪代码

PPA算法的伪代码如图1所示。
在这里插入图片描述

图1 PPA算法伪代码

二、仿真实验与结果分析

对PPA算法单独实验,以常用23个测试函数中的F3、F4(单峰函数/30维)、F9、F10(多峰函数/30维)、F20、F21(固定维度多峰函数/6维、4维)为例,实验设置种群规模为30,最大迭代次数为1000,每种算法独立运算30次,结果显示如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数:F3
PPA:best: 128.2791, worst: 2096.902, mean: 564.3674, std: 369.7015
函数:F4
PPA:best: 25.5105, worst: 51.9664, mean: 37.5791, std: 6.8245
函数:F9
PPA:best: 36.8724, worst: 121.3954, mean: 70.894, std: 22.0422
函数:F10
PPA:best: 9.6145, worst: 16.0049, mean: 12.8844, std: 1.6332
函数:F20
PPA:best: -3.322, worst: -3.1164, mean: -3.2602, std: 0.074985
函数:F21
PPA:best: -10.1532, worst: -2.2426, mean: -6.8288, std: 3.0824

实验结果表明:PPA算法在求解优化问题上具有良好的性能。

三、参考文献

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QCC51XX---QACT用户指南

更新记录链接:QCC51XX---系统学习目录_嵌入式学习_force的博客-CSDN博客 QACT安装包不要放在有中文路径下,否则—直会安装报错。适用V7,V7.1 V7.2版本 打开QACT. 打开QACT. 点击 connection configuration 进去之后 点击1,然后点2,选择kalaccess.dll文件, workspace …

【C++】vector的模拟实现不会怎么办?看过来

&#x1f308;欢迎来到C专栏~~vector的模拟实现 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort&#x1f393;&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x1f914;&…

MySQL是如何保证主从一致的

一&#xff1a;什么是binlog Binary log(二进制日志)&#xff0c;简称Binlog。 Binlog是记录所以数据表结构变更以及表数据修改的二进制日志&#xff0c;不会记录select和show这类操作。Binlog是以事件形式记录&#xff0c;还包括语句所执行的消耗时间。Binlog是MySql Server自…

0082 时间复杂度,冒泡排序

/* * 排序也称排序算法&#xff08;Sort Algorithm&#xff09; * 排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 * * 排序分类 * 1.内部排序&#xff1a;将需要处理的所有数据都加载到内存存储器中进行排序&#xff08;使用内存&#xff09; * 插…

Keil MDK的sct分散加载文件详解

sct 分散加载文件简介 MDK 生成一个以工程名命名的后缀为 *.sct 的分散加载文件 (Linker Control File&#xff0c;scatter loading)&#xff0c;链接器根据该文件的配置分配各个节区地址&#xff0c;生成分散加载代码&#xff0c;因此我们通过修改该文件可以定制具体节区的存…

Spring源码:Spring源码阅读环境搭建

本篇内容包括&#xff1a;Mac 环境下 gradle 的安装和配置、源码克隆、新建测试类&#xff0c;测试Spring源码 等内容&#xff01; 第一步&#xff1a;Mac 环境下 gradle 的安装和配置 1、下载安装包 # 到 GitHub 的 Spring 仓库选定 Spring 版本&#xff0c;查看对应版本 Sp…

Linux项目自动化构建工具make/makefile

1.背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计其数&#xff0c;其按类型&#xff0c;功能&#xff0c;模块分别放在若干目录中&#xff0c;makefile定义了一系列的规则来制定&#xff0c;那些文件需要先编译&a…

C艹笔记--面向对象程序设计

文章目录类与对象简介类与结构的区别定义成员函数继承继承小总结[C中::和:&#xff0c; .和->的作用和区别](https://zhuanlan.zhihu.com/p/165992745)符号::和&#xff1a;的作用和区别:::一般用来表示继承符号.和->的作用和区别#include#include""和#include…

STM32入门——基本 GPIO 的输出控制

文章目录1 什么是 GPIO &#xff1f;1.1 GPIO 简介1.2 GPIO 硬件解析1.2.1 保护二极管1.2.2 P-MOS、N-MOS 管1.2.3 数据输入输出寄存器1.2.4 复用功能输出1.2.5 模拟输入输出1.3 GPIO 的工作模式1.3.1 输入模式 (模拟/浮空/上拉/下拉)1.3.2 输出模式 (推挽/开漏)1.3.3 复用功能…

基于Nodejs+vue开发实现酒店管理系统

作者简介&#xff1a;Java、前端、Pythone开发多年&#xff0c;做过高程&#xff0c;项目经理&#xff0c;架构师 主要内容&#xff1a;Java项目开发、毕业设计开发、面试技术整理、最新技术分享 项目编号&#xff1a;BS-QD-KS-002 一&#xff0c;项目简介 本项目使用纯前端技…

mysql约束

文章目录mysql约束非空约束唯一性约束主键约束使用自增列&#xff1a;AUTO_INCREMENTFOREIGN KEY约束CHECK约束mysql约束 为什么需要约束&#xff1f;为了保证数据的完整性什么叫约束&#xff1f;对表中字段的限制约束的分类&#xff1a; 角度1&#xff1a;约束的字段个数&…

吴峰光杀进 Linux 内核

【编者按】吴峰光&#xff0c;Linux 内核守护者&#xff0c;学生时代被同学戏称为“老神仙”&#xff0c;两耳不闻窗外事&#xff0c;一心只搞 Linux。吴峰光的 Linux 内核之路&#xff0c;是天赋、兴趣、耐心、坚持的综合&#xff0c;这从一个补丁前后迭代了 16 个版本后还进行…

【初识Netty使用Netty实现简单的客户端与服务端的通信操作Netty框架中一些重要的类以及方法的解析】

一.Netty是什么&#xff1f; Netty 由 Trustin Lee(韩国&#xff0c;Line 公司)2004 年开发 本质&#xff1a;网络应用程序框架 实现&#xff1a;异步、事件驱动 特性&#xff1a;高性能、可维护、快速开发 用途&#xff1a;开发服务器和客户端 Netty的性能很高&#xff0…

字符串匹配算法(BF、KMP)

目录 1、暴力匹配&#xff08;BF&#xff09;算法 2、KMP算法 1、暴力匹配&#xff08;BF&#xff09;算法 BF算法&#xff0c;即暴力(Brute Force)算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是将目标串S的第一个字符与模式串T 的第一个字符进行匹配&a…

【树莓派不吃灰】配置samba,文件夹目录配置在闲置U盘,实现局域网文件共享

目录1. 前言2. 安装 Samba2.1 安装samba 和 samba-common-bin2.2 配置/etc/samba/smb.conf文件2.3 配置登录账号和密码2.4 重启 samba 服务2.5 回到windows&#xff0c;就可以在网络当中发现共享的文件夹3. 在Windows上挂载smb的共享目录3.1 打开windows的smb功能3.2 添加网络映…

Java --- springMVC实现RESTFul案例

一、使用springMVC实现RESTFul小案例 1.1、项目目录图&#xff1a; 1.2、代码实现&#xff1a; pom.xml文件&#xff1a; <packaging>war</packaging><!--添加依赖--><dependencies><!--SpringMVC--><dependency><groupId>org.spr…

黑马C++ 03 提高4 —— STL常用容器_string容器/vector容器/deque容器

文章目录一、string容器1. string基本概念2. string构造函数3. string赋值操作4. string字符串拼接5. string查找和替换6. string字符串比较7. string字符存取8. string字符串的插入和删除9. string子串二、vector容器(尾插尾删)1. vector基本概念2. vector构造函数3. vector赋…

【目标检测】基于yolov3的血细胞检测(无bug教程+附代码+数据集)

多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC、白细胞WBC、血小板Platelets Hello,大家好,我是augustqi。今天给大家带来的保姆级教程是:基于yolov3的血细胞检测(无bug教程+附代码+数据集) 1.项目背景 在上一期的教程中,我们基于yolov3训练了一个红细…

韩顺平linux(1-11小节)

运维工程师 服务器的规划、调试优化、日常监控、故障处理 物联网linux Linux主要指的是内核 ubuntu&#xff08;python偏爱&#xff09;&#xff0c;centos 发行版本 内核进行包装 1.4服务器领域 linux在服务器领域的应用是最强的。 linux免费、稳定、高效等特点在这里得到了很…

2019 Sichuan Province Programming Contest J. Jump on Axis

题目链接&#xff1a;https://codeforces.com/gym/102821/problem/J 题意&#xff1a;给你一个坐标k&#xff0c;每次从0开始走 每次有三个选择&#xff1a;选择1走一步&#xff0c;选择2走两步&#xff0c;选择3走三步 每次选第i个选择的时候&#xff0c;如果他没有被选过&…