一区算法MPA|海洋捕食者算法原理及其代码实现(Matlab/Python))

Matlab/Python:
在这里插入图片描述
在这里插入图片描述

本文KAU将介绍一个2020年发表在1区期刊ESWA上的优化算法——海洋捕食者算法 (Marine Predators Algorithm,MPA)[1]

在这里插入图片描述

该算法由Faramarzi等于2020年提出,其灵感来源于海洋捕食者之间不同的觅食策略、最佳相遇概率策略、海洋记忆存储与海洋漩涡以及鱼类聚集效应影响。

算法性能上,在通风和建筑能源性能领域的29个测试函数、CEC2017及3个工程基准和2个工程实际问题等上进行评估,对比算法包含3类:

(1)GA、PSO-研究最充分的启发式算法;

(2)GSA、CS、SSA-最近开发的算法;

(3)CMA-ES、SHADE、LSHADE-高性能与CEC优胜算法

MPA性能排名第二!
在这里插入图片描述

MPA算法共分为三个阶段,设计的挺有意思,如果有想做算法改进的朋友也可以看下去,本文将介绍该算法的相关原理并给出其MATLAB和Python实现。

00 目录

1 海洋捕食者算法(MPA)原理

2 代码目录

3 算法性能

4 源码获取

01 海洋捕食者算法(MPA)原理

在这里插入图片描述

MPA算法的灵感来自海洋生物的捕食行为和捕食策略,MPA 算法中海洋生物以莱维运动(Lévy flight/walk)和布朗(Brownian)运动两种捕食策略进行捕食。在海洋捕食者算法的优化过程中,算法针对不同的阶段,通过平衡莱维运动和布朗运动增加海洋捕食者和猎物之间相遇的可能性(做算法改进时,这点可以作参考!)。

在介绍算法步骤前,KAU先介绍海洋捕食者的觅食策略,即莱维飞行与布朗运动,再对MPA的算法原理进行介绍:

1.1 布朗运动

海洋捕食者在在猎物丰富的区域使用布朗运动策略。MPA 使用的是标准布朗运动,其随机生成的步长由零均值((u=0)和单位方差(σ2=1)的高斯分布定义的概率函数得出。在点 x 的可能概率函数:

在这里插入图片描述

1.2 莱维飞行

海洋捕食者在猎物数量稀少的海洋环境中采用莱维飞行策略。莱维飞行本质上是一种随机游走策略,其步长遵循莱维分布。为了生成稳定的莱维分布,通常根据 Mantegna 算法生成服从莱维分布的随机数。步长 S 的计算方式如下:

在这里插入图片描述

式中:α表示在0到2范围内的指数分布,x和y是两个正态分布变量:
在这里插入图片描述

标准差σx和σy定义如下:

在这里插入图片描述

式中:Γ是伽玛函数,整数z的函数定义为:

在这里插入图片描述

两种分布的轨迹如下:
在这里插入图片描述

1.3 MPA算法步骤

海洋捕食者算法寻优主要通过三个主要阶段来执行;其中,包括初始化、优化和FADs效应三个阶段。

1.3.1 初始化

MPA 是一种基于种群的方法,其初始解与其他元启发式算法一样,均匀分布在搜索空间中:

在这里插入图片描述

其中,Xmin和Xmax分别表示求解问题中变量的最小值和最大值,rand 表示(0,1)中的均匀随机数。

捕食者在寻找食物时,猎物也在寻找食物,因此,需要定义两个矩阵。选取最优解作为顶端捕食者,构造一个名为 Elite 矩阵,该矩阵数组监视搜索过程,并根据猎物的位置信息搜索猎物。第二个矩阵是 Prey 矩阵,它的维数与 Elite 相同,捕食者基于这个矩阵进行更新。在每次迭代结束时,如果出现适应度值更高的捕食者,当前顶端的捕食者会被替换,精英矩阵随之更新。Elite 矩阵和 Prey 矩阵定义如下:
在这里插入图片描述

其中,n为种群数量,d为问题维度。

1.3.2 优化

MPA 考虑了捕食者和猎物的速度比例,定义了三个阶段的位置更新公式。v 表示了猎物和捕食者的速度比例,并明确了三个阶段及其对应的公式,每种方式都

有一个预设的迭代周期,具体如下:

阶段 1:高速度比

该阶段处于算法迭代次数的前三分之一,在这期间执行算法的勘探。猎物比捕食者游得更快(v>10 ),捕食者因自身速度远低于猎物而放弃捕猎,不移动,猎物执行布朗运动,该阶段数学模型为:
在这里插入图片描述

在公式(2.4)中,RB表示布朗运动,该向量是服从正态分布的随机向量。RB与猎物点乘表示模拟猎物的布朗运动;P 表示一个常数通常取 P =0.5,R表示服从[0,1]均匀分布的随机向量。 Iter为当前的迭代次数, Max_ Iter为最大迭代次数。

阶段 2:相同速度比

该阶段处于算法迭代次数的三分之一到三分之二,在这期间算法从勘探向开发的过渡。猎物和捕食者的速度基本相同(v≈1),此时捕食者和猎物都在寻找各自的猎物,整个种群被分为两个部分,其中一部分代表捕食者用于勘探(布朗运动),另一部分代表猎物用于开发(莱维飞行)。该阶段的数学模型可用如下公式表示:

在这里插入图片描述

前一半种群,猎物开发:

在这里插入图片描述

其中,RL表示模拟莱维运动的随机数向量,通过RL 与 Prey 相乘模拟猎物进行莱维运动。

后一半种群,捕食者勘探:

在这里插入图片描述

通过RB与 Elite 相乘模拟捕食者进行布朗运动,猎物根据捕食者的运动来更新自己位置,CF 是控制捕食者移动步长的自适应参数,更新公式如下.
在这里插入图片描述

阶段 3:低速度比

该阶段处于算法总迭代次数的最后三分之一,主要是提高算法的开发能力。在这个时段,猎物的移动速度比捕食者慢(v=0.1),捕食者的策略是莱维运动:

在这里插入图片描述

1.3.3 FADs效应

导致海洋捕食者行为改变的还有环境因素,如涡流形成或鱼群聚集装置(FADs)效应。在这些因素的影响下,它们可能需要在不同的维度上进行更长时间的跳跃,以寻找另一个猎物分布的环境。FADs 可以表示探索区域的局部最优。通过在算法优化过程中设置更长的跳跃可以避免陷入局部最优。

在这里插入图片描述

其中,FADs 表示影响算法优化过程的概率,通常情况下取 0.2;U是随机生成的0或1的二进制向量序列;R为[0,1]之间的随机数;r1和r2为猎物矩阵的随机索引。当 r ≤FADs 时,捕食者会在不同的维度上进行更长时间的跳跃,以此来寻找其他最优解分布空间,从而达到跳出局部最优的效果。当 r >FADs时,捕食者会在当前的捕食者空间内随机移动。

1.4 算法流程图

MPA算法核心在于莱维飞行与布朗运动的转换应用,其在不同阶段的更新思路都可以作为算法改进的学习之处,同时,MPA算法还设计了一种跳出局部最优的策略,同样也可作为参考。MPA算法的流程图如下:

在这里插入图片描述

02 代码目录

在这里插入图片描述

包含Matlab、Python文件以及MPA算法源文献

代码都经过作者重新注释,代码更清爽,可读性强,其中Readme给出了一些注意:
在这里插入图片描述

部分代码:

在这里插入图片描述

03 算法性能

采用CEC测试函数初步检验其寻优性能

在MATLAB中,执行程序结果如下:

在这里插入图片描述

在PYTHON中,执行程序结果如下:

在这里插入图片描述

04 源码获取

在公众号(KAU的云实验台)后台回复 MPA 即可~​

参考文献

[1] FARAMARZI A,HEIDARINEJAD M,MIRJALILI S,et al.Marine predators algorithm:a nature-inspired metaheuristic[J].Expert Systems with Applications,2020,152:113377.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!若有定制需求,可私信作者。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径:/var/lib/mysql数据库命令存放路径:/user/bin和/user/sbin配置文件目录:/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

使用evo工具比较ORB-SLAM3的运行轨迹(从安装到解决报错)

ORB-SLAM2和ORB-SLAM3怎么跑出来,之前都有相关的保姆级的教程,下来给大家介绍一款evo工具,给科研加速!!! 文章目录 1.下载evo2.生成轨迹3.evo别的功能使用 1.下载evo 输入命令下载 pip install -i https…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后,我们要进一步进行提取的操作,我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作: 怎么获取密码,通过sql注入获取这个大家都应该知道了&a…

百强韧劲,进击新局 2023年度中国医药工业百强系列榜单发布

2024年,经济工作坚持稳中求进、以进促稳、先立后破等工作要求。医药健康行业以不懈进取的“韧劲”,立身破局,迎变启新。通过创新和迭代应对不确定性,进化韧性力量,坚持高质量发展,把握新时代经济和社会给予…

零基础开始学习鸿蒙开发-读书app简单的设计与开发

目录 1.首页设计 2.发现页面的设计 3.设置页面的设计 4.导航页设计 5.总结: 6.最终的效果 1.首页设计 Entry Component export struct home {State message: string 首页build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点,有学者在小波分析基础上引入调频算子构成了线性调频小波变换,线调频小波一方面继承了小波变换的理论完善性,另一方面用一个新的参数(线调频参数)刻…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑:通过整合业务与财务数据,为决策提供准确、实时的信息基础,确保分析的深度与广度。促进业务与财务协同:打破信息孤岛,实现业务流程与财务管…

Django 定义模型执行迁移

1,创建应用 Test/app8 python manage.py startapp app8 2,注册应用 Test/Test/settings.py 3,配置路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(app8/, include(a…

Linux服务器上安装CUDA11.2和对应的cuDNN 8.4.0

一、检查 检查本机是否有CUDA工具包,输入nvcc -V: 如图所示,服务器上有CUDA,但版本为9.1.85,版本过低,因此博主要重装一个新的。 二、安装CUDA 1.查看服务器最高支持的CUDA版本 在命令行输入nvidia-smi查看显卡驱动…

Mining Engineering First Aid Riding

4个最主要的日常技能:Mining 采矿 Engineering 工程 First Aid 急救 Riding 骑术 4个最主要的日常技能

C# 信号量的使用

学习来源:《.net core 底层入门》 第六章第9节:信号量 案例:主线程负责添加数据,子线程负责获取数据 使用SemaphoreSlim(轻信号量)实现: using System; using System.Collections.Generic; us…

AI写作变现指南:从项目启动到精通

项目启动 1. 确定目标客户群体 首先,明确谁是我们的目标客户。以下是一些潜在的客户群体: 大学生:他们需要写论文、报告、演讲稿等。 职场人士:包括需要撰写商业计划书、市场分析报告、项目提案等的专业人士。 自媒体从业者&…

TiDB-从0到1-BR工具

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、BR工具 BR工具全称backup & restore,如同MySQL可以通过mysqldump和xtrabackup进行备份…

入门JavaWeb之 JDBC 连接数据库

JDBC:Java Database Connectivity,Java 数据库连接 需要 jar 包支持: java.sql javax.sql mysql-connector-java(连接驱动,必须导入) 在 MySQL 先建个 jdbc 数据库后 USE jdbc; 执行后再 CREATE TABLE…

Java_日志

日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随时以开关的形式控制日志启停,无需侵入到源代码中去进行修改。 日志技术的体系结构 日志框架:JUL、Log4j、Logback、其他实现。 日志接口&#xf…

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis,以及OSS服务,OSS除了云OSS服务,还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库,那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS, iterm2&#…

线性结构之栈结构

栈是一种只能从一端存取数据并且遵循“后进先出”原则的线性存储结构。这句话中体现了栈结构的三个特征——只能从一端存取数据,遵循“后进先出”的原则和线性存储结构。因此如果我们要实现一个栈结构的数据结构,就必须要满足这三点要求。提到线性结构&a…

产品经理系列1—如何实现一个电商系统

具体笔记如下,主要按获客—找货—下单—售后四个部分进行模块拆解

ubuntu 系统中 使用docker 制作 Windows 系统,从此告别 vmware虚拟机

我的系统是 ubuntu 24 前期准备工作: 安装dockerdocker pull 或者 手动制作镜像 docker build 的话 必须要 科学上网, 好像阿里镜像都下不下来。需要 知道 docker 和docker compose 命令的使用方式 我是给docker 挂了 http代理 如果你能pull下来镜像 …

大家都在跳槽,我需要跳槽吗?

文章目录 1. 前言2. 最初的跳槽想法萌芽3. 跳槽想法的再次萌芽4. 我是否需要跳槽呢?5. 那些跳槽的同学怎么样了?6. 小结 1. 前言 两周前,看到研究生同班同学发的一条朋友圈,内容为”下一站 杭州~”,配图是拍的北京开往杭州的列车…