星鸦优化算法(NOA):原理、实现与性能评估
星鸦优化算法(NOA):原理、实现与性能评估
星鸦优化算法(NOA)是一种基于种群的元启发式算法,灵感来源于星鸦的觅食、存储以及缓存搜索、恢复行为。该算法由Mohamed Abdel-Basset等于2023年提出,已在多个标准测试函数和工程设计问题上展现出优异的性能。本文将详细介绍NOA的原理、实现方法及其性能评估。
星鸦优化算法(NOA)原理
星鸦优化算法(NOA)是一种基于种群的元启发式算法,灵感来源于星鸦的觅食、存储以及缓存搜索、恢复行为。该算法由Mohamed Abdel-Basset等于2023年提出,已在多个标准测试函数和工程设计问题上展现出优异的性能。
1. 初始化
星鸦的位置可视为搜索代理,其遵循随机初始化的方法:
2. 觅食与存储策略
- 觅食阶段——勘探1
此阶段星鸦检查初始位置旁包含种子的球果,若有好种子,则带到储藏区,若没有,则到另一个松树上寻找,对该行为的建模如下:
其中,Uj和Lj是上下界,γ是Levy飞行产生的随机数,A、B、C是种群中的随机个体,τ1, τ2, r和r1是[0,1]之间的随机数,Xmtj是第j维的平均值,u是一个在正态分布随机数、levy飞行、随机数之间随机生成的数字,如下:
觅食阶段的第一个状态表明星鸦不改变位置,第二个状态表明将对空间进行随机的全局搜索,第三个状态将探索位置周围的空间。
- 存储阶段——开发1
星鸦将觅食阶段获得的食物运到储藏区,其数学模型为:
其中,λ是levy飞行生成的随机数,τ3是(0,1)之间的随机数,I是1到0随机线性递减的因子。
- 位置更新
根据以下公式进行觅食和存储之间的转换,以维持勘探和开发之间的平衡:
Eq(1)即选择觅食阶段的更新方式,Eq(2)即选择存储阶段的更新方式,ϕ是一个随机数,Pa1从1到0递减。即两种策略只选用一种执行。
3. 寻找储藏区与找回策略
冬季来临后,星鸦将进行第二次探索,它从储藏模式转换到搜索模式,星鸦用两个参考点RP作为单个储藏区的标记。这些参考点可以用不同的方程表示:(这个参考点是星鸦用来找回食物的依据,是个很有意思的设计,可以作为一个改进策略的构想)
- 第一层参考点
其中,theta表示[0,pi]之间的随机数,𝛼为:
- 第二层参考点
其中,L和U是上下界,U2(下图中U1应为U2)如下:
- 寻找储藏区阶段——勘探2
寻找储藏区阶段的位置更新公式为:
其中,Eq(13)为:
Eq(15)为:
其中C是随机选择一个个体。
新的位置将以贪婪策略选择性保留:
- 找回食物阶段——开发2
找回食物时其位置更新方式为:
Eq(12)
Eq(14)
同样,新的位置将以贪婪策略选择性保留:
- 位置更新
和上一节一样,第二阶段的搜索同样也是从勘探和开发中进行随机选择,其选择公式如下:
其中,Eq(16)即为勘探,Eq(17)即为开发。φ为(0,1)之间的随机数,而Pa2是经过实验确定的,原文中等于0.2。
4. 算法流程
NOA算法共分两个阶段,每个阶段都包含勘探与开发两种策略,并且每个阶段的运行只会择其一种策略进行更新,同时,一次迭代只会选择一个阶段执行(按一定概率选择),保证了算法的快速迭代,其总体流程如下(流程图为KAU结合原文,根据自己的理解所画,若有误欢迎指正):
代码实现
代码为MATLAB,。考虑到很多同学获取代码后,MATLAB代码部分有乱码(MATLAB版本问题),有几个方法:
- ①可以将MATLAB版本改为2020及以上;
- ②将m文件用记事本打开,再将记事本中的代码复制到Matlab即可
代码都经过作者重新注释,代码更清爽,可读性强。
性能评估
采用标准测试函数初步检验其寻优性能,在MATLAB中,进行标准函数的测试,执行程序结果如下:
参考文献
[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-.