超详细 | 哈里斯鹰优化算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F9

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

在这里插入图片描述

在Python中执行程序结果如下:

在这里插入图片描述

哈里斯鹰优化算法(Harris Hawks Optimization , HHO)是 Heidari等[1]于2019年提出的一种新型元启发式算法,设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突然袭击的狩猎风格,算法的寻优过程包括探索、探索与开发转换和开发三个阶段。具有需调参数少、原理简单易实现、局部搜索能力强等优点。在数值和工程优化、图像识别、故障诊断、电网优化设计、等工程领域得到广泛的应用。

本文作者将详细介绍其原理、代码实现,并分析可以进行改进的方向。

00 目录

1 哈里斯鹰优化算法(HHO)原理

2 代码目录

3 算法性能

4 算法的改进与利用

5 源码获取

01 哈里斯鹰优化算法(HHO)原理

HHO算法通过模仿哈里斯鹰在捕食猎物过程中的合作行为以及突然袭击的狩猎风格。HHO算法共有三个阶段,全局探索阶段、全局探索向局部开发转换阶段和局部开发阶段。在HHO 算法中,哈里斯鹰的位置被当作为候选解,迭代的最佳候选解为猎物。

1.1 探索阶段

探索阶段,哈里斯鹰种群个体随机栖息在各地,根据其敏锐的眼睛在沙漠空间中跟踪和探测猎物,通过两种策略对猎物进行等概率的全局搜索,P<0.5时,每只鹰会根据其他成员和猎物位置进行移动,P>=0.5时,哈里斯鹰会随机栖息在种群范围内的某棵树上,其表达式如下:

在这里插入图片描述

其中, Urand为第t代种群中随机选择的哈里斯鹰个体;Uprey表示猎物位置;Um表示当前哈里斯鹰种群的平均位置;ub, lb分别为搜索范围上限和下限;rand1234和P均为(0,1)区间内的随机数。

1.2 探索与开发转换阶段

HHO算法根据哈里斯鹰捕猎习性将其捕猎过程划分为探索行为和开发行为,猎物在逃跑过程中能量会逐渐降低,因此采用猎物逃逸能量动态选取探索行为或开发行为进行捕猎,猎物逃逸能量定义为:

在这里插入图片描述

其中,E0为猎物的初始逃逸能量,是在(-1,1)之间的随机数,t为当前进化代数,M为种群最大进化代数。当|E|>=1时进入探索阶段,|E|<1时进入开发阶段。

1.3 开发阶段

在找到目标猎物后,哈里斯鹰在开发阶段发起攻击,其会在猎物周围形成一圈围攻,等待突然袭击的机会。然而,实际的捕食过程是复杂的,例如,被围困的猎物可能会逃脱包围圈,哈里斯鹰可以根据猎物的行为作出必要的调整。因此,HHO采用四种策略来模仿哈里斯鹰的狩猎行为,这四种策略分别是软包围、硬包围、渐进式快速俯冲的软包围和渐进式快速俯冲的硬包围。

定义Sp为猎物逃逸概率,其为(0,1)之间的随机数,Sp<0.5表示有逃脱机会,结合猎物逃逸能量|E|和猎物逃逸概率Sp确定狩猎策略。

a. 当0.5 ≤ |E| < 1且Sp ≥ 0.5时-软包围

猎物仍然有逃逸的能量,试图通过随机的跳跃逃出包围圈,此时,鹰使用软包围捕食猎物以使其精疲力尽,从而使鹰可以突击突袭,其更新公式为:

在这里插入图片描述
在这里插入图片描述

其中,ΔU为猎物位置和当前个体位置之差,J~U(0,2)。

b. 当|E| < 0.5且Sp ≥ 0.5时-硬包围

猎物没有逃逸的能量,也没有逃脱的机会,哈里斯鹰使用硬包围捕食猎物以进行最后突击突袭,其更新公式为:
在这里插入图片描述

c. 当0.5 ≤ |E| < 1且Sp < 0.5时-渐进式快速俯冲软包围

猎物有机会从包围圈中逃脱,且有足够能量逃脱鹰的捕捉,但是哈里斯鹰会围绕猎物采用渐进式快速俯冲软包围,并根据猎物的欺骗性行为逐渐纠正其位置和方向,从而选择最佳位置来捕捉猎物,通过以下两个策略实施。当第一个策略无效时,执行第二个策略,其更新公式为:
在这里插入图片描述

其中,F(.)是适应度函数;S是元素为(0,1)之间d维随机向量;Levy为莱维飞行策略,其公式为:
在这里插入图片描述

d. 当|E| < 0.5且Sp < 0.5时-渐进式快速俯冲硬包围

猎物筋疲力尽,但仍有机会逃脱,哈里斯鹰通过渐进式快速俯冲硬包围猎物,此策略鹰的更新位置公式与渐进式快速俯冲的软包围中的公式相似。在这种情况下,哈里斯鹰群试图缩短它们与目标猎物的平均位置的距离,其更新公式为:

在这里插入图片描述

算法流程如下:

在这里插入图片描述

02 代码目录

在这里插入图片描述

代码包含MATLAB和Python,考虑到很多同学获取代码后,MATLAB代码部分有乱码(MATLAB版本问题),可以将MATLAB版本改为2020及以上,或使用乱码解决文件夹中的txt文件即可。

代码都经过作者重新注释编写,代码更清爽,可读性强。

部分代码:

MATLAB:

在这里插入图片描述

在这里插入图片描述

Python:

在这里插入图片描述

在这里插入图片描述

03 算法性能

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

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

在这里插入图片描述

Python中执行程序结果如下:
在这里插入图片描述

MATLAB和Python都进行了F9函数的测试,测试效果都不错,其收敛速度和精度很好。

04 算法的改进与利用

根据没有免费的午餐(NFL)定理[2],没有一个算法可以处理所有的优化问题,即每个算法都有其优势和局限性,这也激励着学者提出各种改进的算法来解决不同类型的优化问题,同时也为算法间的混合利用提供了参考。这一节作者就简要谈一下HHO的可改进之处及其可利用的优点。

4.1 改进

HHO算法通过4种策略进行局部开发,在开发阶段具有良好的表现,但其探索阶段对于更复杂的优化问题效率并不高,可能会过早收敛,因此可以对其探索阶段的更新方式进行改进,避免在探索阶段种群陷入局部最优。

其次,HHO依赖于一个线性递减方法来改变逃逸能量因子,这会导致勘探和开发不平衡,且无法准确表征实际情况下鹰与猎物多轮围捕逃逸过程,因为在迭代后期|E|必然小于1,只进行局部搜索,因此其搜索并不呈现全局性,若在前期种群接近局部最优,则可能导致后期算法陷入局部最优而无法跳出。可以通过一种非线性递减的方法来动态调整算法参数E。

4.2 利用

由HHO的理论可知,其在开发阶段采用了4种策略来围捕猎物,这样的策略能够使算法具有良好的局部搜索性能,可以作为其他算法提高局部搜索能力的方法之一。

05 源码获取

在GZH (KAU的云实验台) 后台回复 HHO

参考文献

[1] Heidari A A, Mirjalili S, Faris H, et al. Harris Hawks Optimization Algorithm and Applications[J]. Future Generation Computer Systems,2019,97(8):849-872.

[2] Wolpert DH, Macready WG. No free lunch theorems for optimization. IEEE transactions on evolutionary computation 67–82, 1997.

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

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

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

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

相关文章

flume系列之:监控flume agent channel的填充百分比

flume系列之:监控flume agent channel的填充百分比 一、监控效果二、获取flume agent三、飞书告警四、获取每个flume agent channel的填充百分比一、监控效果 二、获取flume agent def getKafkaFlumeAgent():# 腾讯云10.130.112.60zk = KazooClient(hosts

Day60力扣打卡

打卡记录 1682分了记录下&#xff0c;希望下回能突破1700捏。作为一个菜鸟&#xff0c;知道自己很菜&#xff0c;一步步走到现在还是很开心的&#xff0c;从以前的周赛稳定1题到稳定2题&#xff0c;到现在的时有时无的3题。每次刷题都期盼有所长进&#xff0c;虽然更多的时候收…

【C语言】字符串函数及其模拟实现

这是最好的时代&#xff0c;这是最坏的时代&#xff0c;我们一无所有&#xff0c;我们巍然矗立 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 系列文章目录…

OpenSSL的源码在哪里下载?

官方网站去下载&#xff0c;网址&#xff1a; https://www.openssl.org/source/ 比较老的版本的下载页面地址&#xff1a; https://www.openssl.org/source/old/ 由于某面板的OpenSSL模块的安装配置语句如下&#xff1a; --with-openssl/root/rpmbuild/BUILD/openssl-1.0.2u所…

2-2基础算法-Nim和/前缀和/差分

文章目录 一.Nim和二.前缀和&区间和三.差分 一.Nim和 Nim游戏是一个数学策略游戏&#xff0c;通常涉及两名玩家轮流从几堆物品&#xff08;如石子或饼干&#xff09;中取走一定数量的物品。每个玩家每次可以从任意一堆中取走任意数量的物品&#xff0c;但必须至少取走一个…

使用qt实现四则运算计算机项目

这是我们要包含的头文件 #include <QWidget> #include<QStack> #include<string.h> #include<string> 这是我在ui界面创建的计算机基础框架。 接下来要实现按住每个按钮在白框内显示&#xff1b; 因此我们要定义一个QString 类型的变量 QString e…

Linux系统上64位ATT汇编语言多个源文件计算两个数的平方

运行程序的环境 sudo lsb_release -a看到操作系统是Ubuntu 22.04 LTS。 sudo uname -r看到内核版本是5.15.0-86-generic。 sudo as --version看到as的版本是2.38。 sudo ld --version看到ld的版本是2.38。 sudo gcc --version看到gcc版本是11.2.0。 sudo gdb --version看到gdb…

Yum仓库架构解析与搭建实践

1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1&#xff09;挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2&#xff09;查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3&#xf…

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…

学生选课系统基础版

目录 一.Java 中的集合框架&#xff08;上&#xff09; 1.Java中的集合框架概述 2.Collection接口&接口简介 3.学生选课——创建学生类和课程类 4.学生选课——添加课程Ⅰ 5.学生选课——添加课程Ⅱ 6.学生选课——课程查询 7.学生选课——课程修改 8.学生选课——课程删…

EduSoho教培系统 任意文件读取漏洞复现(CNVD-2023-03903)

0x01 产品简介 EduSoho教培系统是由杭州阔知网络科技有限公司研发的开源网校系统 0x02 漏洞概述 该教培系统classroom-course-statistics接口存在未授权任意文件读取漏洞,通过该漏洞攻击者可以读取到config/parameters.yml文件的内容,拿到该文件中保存的secret值以及数据库…

ShenYu网关Http服务探活解析

文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时&#xff0c;将服务从可用列表中移除。 网关端服务探活 以divide插件为例&#xff0c;看下divide插件是如何获…

Java监听器与观察者模式

Java监听器与观察者模式 Java中的监听器&#xff08;Listener&#xff09;和观察者模式&#xff08;Observer Pattern&#xff09;都是用于处理对象间的事件通知和响应的设计模式。它们的目的是在对象之间建立一种松散的耦合&#xff0c;使得一个对象的状态变化可以通知到其他…

vue中element-ui日期选择组件el-date-picker 清空所选时间,会将model绑定的值设置为null 问题 及 限制起止日期范围

一、问题 在Vue中使用Element UI的日期选择组件 <el-date-picker>&#xff0c;当你清空所选时间时&#xff0c;组件会将绑定的 v-model 值设置为 null。这是日期选择器的预设行为&#xff0c;它将清空所选日期后将其视为 null。但有时后端不允许日期传空。 因此&#xff…

Kubernetes 容器编排(1)

前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS、Azure、Google、阿里云…

使用 PyTorch FSDP 微调 Llama 2 70B

引言 通过本文&#xff0c;你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中&#xff0c;我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data P…

深入学习 C++编程,数据结构与算法关系

数据结构是计算机科学中非常重要的概念之一。它是一种组织和存储数据的方式&#xff0c;能够有效地操作和管理数据&#xff0c;以便提高算法的效率。 以下是一些为什么要有数据结构的原因&#xff1a; (1) 数据组织&#xff1a;数据结构可以帮助我们组织和管理大量的数据。通过…

【elementui笔记:el-table表格的输入校验】

之前做得比较多的校验是在el-form表单里做的&#xff0c;但有时也遇到&#xff0c;需要在table内输入数据&#xff0c;然后校验输入的数据是否符合要求的情况。因此记录一下。 思路&#xff1a; 1.需要借助el-form的校验&#xff0c;el-table外层嵌套一层el-form&#xff0c;使…

世界5G大会

会议名称:世界 5G 大会 时间:2023 年 12 月 5 日-12 月 8 日 地点:河南郑州 一、会议简介 世界 5G 大会,是由国务院批准,国家发展改革委、科技部、工 信部与地方政府共同主办,未来移动通信论坛联合属地主管厅局联合 承办,邀请全球友好伙伴共同打造的全球首个 5G 领域…

CleanMyMac X2024值不值得下载?

macOS已经成为最受欢迎的桌面操作系统之一&#xff0c;它提供了直观、简洁的用户界面&#xff0c;使用户可以轻松使用和管理系统。macOS拥有丰富的应用程序生态系统&#xff1b;还可以与其他苹果产品和服务紧密协作&#xff0c;如iPhone、iPad&#xff0c;用户可以通过iCloud同…