性能出众的一区新算法|星鸦优化算法NOA原理及代码实现(Matlab)

news/2024/6/17 15:16:50 标签: 算法, matlab, 开发语言

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进
CEC2005中的测试
在这里插入图片描述

本文KAU将介绍一个2023年发表在1区期刊KBS上的优化算法——星鸦优化算法(Nutcracker Optimization Algorithm,NOA)[1]在这里插入图片描述

算法由Mohamed Abdel-Basset等于2023年提出,Mohamed Abdel-Basset教授同时也是开普勒、光谱、蜘蛛蜂等优化器的提出者。

而本文要介绍的NOA灵感来源于生活在美国西部和加拿大山区中的一种名叫星鸦的鸟类,该优化器模拟了星鸦觅食、存储以及缓存搜索、恢复的行为

算法性能上,在23个标准测试函数、CEC2014、CEC2017、CEC2020及5个工程设计问题上进行评估,对比算法包含:

(1)SMA、GBO、AVOA等近年发表的算法

(2)SSA、WOA、GWO等高引算法

(3)AL-SHADE、L-SHADE等CEC竞赛的获胜算法

NOA是所有方法中排名第一!

在这里插入图片描述

图源文献[1]

因此KAU对这个性能如此出彩的算法也很感兴趣,遂出此文章以学习,本文将介绍该算法的相关原理并给出其MATLAB实现。

00 目录

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

2 代码目录

3 算法性能

4 源码获取

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

在这里插入图片描述

图源文献[1]

NOA同样是基于种群的元启发式算法,模拟了星鸦在夏季和秋季寻找食物并将其存储在合适的场所,冬季和春季寻找储存的地方并取回食物的行为。共四种行为,下面讲解NOA原理:

1.1 初始化

星鸦的位置可视为搜索代理,其遵循随机初始化的方法:

在这里插入图片描述

1.2 觅食与存储策略

1.2.1 觅食阶段——勘探1

此阶段星鸦检查初始位置旁包含种子的球果,若有好种子,则带到储藏区,若没有,则到另一个松树上寻找,对该行为的建模如下:
在这里插入图片描述

其中,Uj和Lj是上下界,γ是Levy飞行产生的随机数,A、B、C是种群中的随机个体,τ1, τ2, r和r1是[0,1]之间的随机数,Xmtj是第j维的平均值,u是一个在正态分布随机数、levy飞行、随机数之间随机生成的数字,如下:

在这里插入图片描述

觅食阶段的第一个状态表明星鸦不改变位置,第二个状态表明将对空间进行随机的全局搜索,第三个状态将探索位置周围的空间。

1.2.2 存储阶段——开发1

星鸦将觅食阶段获得的食物运到储藏区,其数学模型为:

在这里插入图片描述

其中,λ是levy飞行生成的随机数,τ3是(0,1)之间的随机数,I是1到0随机线性递减的因子。

1.2.3 位置更新

根据以下公式进行觅食和存储之间的转换,以维持勘探和开发之间的平衡:

在这里插入图片描述

Eq(1)即选择觅食阶段的更新方式,Eq(2)即选择存储阶段的更新方式,ϕ是一个随机数,Pa1从1到0递减。即两种策略只选用一种执行。

1.3 寻找储藏区与找回策略

冬季来临后,星鸦将进行第二次探索,它从储藏模式转换到搜索模式,星鸦用两个参考点RP作为单个储藏区的标记。这些参考点可以用不同的方程表示:(这个参考点是星鸦用来找回食物的依据,是个很有意思的设计,可以作为一个改进策略的构想)

参考点:

在这里插入图片描述

第一层参考点为:

在这里插入图片描述

其中,theta表示[0,pi]之间的随机数,𝛼为:
在这里插入图片描述

第二层参考点为:
在这里插入图片描述

其中,L和U是上下界,U2(下图中U1应为U2)如下:

在这里插入图片描述

1.3.1 寻找储藏区阶段——勘探2

寻找储藏区阶段的位置更新公式为:
在这里插入图片描述

其中,Eq(13)为:

在这里插入图片描述

Eq(15)为:

在这里插入图片描述

其中C是随机选择一个个体。

新的位置将以贪婪策略选择性保留:

在这里插入图片描述

1.3.2 找回食物阶段——开发2

找回食物时其位置更新方式为:
在这里插入图片描述

Eq(12)

在这里插入图片描述

Eq(14)

在这里插入图片描述

同样,新的位置将以贪婪策略选择性保留:

在这里插入图片描述

1.3.3 位置更新

和上一节一样,第二阶段的搜索同样也是从勘探和开发中进行随机选择,其选择公式如下:

在这里插入图片描述

其中,Eq(16)即为勘探,Eq(17)即为开发。φ为(0,1)之间的随机数,而Pa2是经过实验确定的,原文中等于0.2。

1.4 算法流程

NOA算法共分两个阶段,每个阶段都包含勘探与开发两种策略,并且每个阶段的运行只会择其一种策略进行更新,同时,一次迭代只会选择一个阶段执行(按一定概率选择),保证了算法的快速迭代,其总体流程如下(流程图为KAU结合原文,根据自己的理解所画,若有误欢迎指正):

在这里插入图片描述

02 代码目录

在这里插入图片描述

代码为MATLAB,。考虑到很多同学获取代码后,MATLAB代码部分有乱码(MATLAB版本问题),有几个方法:

①可以将MATLAB版本改为2020及以上;

②将m文件用记事本打开,再将记事本中的代码复制到Matlab即可

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

03 算法性能

采用标准测试函数初步检验其寻优性能,在MATLAB中,进行标准函数的测试,执行程序结果如下:

在这里插入图片描述

04 源码获取

在公众号(KAU的云实验台 )后台回复 NOA 即可

参考文献

[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-.

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

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


http://www.niftyadmin.cn/n/5431547.html

相关文章

Golang常用web框架

Gin、beego 和 GoFrame 都是流行的 Go 语言框架,用于构建 web 应用程序。尽管它们都有相似的目标,但它们在设计哲学、性能、配置方式和社区支持等方面有所不同。以下是这三个框架的一些基本区别: Gin: Gin 是一个高性能的 HTTP w…

Postman报错处理:为开发者提供的详细解答

Postman 是一个流行的 API 测试工具,它可以帮助开发者和测试人员快速地创建和发送各种 HTTP 请求,并查看响应结果。但是,在使用 Postman 的过程中,有时候会遇到一些报错或异常情况,影响了正常的测试流程。本文将介绍一…

宝塔面板的作用

宝塔面板的作用 1. 网站管理 宝塔面板可以帮助用户轻松地管理网站,用户可以通过宝塔面板创建新的网站、添加域名、上传文件等操作,还可以对网站进行备份、恢复、迁移等操作。 2. 数据库管理 宝塔面板还提供了数据库管理功能,用户可以通过宝…

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具,用…

申请软著提交的演示视频有什么要求

申请软件著作权时,演示视频是一个重要的材料,主要用于展示软件的功能和操作流程。演示视频的要求可能会根据不同的申请机构和项目有所不同,但一般来说,以下是几个常见的要求: 内容完整性:演示视频需要展示…

Nginx高级技术: 地址重写 Rewrite和应用场景

一、rewrite 场景示例说明 1、基于客户端指定 IP 访问跳转 应用场景说明:指定的 IP地址能正常访问192.168.179.10访问正常。 Rewrite配置如下: vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.old.com; …

Cannot set priority of namenode process 8095

报错信息 报错: Cannot set priority of namenode process 8095 查看日志文件: 2024-03-10 01:36:50,840 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT] 2024-03-10 01:36:51,061 I…

前端提高性能——使用Intersection Observer API对图片视频进行懒加载

前言 最近做了一个项目是类似于商城的&#xff0c;需要放很多图片&#xff0c;在用户选择一页五十条时&#xff0c;页面加载速度会比较慢。为了提高性能&#xff0c;选择用Intersection Observer API 实现图片懒加载。 实现步骤 一、html代码&#xff1a; <img class&qu…