超详细 | 哈里斯鹰优化算法原理、实现及其改进与利用(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.

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

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

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

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

相关文章

基础算法(3):排序(3)插入排序

1.插入排序实现 插入排序的工作原理是&#xff1a;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已经排序的序列从后向前扫描&#xff0c;找到位置并插入&#xff0c;类似于平时打扑克牌时&#xff0c;将牌从大到小排列&#xff0c;每次摸到一张牌就插入到正确的位…

香港威雅报告:香港威雅学校入选英国《优秀学校指南》

今天&#xff0c;我们很荣幸地和大家分享一个特别的消息——香港威雅已接受了英国领先的学校审查机构——《优秀学校指南》&#xff08;The Good Schools Guide&#xff09;的全面评审。这是一家值得信赖的权威评审机构&#xff0c;相关工作人员来访并审查了我们的学校&#xf…

【Monitor, Maintenance Operation, Script code/prgramme】

Summary of M,M&O,Program JD) Monitor & M&O Symbio信必优) Job chance/opportunities on Dec 12th, 20231.1) Content 招聘JD job description:1.2) suggestions from Ms Liang/Winnie on Wechat app1.3) Java微服务是什么&#xff1f;1.3.1) [URL Java 微服务](…

网络互通--三层交换机配置

目录 一、三层交换机的原理 1、概念 2、PC A与不同网段的PC B第一次数据转发过程 3、一次路由&#xff0c;多次转发的概念 4、 三层交换机和路由器的比较 二、利用实验理解交换机 1、建立以下拓扑图​编辑 2、分别配置主机的IP地址&#xff0c;子网掩码、网关等信息 3、…

2DPASS激光雷达点云语义分割简介

导读 香港中文大学深圳深度比特实验室提出了一种基于二维图像先验辅助的激光雷达点云语义分割 (2DPASS)。不同于先前的多模态方法&#xff08;训练和推理阶段均需要成对的图像和点云数据作为输入&#xff09;&#xff0c;该方法仅在训练阶段利用额外的图像数据&#xff0c;从相…

如何关闭微信视频号的详细步骤

随着移动互联网的发展&#xff0c;越来越多的人开始使用各种社交平台来分享自己的生活和工作。而微信作为一款全民级别的应用&#xff0c;自然也不例外。在微信中&#xff0c;除了传统的聊天、朋友圈等功能外&#xff0c;还推出了一个名为“视频号”的功能&#xff0c;可以让用…

54 代码审计-TP5框架审计写法分析及代码追踪

目录 知识点1知识点2演示案例:demo代码段自写和规则写分析hsycms-TP框架-不安全写法-未过滤weipan21-TP框架-规则写法-内置过滤 知识点1 调试&#xff0c;访问&#xff0c;路由&#xff0c;配置&#xff0c;版本等 知识点2 自写写法&#xff1a;自己写代码&#xff0c;一步步…

新闻管理系统

其他项目&#xff0c;点击作者主页 目录 1 系统简介 2 系统相关技术 2.1 Java开发语言 2.1.1 Spring框架 2.1.2 Spring MVC框架 2.1.3 Mybatis框架 2.2 MySQL数据库 3 需求分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 业务流…

C语言-实验题目:运动会成绩模拟统计

实验题目&#xff1a;运动会成绩模拟统计 为推动学校体育工作的开展&#xff0c;计算机科学技术学院将在近期举办院运会。本届运动会只设学生组&#xff0c;比赛项目为田径、游泳、篮球、排球、足球、武术、健美操、兵乓球8项。 名次奖励 田径、游泳、健美操、武术 1&#…

【SpringBoot】Starter的使用与案例讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《SpringBoot》。&#x1f3af;&#x1f3af; &…

快速入门Tailwind CSS:从零开始构建现代化界面

快速入门Tailwind CSS&#xff1a;从零开始构建现代化界面 介绍 Tailwind CSS 是一个以原子类的方式快速构建界面的 CSS 框架。它提供了丰富的预定义类&#xff0c;使得开发者能够快速构建样式和布局。 安装和设置 首先&#xff0c;我们需要在项目中安装 Tailwind CSS。可以…

【超详细前后端项目搭建】前端vue3+ts项目(引入ElementPlus、Axios)、后端springboot搭建(创建接口操作mysql数据库)实现前后端联调

目录 前言一、前端项目1、使用vue脚手架创建项目1.1检查vue版本1.2 使用vue脚手架创建项目 2、删除项目多余文件&#xff0c;修改配置项目2.1、删除以下文件2.1、在views下创建index文件2.2、修改router/index.ts路由文件&#xff1a;2.3、修改App.vue文件&#xff1a;2.4、初始…

ElementPlus中的分页逻辑与实现

ElementPlus中的分页逻辑与实现 分页是web开发中必不可少的组件&#xff0c;element团队提供了简洁美观的分页组件&#xff0c;配合table数据可以实现即插即用的分页效果。分页的实现可以分成两种&#xff0c;一是前端分页&#xff0c;二是后端分页。这两种分页分别适用于不同…

C语言:指针与数组易错辨析

前言&#xff1a; 在学校学习指针和数组的联系时&#xff0c;对指针与数组的结合产生了很大的疑惑&#xff0c;后来不断查找资料&#xff0c;本人对指针与数组的综合有了一定的理解&#xff0c;现进行综合讨论辨析 数组指针&#xff1a; 数组指针&#xff0c;即为指向数组类…

【Pytorch】Transposed Convolution

文章目录 1 卷积2 反/逆卷积3 MaxUnpool / ConvTranspose4 encoder-decoder5 可视化 学习参考来自&#xff1a; 详解逆卷积操作–Up-sampling with Transposed Convolution PyTorch使用记录 https://github.com/naokishibuya/deep-learning/blob/master/python/transposed_co…

【改进YOLOv8】车辆测距预警系统:融合空间和通道重建卷积SCConv改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着交通工具的普及和道路交通的不断增加&#xff0c;车辆安全问题日益凸显。特别是在高速公路等高速道路上&#xff0c;车辆之间的距离和速度差异较…

java-两个列表进行比较,判断那些是需要新增的、删除的、和更新的

文章目录 前言两个列表进行比较&#xff0c;判断那些是需要新增的、删除的、和更新的 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

计算机网络编程 | 并发服务器代码实现(多进程/多线程)

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

深入了解空号检测API:提升通信效率的关键

引言 随着通信技术的不断发展&#xff0c;人们对于通信效率的要求也越来越高。在通信过程中&#xff0c;空号检测是一个非常重要的环节&#xff0c;它可以帮助我们避免无效的通信&#xff0c;提高通信效率。而空号检测API则是实现空号检测功能的重要工具。 空号检测API 空号…

Seata Server与Nacos Server搭建(商城7)

一、Nacos简介 &#xff08;一&#xff09;Nacos是什么 1、Nacos是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;相较之下&#xff0c;它更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 2、Nacos 帮助您发现、配置和管理微服务。Nacos…