河马优化算法(HO)-2024年Nature子刊新算法 公式原理详解与性能测评 Matlab代码免费获取
声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
原理简介
一、种群初始化
二、河马在河流或池塘中的位置更新(勘探阶段)
三、河马防御捕食者(勘探阶段)
四、河马逃离捕食者(开发阶段)
算法流程图和伪代码
性能测评
参考文献
完整代码
河马优化算法(Hippopotamus Optimization Algorithm,HO)是一种新型的元启发式算法(智能优化算法),灵感来源于河马的固有行为。该成果由Mohammad Hussein Amiri等人于2024年2月发表在Nature旗下子刊《Scientific Reports》上。
注意,该算法的作者中包括了Seyedali Mirjalili等优化算法领域大名鼎鼎的学者。熟悉该作者的小伙伴都知道,非常经典的灰狼优化算法、鲸鱼优化算法、蜻蜓优化算法、海洋捕食者算法等种种知名优化算法都是由他发明的,他的算法性能一般都是有保证的,此次发明的河马算法效果也同样不错!
由于发表时间较短,谷歌学术上还没人引用!你先用,你就是创新!
原理简介
HO的灵感来源于在河马生活中观察到的三种突出的行为模式。
河马群由几只雌性河马、小河马、多只成年雄性河马和一只占优势的雄性河马(群的首领)组成。
第一种行为由于天生的好奇心,幼河马和小河马经常表现出偏离群体的倾向。因此,它们可能会变得孤立,成为捕食者的目标。
河马的第二种行为模式本质上是防御性的,当它们受到捕食者的攻击或其他生物侵入它们的领地时就会触发。河马表现出防御反应,向捕食者旋转自己,并利用它们可怕的下颚和发声来威慑和击退攻击者(图1)。狮子和斑点鬣狗等捕食者意识到了这一现象,并积极避免直接接触河马可怕的下颚,作为预防潜在伤害的措施。
第三种的行为模式包括河马逃离捕食者并积极寻求与潜在危险区域保持距离的本能反应。在这种情况下,河马会努力向最近的水体航行,如河流或池塘,因为狮子和斑点鬣狗经常表现出对进入水生环境的厌恶。
一、种群初始化
HO是一种基于种群的优化算法,其中搜索代理是河马。在HO算法中,河马是优化问题的候选解,这意味着每个河马在搜索空间中的位置更新表示决策变量的值。因此,每只河马都被表示为一个向量,河马种群在数学上由一个矩阵来表征。与传统的优化算法类似,HO的初始化阶段涉及随机初始解的生成。在该步骤中,使用以下公式生成决策变量的向量:
其中,χi表示第i个候选解的位置,r是0到1范围内的随机数,lb和ub分别表示第j个决策变量的下界和上界。
二、河马在河流或池塘中的位置更新(勘探阶段)
河马群由几只成年雌性河马、小牛河马、多只成年雄性河马和占主导地位的雄性河马(群的首领)组成。基于目标函数值迭代来确定优势河马(最小化问题的最小值和最大化问题的最大值)。通常情况下,河马往往会聚集在彼此很近的地方。占主导地位的雄性河马保护牛群和领地免受潜在威胁。多只雌性河马被安置在雄性河马周围。成年后,雄性河马会被占优势的雄性从牛群中赶走。随后,这些被驱逐的雄性个体被要求吸引雌性,或与牛群中其他已建立的雄性成员进行优势竞争,以建立自己的优势。下式表达了雄性河马的位置:
在等式中(3)中,χi mhippo表示雄性河马的位置,Dhippo表示优势河马的位置(在当前迭代中具有最佳适应度的河马)。r1-r4是0和1之间的随机矢量,r5是0和1之间的随机数(等式4),I1和I2是1和2之间的整数(等式3和6)。
mGi是指一些随机选择的河马的平均值,其包括当前考虑的河马的概率相等(χi),y1是介于0和1之间的随机数(等式3)。在等式中(4)中,q1和q2是整数随机数,可以是1或0。
方程(6)和(7)描述了雌性或未成熟河马在牛群中的位置(χi FB河马)。大多数未成熟的河马都在母亲身边,但由于好奇,有时未成熟的河马会与牛群分离或远离母亲。
如果T大于0.6,这意味着未成熟的河马已经与母亲拉开了距离(等式5)。如果r6是一个介于0和1之间的数字(等式7),大于0.5,这意味着未成熟的河马已经与母亲保持距离,但仍在牛群内或附近,否则,它已经与牛群分离。根据等式(6)和(7)对未成熟和雌性河马的这种行为进行建模。h1和h2是从h方程中的五个场景中随机选择的数字或向量。在等式(7)种,r7是介于0和1之间的随机数。等式(8)、(9)描述了群内雄性和雌性或未成熟河马的位置更新。Fi是目标函数值:
在所提出的算法中,使用h向量,I1和I2场景增强了全局搜索并改进了探索。该算法具有更好的全局搜索能力,提高了探索过程的寻优能力。
三、河马防御捕食者(勘探阶段)
河马群居的主要原因之一可以归因于它们的安全保障。这些庞大而沉重的动物群的存在可以阻止捕食者靠近它们。然而,由于其固有的好奇心,未成熟的河马可能偶尔会偏离牛群,成为尼罗河鳄鱼、狮子和斑点鬣狗的潜在目标,因为与成年河马相比,它们的力量相对较弱。生病的河马和未成熟的河马一样,也容易被捕食者捕食。
河马采用的主要防御策略是迅速转向捕食者并发出响亮的叫声,以阻止捕食者靠近它们(图2)。在这一阶段,河马可能会表现出接近捕食者以诱导其撤退的行为,从而有效地抵御潜在的威胁。方程(10)表示捕食者在搜索空间中的位置:
其中表示一个从0到1的随机向量。
等式(11)表示第i只河马到捕食者的距离。在这段时间里,河马采取了基于FPredatorj因素的防御行为,以保护自己免受捕食者的攻击。如果FPredatorj小于Fi,表明捕食者离河马非常近,在这种情况下,河马会迅速转向捕食者,并向其移动,使其后退。如果FPredatorj更大,则公式(12)表明捕食者或入侵河马的领地更远。在这种情况下,河马转向捕食者,但活动范围更为有限。其目的是让捕食者或入侵者意识到其在其领土内的存在。
χi HippoR是河马面对捕食者时的姿势→RL是一个具有Levy分布的随机向量,用于攻击河马时捕食者位置的突然变化。Lévy运动46的随机运动的数学模型计算为等式(13)。w和v是0-1之间随机数,Ŵ是伽玛函数的缩写,σw可以通过计算等式(14)获得。
在等式(12)中,f是2和4之间的均匀随机数,c是1和1.5之间的均匀随意数,D是2和3之间的均匀任意数。g表示−1和1之间的随机数。r9是一个维数为1×m的随机向量。
根据等式(15),如果FHippoR i大于F,则意味着该河马已被猎杀,另一只河马将取代它,否则猎人将逃跑,这只河马将返回牛群。在第二阶段,观察到全局搜索过程有了显著的改进。第一阶段和第二阶段相辅相成,有效地降低了陷入局部极小值的风险。
四、河马逃离捕食者(开发阶段)
河马在面对捕食者时的另一种行为是,当河马遇到一群捕食者或无法用防御行为击退捕食者时。在这种情况下,河马试图离开该区域(图3)。
通常,河马会试图跑到最近的湖泊或池塘,以避免捕食者的伤害,因为斑狮和鬣狗会避免进入湖泊或池塘。这种策略导致河马在靠近其当前位置的地方找到一个安全的位置,并在HO的第三阶段对这种行为进行建模,从而增强了在本地搜索中的利用能力。为了模拟这种行为,在河马的当前位置附近生成一个随机位置。河马的这种行为是根据等式(16-19)建模的。当新创建的位置提高了成本函数值时,表明河马在其当前位置附近找到了一个更安全的位置,并相应地改变了位置。t表示当前迭代次数,而T表示最大迭代次数:
在等式(17)中,χi HippoE是为了找到最近的安全地点而搜索的河马的位置。s1是从三个场景s等式(18)中随机选择的随机向量或数。所考虑的场景具有更强的局部搜索能力,或者换句话说,可以帮助我们的算法具有更高的开发质量。
在等式(18)中,r11表示0和1之间的随机矢量,而r10(等式17)和r13表示在0和1的范围内生成的随机数。此外,r12是一个正态分布的随机数。
总的来说,在更新种群的HO算法中,我们没有将种群分为未成熟、雌性和雄性三个单独的类别,因为尽管将它们分为单独的类别可以更好地模拟它们的性质,但这会降低优化算法的性能。
算法流程图和伪代码
为了使大家更好地理解,这边给出算法流程和伪代码,非常清晰!
如果实在看不懂,不用担心,可以看下代码,再结合上文公式理解就一目了然了!
性能测评
原文作者共在161个基准函数中的115个函数中获得了最佳值,包括单峰和多峰函数、固定维多峰函数,即维度为10、30、50和100的CEC2019测试函数和CEC2014测试函数以及Zigzag Pattern基准函数,这表明HO在开发和探索方面表现出了显著的熟练程度。
这边为了方便大家对比与理解,采用23个标准测试函数,即CEC2005,并与经典且性能优越的麻雀优化算法SSA进行对比!这边展示其中5个测试函数的图,其余十几个测试函数大家可以自行切换尝试!
可以看到,HO的效果还是非常不错的!在大部分函数上都超过了SSA算法,说明Seyedali Mirjalili出来的算法性能还是有保障的!大家应用到各类预测、优化问题中是一个不错的选择~
参考文献
[1]Amiri M H, Mehrabi Hashjin N, Montazeri M, et al. Hippopotamus optimization algorithm: a novel nature-inspired optimization algorithm[J]. Scientific Reports, 2024, 14(1): 5032.
完整代码
如果需要免费获得图中的完整测试代码,只需后台回复关键字:
HO
也可后台回复个人需求(比如HO-SVM)定制河马优化算法HO优化模型(看到秒回):
1.回归/时序/分类预测类:SVM、RVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN等等均可~
2.组合预测类:CNN/TCN/BiTCN/DBN/Adaboost结合SVM/RVM/ELM/LSTM/BiLSTM/GRU/BiGRU/Attention机制类等均可(可任意搭配非常新颖)~
3.分解类:EMD、EEMD、VMD、REMD、FEEMD、TVF-EMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可~
4.其他:机器人路径规划、无人机三维路径规划、DBSCAN聚类、VRPTW路径优化、微电网优化、无线传感器覆盖优化、故障诊断等等均可~
5.原创改进优化算法(适合需要创新的同学):2024年的河马优化算法HO以及麻雀SSA、蜣螂DBO等任意优化算法均可,保证测试函数效果!
更多代码链接:
更多代码链接
相关文章:

河马优化算法(HO)-2024年Nature子刊新算法 公式原理详解与性能测评 Matlab代码免费获取
声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 原理简介 一、种群初始化 二、河马在河流或…...

SLAM 算法综述
LiDAR SLAM 其主要思想是通过两个算法:一个高频激光里程计进行低精度的运动估计,即使用激光雷达做里程计计算两次扫描之间的位姿变换;另一个是执行低频但是高精度的建图与校正里程计,利用多次扫描的结果构建地图,细化位…...

搭建Hadoop3.x完全分布式集群
零、资源准备 虚拟机相关: VMware workstation 16:虚拟机 > vmware_177981.zipCentOS Stream 9:虚拟机 > CentOS-Stream-9-latest-x86_64-dvd1.iso Hadoop相关 jdk1.8:JDK > jdk-8u261-linux-x64.tar.gzHadoop 3.3.6&am…...

linux常用命令(二)
目录 前言 常用命令 1.ls命令 2. cd命令 3.pwd命令 4.mkdir 命令 5. rmdir 命令 6.rm 命令 7.cp命令 8.mv命令 9.touch命令 10.cat命令 11.more命令 12.less命令 13.head命令 14.tail命令 15.tail命令 16.find命令 17.tar命令 18.gzip命令 19.gunzip命令 …...

【Vue】Request模块 - axios 封装Vuex的持久化存储
📝个人主页:五敷有你 🔥系列专栏:Vue ⛺️稳中求进,晒太阳 Request模块 - axios 封装 使用axios来请求后端接口,一般会对axios进行一些配置(比如配置基础地址,请求响应拦截器…...

【2024第一期CANN训练营】4、AscendCL推理应用开发
文章目录 【2024第一期CANN训练营】4、AscendCL推理应用开发1. 创建代码目录2. 构建模型2.1 下载原始模型文件2.2 使用ATC工具转换模型2.3 注意事项 3. 模型加载3.1 示例代码 4. 模型执行4.1 获取模型描述信息4.2 准备输入/输出数据结构4.3 执行模型推理4.4 释放内存和数据类型…...

Rust 构建开源 Pingora 框架可以与nginx媲美
一、概述 Cloudflare 为何弃用 Nginx,选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年,是一家领先的云服务提供商,专注于内容分发网络(CDN)和分布式域名解析。它提供一系列安全和性能优化服务…...

MediaCodec源码分析 ACodec状态详解
前言 本文分析ACodec状态机,ACodec是MediaCodec的底层实现,在MediaCodec命令下切换不同状态进行编解码,基于7.0代码。 ACodec状态介绍 UninitializedState:未初始化状态。 在业务层调用MediaCodec. createByCodecName 完成后切换到LoadedState。 LoadedState:表示解码器…...

【Elasticsearch】windows安装elasticsearch教程及遇到的坑
一、安装参考 1、安装参考:ES的安装使用(windows版) elasticsearch的下载地址:https://www.elastic.co/cn/downloads/elasticsearch ik分词器的下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases kibana可视化工具下载…...

如何快速搭建物联网工业云平台
随着物联网技术的快速发展,物联网工业云平台已经成为推动工业领域数字化转型的重要引擎。合沃作为专业的物联网云服务提供商,致力于为企业提供高效、可靠的物联网工业云平台解决方案。本文将深入探讨物联网工业云平台的功能、解决行业痛点的能力以及如何…...

Spring Data访问Elasticsearch----Elasticsearch对象映射
Spring Data访问Elasticsearch----Elasticsearch对象映射 一、元模型(Meta Model)对象映射1.1 映射注解概述1.1.1 控制向Elasticsearch写入和从其读取哪些属性1.1.2 日期格式映射1.1.3 Range类型1.1.4 映射的字段名1.1.5 Non-field-backed属性1.1.6 其他属性注解 1.2 映射规则1…...

Linux之shell循环
华子目录 for循环带列表的for循环格式分析示例shell允许用户指定for语句的步长,格式如下示例 不带列表的for循环示例 基于C语言风格的for循环格式示例注意 while循环格式示例 until循环作用格式示例 循环控制breakcontinue详细语法示例 循环嵌套示例 for循环 for循…...

Python入门教程(一)|基本语法概述
目录 1. 注释 2. 变量和数据类型 3. 控制流 4. 函数 5. 类与对象 6. 异常处理 7. 模块和包 8. 文件操作 1. 注释 在Python中,单行注释以#开始,多行注释使用三个引号 """ 或 。 # 这是单行注释""" 这是 多行 注释…...

Android Studio入门——页面跳转
1.工程目录 2.MainActivity package com.example.demo01;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCo…...

肝了三天,完成了AIGC工具网站大全,建议收藏再看
说是肝了三天,其实远远不止,前前后后,从资料搜集到最后整理成文,有近一个月了,大家看在整理不易的份上,给点个赞吧,不要光顾着收藏呀! 国内网站 AIGC 导航 https://www.aigc.cn 网…...

算法练习:前缀和
目录 1. 一维前缀和2. 二维前缀和3. 寻找数组中心下标4. 除自身以外数组的乘积5. !和为k的子数字6. !和可被k整除的子数组7. !连续数组8. 矩阵区域和 1. 一维前缀和 题目信息: 题目链接: 一维前缀和思路:求前缀和数组,sum dp[r] …...

Kafka MQ 生产者
Kafka MQ 生产者 生产者概览 尽管生产者 API 使用起来很简单,但消息的发送过程还是有点复杂的。图 3-1 展示了向 Kafka 发送消息的主要步骤。 我们从创建一个 ProducerRecord 对象开始,ProducerRecord 对象需要包含目标主题和要发送的内容。我们还可以…...

SQLiteC/C++接口详细介绍之sqlite3类(十)
返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(九) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十一) 30.sqlite3_enable_load_extension&#x…...

Vue中nextTick一文详解
什么是 nextTick? 在 Vue 中,当我们修改数据时,Vue 会自动更新视图。但是,由于 JavaScript 的事件循环机制,我们无法立即得知视图更新完成的时机。这时候,我们就需要使用 nextTick 来获取视图更新完成后的…...

爱奇艺 CTR 场景下的 GPU 推理性能优化
01 背景介绍 GPU 目前大量应用在了爱奇艺深度学习平台上。GPU 拥有成百上千个处理核心,能够并行的执行大量指令,非常适合用来做深度学习相关的计算。在 CV(计算机视觉),NLP(自然语言处理)的模型…...

详解MySql索引
目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大,且…...

struct 和 union 的区别?
struct和union的分对应点总结 存储方式: struct:struct中的每个成员都拥有独立的内存空间。一个struct变量的总长度是其所有成员的长度之和,且通常会根据编译器的内存对齐规则进行适当调整。union:union中的所有成员共享同一段内…...

Linux - 安装 Jenkins(详细教程)
目录 前言一、简介二、安装前准备三、下载与安装四、配置镜像地址五、启动与关闭六、常用插件的安装 前言 虽然说网上有很多关于 Jenkins 安装的教程,但是大部分都不够详细,或者是需要搭配 docker 或者 k8s 等进行安装,对于新手小白而已&…...

【JAVA】JAVA方法的学习和创造
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| 💫个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…...

Rust写一个wasm入门并在rspack和vite项目中使用(一)
rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包,然后解压到用户/.cargo/bind目录下,将解压后的文件放到该目录下即可。 创建wasm项目 …...

HTTP和HTTPS的区别,HTTPS加密原理是?
HTTP和HTTPS都是网络传输协议,主要用于浏览器和服务器之间的数据传输,但它们在数据传输的安全性、加密方式、端口等方面有所不同。 数据传输的安全性:HTTP是明文传输,数据不加密,容易被黑客窃听、篡改或者伪造&#x…...

基于Spring Boot+Vue的校园二手交易平台
目录 一、 绪论1.1 开发背景1.2 系统开发平台1.3 系统开发环境 二、需求分析2.1 问题分析2.2 系统可行性分析2.2.1 技术可行性2.2.2 操作可行性 2.3 系统需求分析2.3.1 学生功能需求2.3.2 管理员功能需求2.3.3游客功能需求 三、系统设计3.1 功能结构图3.2 E-R模型3.3 数据库设计…...

什么是软件开发?软件开发阶段划分是什么?并以LabVIEW为例进行说明
软件开发是一种创建、设计、编码、测试和维护应用程序、框架或其他软件组件的过程。它涉及从理解需求到设计、实现、测试、部署和最终维护的全过程。软件开发可以用来创建新的软件应用、系统软件、游戏、或开发网络应用等。 软件开发过程通常可以分为以下几个阶段:…...

PTAL1-006 连续因子
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...

【Java】容器|Set、List、Map及常用API
目录 一、概述 二、List 1、List的常用API 2、ArrayList 3、List遍历 三、Set 1、Set的常用方法: 2、HashSet 3、遍历集合: 四、Map 1、Map常用API 2、HashMap 3、遍历Map 五、迭代器 一、概述 在Java中所有的容器都属于Collection接口下的内容 1…...