原创度高!性能好!|基于信息共享与黄金搜索的改进星鸦优化算法在50+个函数上进行测试(Matlab)

本文主要是介绍原创度高!性能好!|基于信息共享与黄金搜索的改进星鸦优化算法在50+个函数上进行测试(Matlab),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进

前面的文章中,KAU介绍了星鸦优化算法(Nutcracker Optimization Algorithm,NOA)[1],NOA算法模拟了星鸦觅食、存储以及缓存搜索、恢复的行为。在性能上,与近年发表的算法/高引算法/CEC竞赛获胜算法相比均排名第一。

在这里插入图片描述

然而由没有免费的午餐(NFL)定理可知,没有元启发式优化算法可以处理所有的优化问题,在某些情况下(可结合应用),NOA算法同样存在全局/局部开发能力不平衡,易陷入局部最优等问题。

因此本文将对其进行改进,并针对改进算法在CEC2017、CEC2020、CEC2022上进行函数测试。
在这里插入图片描述

本文可以为各位的算法改进提供一定思路,同时进一步也提供了相关改进的理论公式PDF与代码。

00 目录

1 星鸦优化算法(NOA)原理

2 基于信息共享与黄金搜索的改进星鸦优化算法原理

3 代码目录

4 算法性能

5 源码获取

01 星鸦优化算法(NOA)原理

在往期的文章中KAU介绍了星鸦优化算法(NOA)的原理及其代码实现。

02 基于信息共享与黄金搜索的改进星鸦优化算法原理

2.1 两阶段种群初始化策略

初始种群的分布位置影响元启发式算法的精度和收敛速度[2]。因此在求解不确定分布问题时,种群的初始位置需要在搜索空间中均匀分布,以确保种群的多样性与遍历性。原NOA算法中,其初始位置通过随机数生成,这样不能保证其遍历性和多样性,种群质量不高,会影响算法的收敛速度。因此,本文对其初始化过程作出改进。

2.1.1 佳点集策略

佳点集是一种有效的均匀选点方法。该理论由华罗庚先生提出[3],在许多群智能优化算法中都得到了应用,由佳点集的定义,设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.1.2 镜面反射学习策略

反向学习(OBL)策略是由TIZHOOSH于2005年提出[4],在当前个体区域内生成相反个体,对比选取适应度高的个体进行后续迭代,可以有效提高种群的质量及多样性,加强算法的搜索能力,由于其出色的性能而被广泛用于改进元启发式算法。

同时,Zhang基于镜面反射原理提出镜面反射学习(SRL)[5],且已经证明,SRL策略生成的解决方案优于OBL,因此,本文将SRL策略引入佳点集生成的初始种群,进一步提升种群的质量。

具体而言,在物理学中,入射光和反射光之间存在明显的对应关系,如图(a)所示。基于这一现象,当前解和反向解可以以图1(b)所示的方式建模。
在这里插入图片描述

设平面存在一点X(a,0),其对点为X’(b,0),且任意的X和X’都属于[Xl,Xu]之间,当光入射时,入射角和反射角分别是和,O是[Xl,Xu]的中点,O=(x0,0)。根据反射定理,有如下关系:
在这里插入图片描述

当时,上述方程可写为:

在这里插入图片描述

其中u是预设的比例因子,当u取不同值时,b可表示为:

在这里插入图片描述

由此可以看出,当u改变时,b可以遍历[Xl,Xu]之间的所有值。设xi是镜面中的一点,则其镜面对点xpi可由下式计算:

在这里插入图片描述

2.2 参数自适应调整

勘探阶段指算法对全局空间的搜索能力,决定了算法能否获得最优解;开发阶段指对局部空间的搜索能力,决定了算法获得最优解的速度。勘探和开发之间的平衡做的越好,算法的性能就越好。然而NOA的局限之一是其在勘探与开发阶段之间的转换并不平衡, NOA在觅食/存储阶段的Pa1控制其勘探/开发的转换, Pa1是线性减小的,而实际情况中,星鸦觅食/存储过程极可能是非线性变化的;同时,寻找储藏区/找回食物阶段中,控制勘探与开发的参数Pa2是固定值0.2,其不能有效刻画星鸦找储藏区和取食物的复杂性,同样阶段二的算法也不能得到有效执行。显然这些参数(Pa1与Pa2)并不能准确贴近实际迭代过程。

同时,NOA的两个阶段之间的转换通过随机数选择,这将导致搜索过程不稳定,优化结果鲁棒性不强。同时,通过对星鸦习性的观察,能够注意到星鸦在其对应的阶段一觅食/存储中会倾向于大范围搜索食物以及存储,这种搜索是随机且宽范围的;而在阶段二寻找储藏区/找回食物时,星鸦则会根据参考点进行固定范围的搜索,这种搜索则没有阶段一的广度与随机性。因此星鸦在两种阶段的搜索策略所表现出的特征存在差异,可能有比单纯采用随机数进行阶段选择更好的方式来表现星鸦在两阶段的特征。

针对以上论述中所提到的问题,本文提出新的自适应参数调整策略,使其更适应于复杂问题的优化求解。

Pa1与Pa2的更新如下:

在这里插入图片描述

由图可知,新策略更侧重于在前期进行充分的全局探索,避免算法面对复杂优化问题时陷入局部最优状态。在后期阶段,它迅速跌至较低概率值,这有助于算法精细搜索以加速收敛。

阶段1与阶段2的转换参数如下:
在这里插入图片描述

由图可知,随着迭代次数的增加,阶段转换呈现周期性,这也与星鸦春秋季寻觅松子等坚果、冬季寻找储藏起来的坚果的动态过程一致,设置该参数以增强算法迭代的稳定性。

2.3 融合黄金搜索算法的勘探阶段

黄金搜索优化算法(Golden Search Optimization,GSO)是一种结合了粒子群优化算法(PSO)和正余弦算法(SCA)的优化方法,黄金搜索算法的步长评估策略是搜索算法的核心,具有运算量小、全局搜索性能好的优点,将黄金搜索算法的更新策略融合到星鸦搜索食物的勘探阶段,以帮助星鸦更高效地搜索食物。

2.4 信息共享

星鸦通常会单独或成对活动,偶成小群。若星鸦单独行动,则搜索效率低,因为同一个地点有可能被不同的星鸦重复搜索或从始至终都没有被探索。若使星鸦成群协作,实现信息互动,则将极大提升食物搜索效率,提升了星鸦群体在冬季的存活率。

因此,本文引入一种信息共享的搜索策略,以实现星鸦之间的信息交互,充分探索领域信息。

在这里插入图片描述

该策略的核心思想是采用不同交流算子的个体之间进行间接或直接信息交换以增加种群的多样性,充分利用各自的领域信息。此外,该共享策略使算法在整个优化搜索过程中展现更丰富的随机行为,避免算法陷入局部最优。

改进后的算法流程如下:

在这里插入图片描述

03 代码目录

在这里插入图片描述

MATLAB编写,在Readme文件中对各文件夹内容作了说明:
在这里插入图片描述

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

04 算法性能

为检验改进算法的优化性能,本文选择CEC2017、2020、2022函数集进行测试,具体函数表达式可以参照下面的文章:

测试结果:

CEC2017

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

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

CEC2020

在这里插入图片描述

CEC2022

在这里插入图片描述

部分表格
在这里插入图片描述

仅运行ISGS-NOA
在这里插入图片描述

05 源码获取

GZH后台回复NOA1
或私信

后面KAU打算更一些应用型文章,如有粉丝提到的资源优化配置/泊位分配优化等,若各位有感兴趣想要实现的应用也可以私信我哦!

参考文献

[1] Abdel-Basset M , Mohamed R , Jameel M ,et al.Nutcracker optimizer: A novel nature-inspired metaheuristic algorithm for global optimization and engineering design problems[J].Knowledge-Based Systems, 2023, 262:110248-.

[2] W. Yang, K. Xia, T. Li, M. Xie, F. Song, A multi-strategy marine predator algorithm and its application in joint regularization semi-supervised ELM, Mathematics 9(3) (2021) 291, https://doi.org/10.3390/math9030291.

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

[4]TIZHOOSH H R. Opposition-based Learning: A New Scheme for Machine Intelligence[C]//IEEE. Proceedings of Computational Intelligence for Modelling, November 28-30, 2005, Vienna, Austria. New York: IEEE, 2005: 695-701.

[5]Y. Zhang, “Backtracking search algorithm with specular reflection learning for global optimization,” Knowledge-Based Systems, vol. 212, Article ID 106546, 2021.

[6]Noroozi M, Mohammadi H, Efatinasab E, et al. Golden Search Optimization Algorithm[J]. IEEE Access, 2022(10): 37515-37532.

[7]SUN J J, WANG L L, YANG C Y, et al. An Ancient BCR-Like Signaling Promotes ICP Production and Hemocyte Phagocytosis inOyster. iScience, 2020. 23 (2). DOI: 10. 1016/ j. isci. 2020.100834.

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

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

这篇关于原创度高!性能好!|基于信息共享与黄金搜索的改进星鸦优化算法在50+个函数上进行测试(Matlab)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951602

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.