双语!性能优越|融合黏菌和差分变异的量子哈里斯鹰算法SDMQHHO

在这里插入图片描述

前面的文章里卡卡介绍了哈里斯鹰优化算法(Harris Hawks Optimization, HHO).HHO是 Heidari等[1]于2019年提出的一种新型元启发式算法,设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突然袭击的狩猎风格,具有需调参数少、原理简单易实现、局部搜索能力强等优点,在许多工程领域得到广泛的应用。

然而,HHO算法虽然在CEC2005中有较好的性能,但HHO在CEC2017等更复杂的基准函数问题中的能力还缺乏科学证据,这类基准函数不仅包含单模和多模,而且还包括混合和复合函数,对算法在摆脱局部最优的能力以及全局寻优能力都是极大的考验。而由作者前面文章中的分析可知,虽然HHO的开发能力强,但HHO存在全局/局部搜索不平衡,在迭代后期HHO将只进行开发,若面对复杂问题其在迭代后期易陷入局部最优,因此本文作者将对HHO进行改进,并在CEC2017、CEC2020和CEC2022中进行测试(Matlab/Python),以验证其在复杂问题中优越性能。(PS:最近由于学业繁忙以及开发Python代码,更新比平时慢了点,以后对Python熟悉了后更新速度会快上来)

00 文章目录

1 哈里斯鹰优化算法原理

2 融合黏菌算法和差分进化的量子哈里斯鹰优化算法

3 代码目录

4 实验结果

5 源码获取

01 哈里斯鹰优化算法原理

关于哈里斯鹰算法原理及其优缺点分析作者在前面的文章中已经作了介绍

02 融合黏菌算法和差分进化的量子哈里斯鹰优化算法

本文基于哈里斯鹰优化算法的特点及其缺陷进行如下改进。

2.1 基于量子计算和佳点集的种群初始化

阶段1:佳点集

HHO通过随机生成初始种群的方法,容易出现种群分布不均匀,会导致种群多样性减少,种群质量不高,影响算法的收敛速度。

佳点集是一种有效的均匀选点方法。该理论由华罗庚先生提出[2],在许多群智能优化算法中都得到了应用,由佳点集的定义,设GD是D维欧式空间中的单位立方体,若r∈GD,形为:
在这里插入图片描述

其偏差满足:

在这里插入图片描述

则称Pn(k)为佳点集,r为佳点,其中C(r, ε)是是只与r、ε(ε>0)有关的常数。取rk={2cos(2pir/p)},1≤k≤n,p是满足(p-D/2)≥D的最小素数,理论[3]上已证明,用n个佳点构成的加权和比采用任何其他n个点所得到的误差都要小,并尤其适用于高维空间的近似计算。以二维单位搜索空间为例,随机取点与佳点集方法取点的对比如下:
在这里插入图片描述

显然,随机取点并不均匀,并且许多取点位置重合,会造成解的可利用率不高,而佳点集方法能够使得取点更为均匀地分布在搜索空间中,其在全局中的搜索效率将更高。

阶段2:量子计算

量子计算(Quantum Computation,QC)是1982年首先由 Richard Feynman 提出[4],是目前国内外学者比较关注的前沿学科之一,量子计算理论源于量子力学理论,而量子力学理论、混沌理论与相对论同被列为二十世纪最伟大的发现和科学佳作,可见量子计算的前沿性也是非常突出的。

经典计算与量子计算中的两种基本状态区别在于量子比特还可以表示成叠加态,即两个极化状态的线性组合。根据量子计算的这一特点,可以在初始化阶段引入量子计算的概念,基于一组量子比特,获得更多的初始种群。

…(理论略)

则根据两个阶段的初始化策略,在佳点集初始化得到的初始种群基础上,再进行量子计算的变换,以提高和改善初始种群在搜索空间上的分布质量,加强其全局搜索能力。

2.2 非线性猎物逃逸能量

由前面文章中作者的分析可以知道,控制哈里斯鹰算法探索与开发阶段的重要参数——猎物逃逸能量E在迭代后期(t>Tmax/2)恒小于1,这会导致算法后期仅进行开发,若前期没有探索到全局最优附近的点,则算法可能会陷入局部最优无法跳出,因此本文对开发与探索的转换策略进行改进。公式略

本文采取了一种基于随机数的转换策略,且猎物逃逸能量E在前期下降慢,使得算法能够进行广泛的区域探索,同时,迭代后期猎物逃逸能量E虽然较小,但算法仍有进行全局探索的可能,提高了算法跳出局部最优的能力。改进前后算法进行探索与开发策略的对比示意图如下:
在这里插入图片描述

由图可以看到,改进前HHO在迭代前期探索和开发都有一定概率进行,而到了后期则只有开发操作,若面对复杂问题,前期可能并不能探索到全局最优点附近,因此会陷入局部最优。改进后在后期也有一定概率进行全局探索,因此增强了算法跳出局部最优的能力。

2.3 融合准反向学习与黏菌算法的探索阶段

黏菌算法(slime mould algorithm, SMA)[5]是一种具有优秀全局寻优性能的优化算法,SMA会根据适应度值调整不同的搜索模式,同时会分离出一部分有机物向其他领域探索,并且vb的振荡作用也增加了全局探索的可能性。因此,SMA的多重探索机制使该算法具有强大的全局寻优能力。

针对HHO优化算法面对复杂问题易陷入局部最优的问题,本文将黏菌算法的多重搜索机制引入其搜索阶段以增强HHO算法的全局搜索能力。同时考虑到传统SMA中,当rand<z时,黏菌种群由解空间随机生成黏菌个体,模拟黏菌分离部分个体探索其他可能存在的食物源的行为,此方法虽可以避免算法早熟,但并没有充分利用当前解的信息。准反向学习(Quasi-oppositional learning,QOL)[6]是在传统反向学习改进的基础上,用于提升个体当前质量的一种方法。由于原反向学习变换跨度过大,搜索精度不高,且生成的解容易停滞在邻域最优解。为了获得质量有明显提高的解,准反向学习被提出,并在后来被证明其更接近最优解[7]。公式略。

准反向解的图示如下:

在这里插入图片描述

由图可以看出,准反向解能够实现更广泛和更合理的探索范围,具有更大几率接近搜索空间中的最优点或次优点,因此本文将准反向学习替换黏菌算法中r<z时的随机个体策略,该策略不仅有助于避免早熟,更有机会接近食物源。

结合哈里斯鹰算法中探索阶段的更新策略,本文改进的哈里斯鹰算法探索阶段的搜索策略为,公式略

将探索阶段进行以上改进,将提升算法在全局寻优上的搜索性能,提高搜索精度。

2.4 平均差分变异策略

由于种群中的哈里斯鹰在迭代过程中向最优个体聚集,若存在一个局部最优,随着迭代次数的增加,哈里斯鹰聚集在局部最优周围,易导致种群多样性下降。为避免算法陷入局部最优,防止早熟现象,本文引入平均差分变异[8]对种群个体和全局最优进行修正,其根据迭代的不同阶段采取了两种不同策略,具体如下:公式略

该变异策略在前期在个体附近进行搜索,而在后期倾向于在全局最优附近勘探,有助于算法跳出局部最优。

2.5 算法总流程
在这里插入图片描述

其中,红色部分为本文改进部分。

03 代码目录

在这里插入图片描述

代码包含了Matlab和Python,由于作者是首次将原创改进用Python写,所以这次开发周期长了些,并且只找到了CEC2017函数的调用,因此Python代码会比Matlab便宜些~,也期待大家使用的反馈。

MATLAB和Python的代码目录如下,作者在使用了Python后的最大感受就是Python的函数管理可以做的很方便,从两方的代码文件数的对比就可以看出。

MATLAB:Main_SDMQHHO_perf.m和Main_Only_SDMQHHO.m为主程序,关于这两个主程序的使用在Readme.txt中作者做了解释:

在这里插入图片描述

代码注释详细,一键运行Main_ SDMQHHO _perf.m即可得到所有运行结果,运行结果包括佳点集比较图、收敛因子比较图、算法在CEC2017/2020/2022测试函数上的迭代图,最后将生成excel表,包含算法在各函数迭代n次的平均值,均值、运行时间、最优解。

同时,文件也有乱码解决,给出了主要代码的txt文件。部分程序如下(perf_SDM_QHHO.m)

在这里插入图片描述

Python:Main_SDMQHHO_perf.py和Main_Only_SDMQHHO.py为主程序,关于这两个主程序的使用在Readme.txt中作者做了解释:
在这里插入图片描述

代码注释详细,一键运行Main_ SDMQHHO _perf.py即可得到所有运行结果,运行结果包括佳点集比较图、收敛因子比较图、算法在CEC2017测试函数上的迭代图,最后将生成excel表,包含算法在各函数迭代n次的平均值,均值、运行时间、最优解。部分程序如下(perf_SDM_QHHO.py)
在这里插入图片描述

04 实验结果

在本节中,MATLAB使用 CEC2017/2020/2022测试SDMQHHO性能,而Python使用CEC2017测试性能(因为作者只找到了CEC2017的测试函数)。结果如下:

MATLAB(由于结果太多了,作者这里对各测试函数都贴出一部分)

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

CEC2020
在这里插入图片描述

在这里插入图片描述

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

从结果看出,改进后的算法精度与收敛速度都得到了很大提升,同时可以发现HHO在一些函数表现欠佳,也反映出其面对复杂问题存在一定的早熟的问题。

Python(因为Python不能像matlab可以gui调整legend,也可能是我不会…因此3x3的子图中图例会把图盖住,作者这里用的1x2,也展示部分图)

Python部分(仅有 CEC2017)

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

在这里插入图片描述

​​
在这里插入图片描述

在这里插入图片描述

python代码的运行速度比matlab慢很多,可能是我在python里用了很多矩阵运算​

05 源码获取

GZH(KAU的云实验台)后台回复 SDMQHHO (Matlab与Python版本)

含完整改进算法的理论与公式信息的pdf

参考文献

[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] 华罗庚,王元.数论在近似分析中的应用[M].北京:科学出版社. 1978: 83-86.Hua LG,Wang Y.Application of number theory in approximate analysis[M. Beijing: Science Press,1978:83-86.

[3] Kiefer J. On large deviations of the empiric D. F. of vector chance variables and a law of the iterated logarithm[J].Pacific Journal of Mathematics,1961,11(2):649-660.

[4] Feynman,R. P.(1982).Simulating physics with computers. International Journal of Theoretical Physic,21(6),22.https: //doi.org/10.1007/bf02650179

[5] LI Shimin, CHEN Huiling, WANG Mingjing, et al. Slime mould algorithm: a new method for stochastic optimization[J]. Future generation computer systems, 2020, 111:300–323.

[6] BASE M.Quasi-oppositional differential evolution for optimal reactive power dispatch[J].International Journal of Electrical Power and Energy Systems,2015,78: 29-40.

[7] T. Si, P.B.C. Miranda, D. Bhattacharya, Novel enhanced Salp Swarm Algorithms using opposition-based learning schemes for global optimization problems, Expert Syst. Appl. 207 (2022), 117961.

[8] Abdesslem Layeb. Differential Evolution Algorithms with Novel Mutations, Adaptive Parameters and Weibull Flight Operator, 08 September 2022, PREPRINT (Version 1) available at Research Square [https://doi.org/10.21203/rs.3.rs-1898342/v1]

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

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看 (ง•̀_•́)ง(不点也行)

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

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

相关文章

linux 的直接direct io

目录 什么是 Direct IO java 支持 使用场景 数据库 反思 在之前的文章零拷贝基础上&#xff0c;有一个针对那些不需要在操作系统的 page cache 里保存的情况&#xff0c;即绕过 page cache&#xff0c;对于 linux 提供了 direct io 的功能。 https://blog.csdn.net/zlpzl…

面试高频算法专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量&#xff0c;不一定真的是指针。 快慢指针&#xff1a;一起向前走对撞指针、相向指针&#xff1a;从两头向中间走背向指针&#xff1a;从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 给你…

RobotFrameWork自动化测试框架如何搭建环境?

前言 Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性&#xff0c;支持关键字驱动&#xff0c;可以同时测试多种类型的客户端或者接口&#xff0c;可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发&#xff08;ATDD&#xff…

一篇文章掌握系统架构的演变和常见微服务框架

目录 前言 一、系统架构的演变 1、单体应用架构 优点&#xff1a; 缺点&#xff1a; 2、垂直应用架构 优点&#xff1a; 缺点&#xff1a; 3、分布式SOA架构 3.1 什么是SOA 3.2 SOA架构 优点&#xff1a; 缺点&#xff1a; 4、微服务架构 优点&#xff1a; 缺点…

2024年01月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2024年01月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

《Linux系列》Linux磁盘MBR分区扩容

文章目录 Linux磁盘MBR分区扩容1.前言2.控制台磁盘扩容3.分区扩容3.1 fdisk3.2 lsblk3.3 扩容分区 4.扩容文件系统4.1 df4.2 扩容文件系统 Linux磁盘MBR分区扩容 1&#xff09;参考阿里云扩容分区文档&#xff0c;整理MBR分区扩容 2&#xff09;本文档适用于MBR分区(fdisk -lu查…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

CISSP 第1章:实现安全治理的原则和策略

作者&#xff1a;nothinghappend 链接&#xff1a;https://zhuanlan.zhihu.com/p/669881930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 CIA CIA 三性&#xff1a; 机密性&#xff1a;和数据泄露有关。完整性…

freeCodeCamp:编程学习之旅的起点

一、产品介绍 freeCodeCamp是一个提供免费编程课程的学习平台。它包含了数百个编程挑战&#xff0c;覆盖了从基础的HTML、CSS和JavaScript到高级的算法和数据结构等各个方面的知识。freeCodeCamp不仅提供了丰富的学习资源&#xff0c;还帮助我通过实践提高编程技能。 二、应用…

中科2023

1、检材一硬盘的MD5值为多少?(1分) 80518BC0DBF3315F806E9EDF7EE13C12 2、检材一bitlocker的恢复密钥是多少?(5分) 看了一下不解密寸步难行,必须解密。18中科一样的,老题目一样出 感觉这个有点慢,下面看到潘姐的1小时。 然后我自己的 我自己的,1小时18分钟终于是恢…

go语言``反引号用法归纳——多行输出和Tag标签(指定json名称、MySQL名称))

一、多行输出 示例 func main() {str1 : 反引号多行字符串str2 : "双引号" " 多行" " 字符串"//str3 : 单引号" //" 多行" //" 字符串str4 : "双引号\n" " 多行\n" &quo…

C#上位机与欧姆龙PLC的通信08----开发自己的通讯库读写数据

1、介绍 前面已经完成了7项工作&#xff1a; C#上位机与欧姆龙PLC的通信01----项目背景-CSDN博客 C#上位机与欧姆龙PLC的通信02----搭建仿真环境-CSDN博客 C#上位机与欧姆龙PLC的通信03----创建项目工程-CSDN博客 C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区 C#上…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

Spring Boot 3 集成 Jasypt详解

随着信息安全的日益受到重视&#xff0c;加密敏感数据在应用程序中变得越来越重要。Jasypt&#xff08;Java Simplified Encryption&#xff09;作为一个简化Java应用程序中数据加密的工具&#xff0c;为开发者提供了一种便捷而灵活的加密解决方案。本文将深入解析Jasypt的工作…

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意&#xff1a;由于我的GitLab是docker安装的&#xff0c;所以我的操作都是在容器内操作的&#xff0c;大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接&#xff1a;常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…

Docker部署系列之Docker Compose安装Redis三主三从集群

总结/朱季谦 在日常开发或者编程当中&#xff0c;经常需要用到redis集群&#xff0c;若是按照传统的方式&#xff0c;一个机器一个机器搭建&#xff0c;难免过于繁琐&#xff0c;故而可以通过dock er-compose编排方式&#xff0c;快速搭建。我在搭建过程当中&#xff0c;将操作…

今天用vite新建的vue3的项目 启动遇到报错

UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token ??at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18) (Use node --trace-warnings ... to show where the warning was created) (node:30304) UnhandledPromiseRejectionWarning: U…

普中STM32-PZ6806L开发板(HAL库函数实现-USART2 中断接收)

简介 实现USART2 的 中断接收&#xff0c; 发送数据。电路原理图 USART2接线 原理图USART2 在主芯片引脚 实物图 其他知识 APIs stm32f1xx_hal_uart.h /* 堵塞发送, pData是发送数据, Size发送数据大小, Timeout是超时时间 */ HAL_StatusTypeDef HAL_UART_Transmit(UAR…

安卓在SOA中的运用

安卓在运用SOA研发的过程中&#xff0c;会针对实际情况对研发的架构和流程进行优化&#xff0c;通过优化过的架构和实施方案&#xff0c;不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性&#xff0c;同时也增加了系统的向上兼容性。 目前基于车载SOA系统的研发…

如何在Mendix中实现全文检索

功能背景 在日常的应用使用过程中&#xff0c;存在大量希望使用全文检索技术的场景&#xff0c;对资料库中的内容进行查询。Mendix默认的结构化查询方式&#xff0c;适合对特定业务实体进行类似数据库单表的基于SQL语句的查询。那如何在Mendix实现全文检索的功能呢&#…