性能出众的一区新算法|星鸦优化算法NOA原理及代码实现(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.mzph.cn/news/747626.shtml

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

相关文章

一直被模仿,从未被超越

德国威步以及卓越的创新能力,成为业内不断被模仿的对象。德国威步自1989年创立35年以来,一直坚定地在软件保护及授权管理领域努力耕耘并不断创新和改进,拥抱互联网及软件开发技术的革新,完美融入并发展,虽然被其他竞争…

Github 2024-03-15 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3非开发语言项目2PHP项目1C#项目1Rust项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476…

通过Rothko罗斯科绘画学习CSS盒子

本文章属于学习笔记,在https://www.freecodecamp.org/chinese/learn/2022/responsive-web-design/中练习 1、使用 padding 简写属性来增加两个元素之间的空间到。 .canvas {} .frame { padding:50px; }2、overflow 设置为 hidden - 将画布更改回其原始尺寸。overfl…

第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用(续)

目录 6 问题三模型建立与求解 6.1 问题描述与分析 6.2 模型建立 6.3 模型求解

Discourse 分类图片

我们可以在 Discourse 上为分类添加图片。 进入分类编辑界面,然后选择 Image 标签。 在 Images 标签下,上传分类需要的图片。 图片大小 图片的大小是 Discourse 进行控制的,高度为 150 PX 像素。 如果上传的图片大于 150 px 的高度像素&…

C++ 虚函数与多态

定义宠物类 Pet ,包含虚函数 speak ,显示 " miao ! miao !"和" wang ! wang !"。 信息" How does a pet speak ?"; 主团数中定义 Pet 、 Cat 和 Dog 的对象,再定义 Pet 指针量 ,分别指向 Pet Cat…

人工智能在未来的优势

人工智能(Artificial Intelligence,AI)是一种模拟人类智能的技术,已经在现代科技中得到广泛应用,并且具有广阔的发展前景12。以下是人工智能在现代科技中的应用和未来发展趋势的介绍: 综上所述,…

零基础入门多媒体音频(2)-音频焦点2

说实话,android的代码是越来越难以阅读。业务函数里面狗皮膏药似的补丁与日俱增。继上篇简要介绍音频焦点的文章,这篇文章的主要内容是分析audiofocus的实现。看了一下午的相关代码都没找到做audiofocus策略的核心逻辑。目前能看懂的大概包含下面两个逻辑…

开源堡垒机Jumpserver安装教程

前言:堡垒机的应用场景 公司内有若干台服务器,既有windows的也有linux的, 提供有ERP,OA,Web,报表等等各种服务,往往需要远程登录到服务器上去做运维,但如果给root或者administrator权限,很容易出现不知道谁操作了的问题.如果不同人设置不同账号,又账号过多,权限不足等等其他问题…

高质量 Git 仓库汇总(持续更新,方便查看)

Leetcode https://github.com/kamyu104/LeetCode-Solutions Cmake https://github.com/viva64/pvs-studio-cmake-examples 3D目标检测 Awesome-3D-Object-Detection Awesome-3D-Object-Detection-for-Autonomous-Driving Cuda Code dbscan https://github.com/l3lackc…

外包就干了2个月,技术退步明显....

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)1. 各种变换的关系2. 变换公式3. 2D变换的层次4. python实现 一、向量和矩阵的基本运算 【计算机视觉】二、图像形成:1、向量和矩阵…

echarts绘制 联系词(关键字)

<template><div><div>【关键词条】</div><div ref"target" class"w-full h-full" stylewidth:300px;height:300px></div></div> </template><script setup> import { ref, onMounted,watch } from …

使用docker-compose部署Redis集群

一、部署三主三从的Redis集群 分别为6个节点建立挂载目录&#xff0c;每个目录下建立数据、配置、日志文件夹。 docker-compose内容如下&#xff1a; version: 3 services:redis1:image: redis:6.2.3restart: alwaysports:- "6379:6379"- "16379:16379"v…

融入Facebook的世界:探索数字化社交的魅力

融入Facebook的世界&#xff0c;是一场数字化社交的奇妙之旅。在这个广袤的虚拟社交空间中&#xff0c;人们可以尽情展现自己、分享生活&#xff0c;与全球朋友、家人和同事保持紧密联系&#xff0c;共同探索社交互动的乐趣与魅力。让我们深入了解这个世界的魅力所在&#xff1…

基于SpringBoot+Vue的电商应用系统的设计与实现

1 绪论 1.1研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&…

Rust 利用 Trait 实现多态性

在Rust中&#xff0c;Trait&#xff08;特性&#xff09;是一种强大的抽象机制&#xff0c;类似于其他编程语言中的接口或类型类。它们允许你定义一组方法&#xff0c;这些方法可以在任何实现该Trait的类型上调用。这使得Rust能够以一种非常灵活的方式支持多态性。 下面是一个…

2.2 HTML5保留的常用标签

2.2.1 基础标签 1. 段落标签<p> 段落标签<p>和</p>用于形成一个新的段落&#xff0c;段落与段落之间默认为空一行进行分割。 2. 标题标签<h1>-<h6> HTML5使用<hn>和</hn>来标记文本中的标题&#xff0c;其中n需要替换为数字&#x…

使用insightface 识别人脸性别和年龄

一、背景 这个库蛮强大的&#xff0c;能识别人脸的性别和年龄吗&#xff0c;可以 二、步骤 1、把下面保存为test.py import argparse import cv2 import sys import numpy as np import insightface from insightface.app import FaceAnalysis from insightface.data import…

腾讯云对象存储的在Java使用步骤介绍

腾讯云对象存储的在Java使用步骤介绍 创建一个腾讯云的账户 这个自己去创建&#xff0c;然后开通对象存储服务&#xff0c;如下 有了账号就要创建一个对象存储的桶&#xff0c;也就是存储对象的一个容器 如果你想只有自己放存放的就设置 私有读写 &#xff0c;如果想用网络直…