河马优化算法(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等任意优化算法均可,保证测试函数效果!

        更多代码链接:

更多代码链接

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python编程基础】第一节.Python基本语法(上)

文章目录 前言⼀、Python介绍二、Python环境配置三、Pycharm 书写代码四、Python基本语法 4.1 print 函数的简单使用 4.2 注释 4.3 Python 代码中三种波浪线和 PEP8 4.4 在 cmd 终端中运⾏ Python 代码 4.5 变量 4.6 数据类型 4.7 类型转换…

Python使用openpyxl库或pandas库创建.xlsx格式的Excel文件,并向文件不同的sheet按行或按列写入内容

import openpyxl# 创建-一个Workbook对象 wb openpyxl.Workbook()# 创建多个工作表 sheet1 wb.active sheet1.title "s1"sheet2 wb.create_sheet("s2")# 在不同的工作表中写入数据 sheet1["A1"] Data for Sheet1 sheet1["A2"] D…

HCIP—BGP邻居关系建立实验

BGP的邻居称为:IBGP对等体 EBGP对等体 1.EBGP对等体关系: 位于 不同自治系统 的BGP路由器之间的BGP对等体关系 EBGP对等体一般使用 直连建立 对等体关系,EBGP邻居之间的报文 TTL中值设置为1 两台路由器之间建立EBGP对等体关系&#xff0…

SQLiteC/C++接口详细介绍之sqlite3类(十三)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十二) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十四)(未发表) 40.sqlite3…

【算法】一类支持向量机OC-SVM(1)

【算法】一类支持向量机OC-SVM 前言一类支持向量机OC-SVM 概念介绍示例编写数据集创建实现一类支持向量机OC-SVM完整的示例输出 前言 由于之前毕设期间主要的工具就是支持向量机,从基础的回归和分类到后来的优化,在接触到支持向量机还有一类支持向量机的…

Redis Desktop Manager:一站式Redis数据库管理与优化

Redis Desktop Manager是一款功能强大的Redis桌面管理工具,也被称作Redis可视化工具。以下是其主要的功能特色: 连接管理:Redis Desktop Manager支持连接多个Redis服务器,用户可以在同一界面下管理多个数据库,大大提高…

通用的springboot web jar包执行脚本,释放端口并执行jar包

1、通用的springboot web jar包执行脚本,释放端口并执行jar包: #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/data/yitu-projects/yitu-xzhq/sftp # 服务名称。同时约定部署服务的 jar 包名字也为它。 SERVER_NAMEyitu-server # 环境…

数据仓库数据分层详解

数据仓库中的数据分层是一种重要的数据组织方式,其目的是为了在管理数据时能够对数据有一个更加清晰的掌控。以下是数据仓库中的数据分层详解: 原始数据层(Raw Data Layer):这是数仓中最底层的层级,用于存…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

android MMKV数据持久化缓存集合

前言 最近在使用mmkv缓存的时候 发现没有集合缓存 非常不方便 自己写一个方法 MMKV public class MmkvUtils {private MmkvUtils() {throw new UnsupportedOperationException("u cant instantiate me...");}public static void init() {MMKV.initialize(LeoUtils…

RTP 控制协议 (RTCP) 反馈用于拥塞控制

摘要 有效的 RTP 拥塞控制算法,需要比标准 RTP 控制协议(RTCP)发送方报告(SR)和接收方报告(RR)数据包提供的关于数据包丢失、定时和显式拥塞通知 (ECN) 标记的更细粒度的反馈。 本文档描述了 RTCP 反馈消息,旨在使用 RTP 对交互式实时流量启用拥塞控制…

【安全类书籍-3】XSS跨站脚剖析与防御

目录 内容简介 作用 下载地址 内容简介 这本书涵盖以下几点: XSS攻击原理:解释XSS是如何利用Web应用未能有效过滤用户输入的缺陷,将恶意脚本注入到网页中,当其他用户访问时被执行,实现攻击者的目的,例如窃取用户会话凭证、实施钓鱼攻击等。 XSS分类:分为存储型XSS(…

【热门话题】前端框架发展史

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 前端开发的历史演变引言第一章:起源与基础建设 - HTML与CSS时代1.1 …

蓝桥杯刷题(九)

1.三国游戏 代码 #输入数据 nint(input()) Xlilist(map(int,input().split())) Ylilist(map(int,input().split())) Zlilist(map(int,input().split())) #分别计算X-Y-Z/Y-Z-X/Z-X-Y并排序 newXli sorted([Xli[i] - Yli[i] - Zli[i] for i in range(n)],reverseTrue) newYli …

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了,那么一直重新生成食物,直到生成不冲突…

Android 系统的启动过程

Android 系统的启动流程: RomBoot(只读存储器引导程序):这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化,确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要,因为它为整个启动过程奠定…

【JAVA】JAVA方法的学习和创造

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

软考高级:软件工程单元测试(驱动模块、被测模块、桩模块)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

手撕算法-最长公共子序列(二)

最长公共子序列(二) 分析:典型的动态规划,直接看代码了。 代码: import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** longest common sub…

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、Py…