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

news2025/4/19 12:59:56

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.

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

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

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

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

相关文章

C++异常智能指针

目录 异常 异常的定义 异常的抛出和捕获 异常安全问题 异常的规范 智能指针 RAII思想 使用RAII的例子 智能指针 文件资源 在linux中管理锁资源 智能指针发展历程 auto_ptr unique_ptr shared_ptr 异常 异常的定义 异常是一种处理运行时错误的机制,它…

20240629在飞凌开发板OK3588-C上使用Rockchip原厂的SDK跑通I2C扩展GPIO芯片TCA6424ARGJRR

20240629在飞凌开发板OK3588-C上使用Rockchip原厂的SDK跑通I2C扩展GPIO芯片TCA6424ARGJRR 2024/6/29 18:02 1、替换DTS了: Z:\repo_RK3588_Buildroot20240508\kernel\arch\arm64\boot\dts\rockchip viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot2024…

Jedis、Lettuce、RedisTemplate连接中间件

jedis就像jdbc一样&#xff0c;用于两个端直接的连接。 1.创建Spring项目 这里不过多赘述... 2.导入连接工具jedis 在pom文件中导入jedis的依赖。 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&…

【雷达原理】雷达测角原理及实现方法

目录 一、雷达测角原理1.1 测角研究历史和现状1.2 测角方法总结1.3 3DFFT测角1.3.1 基本原理1.2.2 测角性能 二、MATLAB仿真案例参考文献 一、雷达测角原理 1.1 测角研究历史和现状 &#xff08;1&#xff09;早期采用窄波束对准目标&#xff0c;目标的角度对应于天线的角度读…

Unity3D 转换微信小游戏指引 01

Unity3D 转换微信小游戏指引系列&#xff08;第一期&#xff09; 搭建环境 安装 WebGL 模块 首先&#xff0c;Unity 要安装WebGL Build Support模块。 在 Hub 找到安装的引擎&#xff0c;点击设置按钮&#xff0c;点击Add modules添加模块。 勾选WebGL Build Support&#…

股指期权交割日期是什么时候?在每个月几号?

今天带你了解股指期权交割日期是什么时候&#xff1f;在每个月几号&#xff1f;期权交割日是指合约到期之日&#xff0c;即投资者需要履行买卖合约的义务。 股指期权的交割日期通常是期权合约到期日的第三个星期五。如果这一天是公共假日&#xff0c;则交割日可能会提前到前一…

检索增强生成RAG系列3--RAG优化之文档处理

在上一章中罗列了对RAG准确度的几个重要关键点&#xff0c;主要包括2方面&#xff0c;这一章就针对其中一方面&#xff0c;来做详细的讲解以及其解决方案。 目录 1 文档解析1.1 文档解析工具1.2 实战经验1.3 代码演示 2 文档分块2.1 分块算法2.2 实战经验2.3 代码演示 3 文档e…

Workerman在线客服系统源码,附搭建教程

源码介绍&#xff1a; Workerman在线客服系统源码。 workerman是一个高性能的PHP socket 服务器框架&#xff0c;workerman基于PHP多进程以及libevent事件轮询库&#xff0c;PHP开发者只要实现一两个接口&#xff0c;便可以开发出自己的网络应用&#xff0c;例如Rpc服务、聊天…

基于Java的会员制医疗预约服务管理信息系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术ssm框架&#xff0c;结合JSPM工作流引擎 工具&#xff1a;IDEA/Eclipse、Navicat、Maven …

每日一题——Python实现PAT乙级1090 危险品装箱(举一反三+思想解读+逐步优化)4千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 题目链接&#xff1a;https://pintia.cn/problem-sets/994805260223102976/exam/problems/typ…

2024 vue3入门教程:windows系统下部署node环境

一、打开下载的node官网 Node.js — 下载 Node.js 二、根据个人喜好的下载方法&#xff0c;下载到自己的电脑盘符下 三、我用的是方法3下载的压缩包&#xff0c;解压到E盘nodejs目录下&#xff08;看个人&#xff09; 四、配置电脑的环境变量&#xff0c;新建环境变量的时候…

树莓派4B学习笔记17:RBG_LED全色域灯的驱动模块编写

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Python 版本3.7.3&#xff1a; ​ 今日学习&#xff1a;RBG_LED全色域灯的驱动模块编写…

初学者轻松搞定19个经典的Python程序以及代码演示

Python的经典程序展示了Python语言基本特性和功能的简单示例,这些程序在学习和理解Python编程语言的过程中起着至关重要的作用. 一些常见的经典Python程序及其在学习Python时的功能&#xff1a; 1.Hello, World! print("Hello, World!")解释:这是Python的基本输出…

(单机架设教程)凯旋|当年的QQ游戏

前言 今天给大家带来一款单机游戏的架设&#xff1a;凯旋 &#xff0c; 当年的QQ游戏 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 凯旋单机 搭建教程 此游戏架设需要安装虚拟机&#xff0c; 没有…

【面试系列】Python 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

基于源码详解ThreadPoolExecutor实现原理

个人博客地址 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog 内容拆分 这里算是一个总集&#xff0c;内容太多&#xff0c;拆分成几个比较重要的小的模块&#xff1a; ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog ThreadPoolExecutor 工作线程…

【PL理论深化】(13) 变量与环境:文法结构 | 真假表达式:isZero E | let 表达式叠放 | 定义的规则 | 条件语句的使用

&#x1f4ac; 写在前面&#xff1a;从现在开始&#xff0c;让我们正式设计和实现编程语言。首先&#xff0c;让我们扩展在之前定义的整数表达式语言&#xff0c;以便可以使用变量和条件表达式。 目录 0x00 文法结构 0x01 真假表达式&#xff1a;isZero E 0x02 let 表达式叠…

1-5题查询 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例题2.1.可回收且低脂的产品2.2.寻找用户推荐人2.3.大的国家2.4. 文章浏览 I2.5. 无效的推文 1. 相关知识点 sql判断&#xff0c;不包含null&#xff0c;判断不出来distinct是通过查询的结果来去除重复记录ASC升序计算字符长度 CHAR_LENGTH() 或 LENGTH(…

LeetCode-Leetcode 1120:子树的最大平均值

LeetCode-Leetcode 1120&#xff1a;子树的最大平均值 题目描述&#xff1a;解题思路一&#xff1a;递归解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一棵二叉树的根节点 root&#xff0c;找出这棵树的 每一棵 子树的 平均值 中的 最大 值。 子…

文章浮现之单细胞VDJ的柱状图

应各位老师的需求复现一篇文章的中的某个图 具体复现图5的整个思路图&#xff0c;这里没有原始数据&#xff0c;所以我使用虚拟生产的metadata进行画图 不废话直接上代码&#xff0c;先上python的代码的结果图 import matplotlib.pyplot as plt import numpy as np# 数据&#…