SCI一区顶刊优化算法改进:基于强化学习的神经网络算法RLNNA,你绝对没见过,非常新颖!

        声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~  

目录

神经网络优化算法NNA:

基于强化学习的神经网络优化算法RLNNA:

改进点1:基于强化学习的修正因子

改进点2:基于历史种群的迁移算子

改进点3:设计的反馈算子

改进算法框架图与伪代码:

效果展示

参考文献

部分代码展示与程序目录

完整代码获取


        应小伙伴要求,今天为大家带来一期在2023年SCI一区顶刊上的算法改进:基于强化学习的神经网络优化算法代码与原理讲解,非常新颖!相信大家也从来没见过,效果不错!

        注意!这里的神经网络并不是传统意义上的神经网络,而是一种优化算法,大家可以类比为动物园优化算法,只是这位作者借用了神经网络的思想取名为神经网络优化算法(NNA),其本质上还是随机搜索的群智能优化算法,有点唬人!

神经网络优化算法NNA:

        首先介绍一下原始的神经网络优化算法NNA!

        神经网络算法灵感来自于生物神经系统的结构。一般来说,人工神经网络用于预测目的,它试图通过频繁改变权值来减小预测解与目标解之间的差距。然而,解决优化问题就是从给定的搜索空间中找到目标解。为了使人工神经网络适合作为一种优化技术,NNA的作者首先将当前最优解作为目标解。然后,通过调整每个神经细胞的权重值来获得更好的解。

        NNA的结构由以下四个阶段组成:

        (1)生成种群:

        (2)更新权重矩阵:

        (3)产生偏置:分别使用偏置算子和转移算子来进行勘探和开发。采用修正因子βt来分配勘探开发时间。

        (4)转移算子:围绕当前搜索空间找到更好的解决方案。

        此处就不再讲解原始神经网络算法的细节,具体内容大家可以查看原始文献!参考文献放在下面了!

        Ali Sadollah, Hassan Sayyaadi, Anupam Yadav (2018).A dynamic metaheuristic optimization model inspired by biological nervous systems: Neural network algorithm, Applied Soft Computing, 71, pp. 747-782.

基于强化学习的神经网络优化算法RLNNA:

        强化学习是机器学习的一个非常重要的分支,并与元启发式相结合在许多领域得到了应用。RL系统通常由五个部分组成:一个环境,一个学习代理,一组离散的环境状态,一组离散的代理行为和一个奖励分配机制。RL可以描述如下。首先,agent在时间t接收到状态和奖励,然后基于收到的奖励和状态,agent将采取行动。最后,随着行动的执行,环境将发生变化,这将在时间t + 1产生新的奖励和状态。根据RL的工作原理,RL的主要优点可归纳为以下几点:

        1)强化学习只需要很少的环境信息,适合于复杂的任务。

        2)强化学习的学习过程是在线的,可以直接与环境进行交互。

        3) RL通过简单的奖励函数来评价得到的解的质量,而不是复杂的数学运算,可以提高计算效率。

        废话不多说,直接来看一下是如何改进的!

改进点1:基于强化学习的修正因子

        针对NNA中修正因子生成方法的不足,提出了一种基于RL的修正因子调整方法。该方法的基本思想可以表述为:如果一个个体能够在一个循环中找到更好的解,那么它就具有一些寻找全局最优解的有益信息,可以称为优秀个体。也就是说,为了不错过更好的解,优秀个体在自身周围执行搜索算子(即局部开发)是一个不错的选择。根据这一思想,RL的设计规则是基于得到的一个回路中每个个体的两个适应度值,定义为:

        其中βti是第I个个体在时间t时的修正因子,τ是惩罚因子,h(x)和s(x)是两个差分函数,g(x)是控制函数。h(x)、s(x)、g(x)可以表示为(以最小问题为例):

        其中,ft1为第I个个体在时刻t的适应度值,f(t+1)i,1为第i个个体在时刻t+1的适应度值。f(t+1)i,2是第i个个体在t+1时刻通过第二次函数评估得到的适应度值。根据公式(30),有两种候选动作,即保持动作和激活动作。对于一个个体,如果触发“keep action”,则该个体使用与上次迭代相同的修改因子来完成下一个搜索;如果触发了“activate action”,则该个体使用一个新的修改因子来执行下一个搜索。由(28)-(30)可知,当一个个体是RLNNA中的优秀个体时,会触发“激活动作”,其在下一次迭代中的修改因子会更小,这意味着它在下一次迭代中有更多的机会执行转移算子(即利用)。所设计的修正因子更新方法如下图所示。

改进点2:基于历史种群的迁移算子

        如前所述,NNA的迁移算子仅以当前最优解为指导,这是增加NNA陷入局部极小的可能性的潜在风险。为了在一定程度上避免这种风险,我们引入历史种群信息来传递算子。在RLNNA中,传递算子包括一个当前传递项和一个历史传递项,可以表示为:

        式中,κ1和κ2为两个标准正态分布的随机数,xt(old),i为历史种群xt old在时间t的第i个个体。Xt(old)由下式更新:

        式中λ5为0 ~ 1之间均匀分布的随机数。那么,xt(old)的最终形式为:

        其中φ(·)是一个排列函数,这意味着Xt old中的向量是随机排序的。

        最后,基于贪婪策略完成更新:

        与NNA的转移算子相比,RLNNA中的转移算子的优势可以概括为:

        一方面,在迁移算子中引入历史种群,如(31)所示,迁移算子在搜索过程中起两个作用。首先,它可以增加种群多样性,从而在一定程度上降低过早收敛的风险。其次,在式(31)中,xt Best - xt,i和xt Best - xt old,i可以看作是两个微分向量。根据(32)和式(33)所示的Xt old的生成机制,更有可能的情况是|Xt Best - Xt old,i|大于|Xt Best - Xt,i|,这意味着所设计的传递算子比NNA具有更大的搜索空间

        另一方面,原始随机数是0 ~ 1之间的均匀分布,而改进的随机数κ1和κ2 in(31)服从标准正态分布。显然,标准正态分布产生的随机数比均匀分布产生的随机数具有更大的波动性。因此,(31)中的随机数κ1和κ2非常有助于RLNNA增加其搜索空间,增强其逃避局部最优的能力。

改进点3:设计的反馈算子

        为了克服NNA收敛缓慢的缺点,我们设计了一个反馈算子,它是由偏置算子或传递算子对得到的试验种群Vt的进一步优化,可以表示为:

        与迁移算子一样,在完成反馈算子步骤之后,执行贪婪选择策略,即:

        公式(35)中,κ3、κ4为两个标准正态分布的随机数,m为1 ~ N之间的随机整数,f ~ m为第m个个体的适应度值。另外,m不等于i。由(35)可知,所设计的反馈算子具有以下两个优点:

        一方面,它不仅考虑了当前反馈,还考虑了局部反馈。在当前反馈项中,vti从随机选择的vtm中学习,历史反馈项以历史种群为指导。需要注意的是,由于f (xt old,i)和f (vt i)之间存在不确定性关系,历史反馈项也可以称为随机扰动项。因此,所设计的反馈算子具有较强的随机性,有利于增加种群多样性。

        另一方面,κ3和κ4也服从标准正态分布,其作用与κ1和κ2公式(31)相同。

改进算法框架图与伪代码:

        为了使大家更好地理解,这边给出算法框架和伪代码,非常清晰!

        如果实在看不懂,不用担心,可以看下代码,再结合上文公式理解就一目了然了!

效果展示

        为了方便大家比较,这里采用经典的23个标准测试函数,也就是CEC2005与原始神经网络优化算法NNA进行对比!其他的大家可以回去慢慢试!效果都很好!

        以上截的11个测试函数的图,可以看到,RLNNA在大部分函数上均远远超过原始的神经网络算法NNA,仅有一两个算法不如原算法,存在很明显的差距,大家应用到回归、分类、时序预测模型(如RLNNA-SVM)或应用到信号分解故障诊断领域都是一个不错的选择!

        以上所有图片,均可一键运行main文件即可出图!!(其中测试函数图像仅需手动切换函数)

        适用平台:Matlab(暂无版本限制)

参考文献

        [1]Zhang Y. Neural network algorithm with reinforcement learning for parameters extraction of photovoltaic models[J]. IEEE Transactions on Neural Networks and Learning Systems, 2021, 34(6): 2806-2816.

部分代码展示与程序目录

clear
clc
closeSearchAgents=30;     % 种群数量
Function_name='F7';  % 函数名称
Max_iterations=1000; % 最大迭代次数[lb,ub,dim,fobj]=Get_Functions_details(Function_name);[Best_RLNNAs,Best_score,~,NNA_curve]=NNA(SearchAgents,Max_iterations,lb,ub,dim,fobj);        % 调用NNA算法
[Alpha_RLNNAs,Alpha_score,RLNNA_curve]=RLNNA(SearchAgents,Max_iterations,lb,ub,dim,fobj); % 调用RLNNA算法figure('Position',[290   206   648   287])
%Draw the search space
subplot(1,2,1);
func_plot(Function_name);
title('Test function')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
grid off

完整代码获取

         如果需要免费获得图中的完整测试代码,只需点击下方小卡片,后台回复关键字:

RLNNA

        也可点击小卡片,后台回复个人需求(比如RLNNA-SVM)定制此改进算法RLNNA优化模型(看到秒回):

        1.回归/时序/分类预测类:SVM、RVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN等等均可~

        2.组合预测类:CNN/TCN/BiTCN/DBN/Adaboost结合SVM/RVM/ELM/LSTM/BiLSTM/GRU/BiGRU/Attention机制类等均可(可任意搭配非常新颖)~

        3.分解类:EMD、EEMD、VMD、REMD、FEEMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可~

        4.其他:机器人路径规划、无人机三维路径规划、DBSCAN聚类、VRPTW路径优化、微电网优化、无线传感器覆盖优化、故障诊断等等均可~

        5.原创改进优化算法(适合需要创新的同学):2024年的新算法CPO等或麻雀SSA、蜣螂DBO等任意优化算法均可,保证测试函数效果!

        更多代码链接:更多代码链接

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

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

相关文章

利用Python进行数据可视化Plotly与Dash的应用【第157篇—数据可视化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行数据可视化Plotly与Dash的应用 数据可视化是数据分析中至关重要的一环&…

SpringBoot集成 itextpdf 根据模板动态生成PDF

目录 需求说明前期准备Spring Boot 集成添加依赖构建工具类构建MultipartFile编辑PDF模板Java代码设置对应form的key-value 需求说明 根据合同模板,将动态的合同标签,合同方以及合同签约时间等动态的生成PDF,供用户下载打印。 前期准备 安…

Linux学习_进程

1.进程 概念:程序的一个执行实例,正在执行的程序等,担当分配系统资源(CPU时间,内存)的实体,进程PCB自己的代码和数据 PCB:进程信息被放在一个叫做进程控制块的数据结构中&#xff…

左手医生:医疗 AI 企业的云原生提效降本之路

相信这样的经历对很多人来说并不陌生:为了能到更好的医院治病,不惜路途遥远奔波到大城市;或者只是看个小病,也得排上半天长队。这些由于医疗资源分配不均导致的就医问题已是老生长谈。 云计算、人工智能、大数据等技术的发展和融…

LLMs之Grok-1:model.py文件解读—实现了基于Transformer的预训练语言模型+利用JAX框架支持高性能分布式计算

LLMs之Grok-1:model.py文件解读—实现了基于Transformer的预训练语言模型+利用JAX框架支持高性能分布式计算 目录 model.py文件解读—实现了基于Transformer的预训练语言模型+利用JAX框架支持高性能分布式计算

【嵌入式——C语言】VScode编写C程序、交叉编译

【嵌入式——C语言】VScode编写C程序、交叉编译 第一步第二步第三步第四步第五步第六步第七步第八步 第一步 下载Visual Studio Code下载地址 然后直接安装就可以了。 第二步 前提是你的电脑上安装了WSL。。。 打开vscode的扩展,输入WSL进行安装 安装完之后在窗…

装饰器模式实战运用(功能增强)

目录 前言 装饰器模式与代理模式的区别 UML plantuml 类图 实战代码 mybatis cache 前言 装饰器模式和代理模式在使用上很相似,都是在不修改原始类代码的情况下,动态地给真实对象的方法做增强。 装饰器模式是通过创建一个包装对象来包裹原有对象…

HuggingFace: 掌握自然语言处理的利器

引言 在当今人工智能领域中,自然语言处理(NLP)一直是备受关注的焦点之一。从智能助手到情感分析,NLP技术已经深入到我们日常生活和工作的方方面面。然而,随着数据量的增长和模型复杂性的提升,开发和部署高…

c# RichTextbox添加行号

使用另一个RichTextBox放在要添加行号的左边 使用以下代码 //uiRichTextBox1为右侧文本框,uiRichTextBox2为左侧文本框int lineIndex 0;private void uiRichTextBox1_TextChanged(object sender, EventArgs e){if (lineIndex > uiRichTextBox1.Lines.Length){L…

C++之STL整理(1)之vector、map数据结构初识

C之STL整理(1)之vector、map数据结构初识 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的 STL C之STL整理(1)之vector、map数…

腾讯云4核8G12M云服务器一年646元,送3个月时长

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

《每天十分钟》-红宝书第4版-对象、类与面向对象编程(六)

盗用构造函数 上节提到原型包含引用值导致的继承问题,为了解决这种问题,一种叫作“盗用构造函数”(constructor stealing)的技术在开发社区流行起来(这种技术有时也称作“对象伪装”或“经典继承”)。基本…

若依 3.8.7版本springboot前后端分离 整合mabatis plus

1.去掉mybatis 这一步我没有操作&#xff0c;看别人的博客有说不去掉可能冲突&#xff0c;也可能不冲突&#xff0c;我试下来就没去掉如需要去除&#xff0c;到总的pom.xml中properties标签下的<mybatis-spring-boot.version>x.x.x</mybatis-spring-boot.version>…

C++ pdf 打印 插入图片

一&#xff1a;使用PODOFO给PDF插入图片&#xff1a; #include <podofo.h> int main() { PoDoFo::PdfMemDocument pdfDocument; PoDoFo::PdfPage* page; PoDoFo::PdfImage image; PoDoFo::PdfVecObjects* vec_objects; PoDoFo::PdfRect rect; …

Kotlin by关键字

委托的概念 委托是一种设计模式,它的基本概念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。 class NewList<out T>(private val list: MutableList<T>) {fun isEmpty() = list.isEmpty()fun add(item: @UnsafeVariance T) = l…

iPad Pro安装Code APP结合内网穿透实现公网SSH远程连接服务器云开发

文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 本文主要介绍开源iPad应用IDE Code App 如何下载安装&#xff0c;并…

零基础Web3入门到精通

Web3 是互联网的下一代&#xff0c;它将使人们能够拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。 现在的web已被成为传统互联网了&#xff0c;那么如何抓住下一代互联网的红利呢&#xff0c;有没有想一起学习…

react 简单的demo

实现些简单的deomo 显示时间 自定义hooks 使用定时器、生命周期、通过状态渲染更新 // hooks 文件 import { useEffect, useState } from reactfunction getDate() {let date new Date();let year date.getFullYear()let hour date.getHours();let minutes date.getMinut…

爬虫requests.get中的参数

requests.get 是 Python 中 requests 库的一个方法&#xff0c;用于发送 GET 请求。它有许多参数可以配置&#xff0c;以下是一些常见的参数&#xff1a; url&#xff1a;指定要发送 GET 请求的 URL。params&#xff1a;可选参数&#xff0c;用于向请求添加 URL 参数。data&…

多线程基础:线程创建、同步与通信——学习指南

多线程基础&#xff1a;线程创建、同步与通信——学习指南 文章目录 多线程基础&#xff1a;线程创建、同步与通信——学习指南前言一、线程创建1、原理2、案例3、使用场景推荐 二、线程同步1、原理2、案例1&#xff09;synchronized关键字1.1&#xff09;修饰实例方法&#xf…