单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)

news2025/1/11 19:54:23

一、RBF神经网络

1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。

RBF的基本思想是:用RBF作为隐单元的“基”构成隐藏层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分的问题在高维空间内线性可分。

RBF神经网络结构简单、训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此已被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。

RBF神经网络学习算法需要优化的参数有3个:基函数的中心方差以及隐含层到输出层的权值
基于高斯核的RBF神经网络拓扑结构:
第一层输入层:由信号源节点构成,仅起到数据信息的传递作用,对输入信息不做任何变换

第二层隐含层:节点数视需要而定。隐含层神经元核函数(作用函数)是高斯函数,对输入信息进行空间映射的变换。

第三层输出层,对输入模式做出响应。输出层神经元的作用函数为线性函数,对隐含层神经元输出的信息进行线性加权后输出,作为整个神经网络的输出结果。

在这里插入图片描述

二、蜣螂优化算法

蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得。
在这里插入图片描述

2.1蜣螂滚球

(1)当蜣螂前行无障碍时,蜣螂在滚粪球过程中会利用太阳进行导航,下图中红色箭头表示滚动方向
在这里插入图片描述
本文假设光源的强度会影响蜣螂的位置,蜣螂在滚粪球过程中位置更新如下:

x i ( t + 1 ) = x i ( t ) + α × k × x i ( t − 1 ) + b × Δ x , Δ x = ∣ x i ( t ) − X w ∣ \begin{aligned} x_{i}(t+1) &=x_{i}(t)+\alpha \times k \times x_{i}(t-1)+b \times \Delta x, \\ \Delta x &=\left|x_{i}(t)-X^{w}\right| \end{aligned} xi(t+1)Δx=xi(t)+α×k×xi(t1)+b×Δx,=xi(t)Xw
其中, t t t表示当前迭代次数, x i ( t ) x_{i}(t) xi(t)表示第 i i i次蜣螂在第t次迭代中的位置信息, k ∈ ( 0 , 0.2 ] k∈(0,0.2] k(0,0.2]为扰动系数, b b b ( 0 , 1 ) (0,1) (0,1) 之间的随机数, α \alpha α取 -1 或 1 , X w X^{w} Xw表示全局最差位置, Δ x \Delta x Δx用于模拟光的强度变化。
其中, α \alpha α的取值采用算法1:
在这里插入图片描述

(2)当蜣螂遇到障碍物无法前进时,它需要通过跳舞来重新调整自己,以获得新的路线。本文使用切线函数来模仿跳舞行为,以此获得新的滚动方向,滚动方向仅考虑为 [ 0 , π ] [0,π] [0,π]之间。
在这里插入图片描述
蜣螂一旦成功确定新的方向,它应该继续向后滚动球。蜣螂的位置更新如下:
x i ( t + 1 ) = x i ( t ) + tan ⁡ ( θ ) ∣ x i ( t ) − x i ( t − 1 ) ∣ x_{i}(t+1)=x_{i}(t)+\tan (\theta)\left|x_{i}(t)-x_{i}(t-1)\right| xi(t+1)=xi(t)+tan(θ)xi(t)xi(t1)
其中, θ \theta θ为偏转角,其取值为 [ 0 , π ] [0,π] [0,π],采用算法2:
在这里插入图片描述

2.2蜣螂繁殖

在这里插入图片描述

在自然界中,雌性蜣螂将粪球被滚到适合产卵的安全地方并将其隐藏起来,以此为后代提供一个安全的环境。受此启发,因而提出了一种边界选择策略以此模拟雌性蜣螂产卵的区域:
L b ∗ = max ⁡ ( X ∗ × ( 1 − R ) , L b ) U b ∗ = min ⁡ ( X ∗ × ( 1 + R ) , U b ) \begin{array}{l} L b^{*}=\max \left(X^{*} \times(1-R), L b\right) \\ U b^{*}=\min \left(X^{*} \times(1+R), U b\right) \end{array} Lb=max(X×(1R),Lb)Ub=min(X×(1+R),Ub)
其中, X ∗ X^{*} X表示当前最优位置, L b ∗ L b^{*} Lb U b ∗ U b^{*} Ub分别表示产卵区的下限和上限, R = 1 − t / T m a x R=1−t/T_{max} R=1t/Tmax T m a x T_{max} Tmax表示最大迭代次数, L b Lb Lb U b Ub Ub分别表示优化问题的下限和上限。
雌性蜣螂一旦确定了产卵区,就会选择在该区域育雏球产卵。每只雌性蜣螂在每次迭代中只产生一个卵,可以看出,产卵区的边界范围是动态变化的,主要由R值决定。因此,育雏球的位置在迭代过程中也是动态的,其定义如下:
B i ( t + 1 ) = X ∗ + b 1 × ( B i ( t ) − L b ∗ ) + b 2 × ( B i ( t ) − U b ∗ ) B_{i}(t+1)=X^{*}+b_{1} \times\left(B_{i}(t)-L b^{*}\right)+b_{2} \times\left(B_{i}(t)-U b^{*}\right) Bi(t+1)=X+b1×(Bi(t)Lb)+b2×(Bi(t)Ub)
其中, B i ( t ) B_{i}(t) Bi(t)表示第t次迭代中第 i个育雏球的位置信息, b 1 b_{1} b1 b 2 b_{2} b2均为1×D的随机向量,D表示优化问题的维度。
产卵区的选择如算法3所示:
在这里插入图片描述

2.3蜣螂觅食

在这里插入图片描述
雌性蜣螂所产的卵会逐渐长大,一些已经成熟的小蜣螂会从地下出来寻找食物,小蜣螂的最佳觅食区建模如下:
L b b = max ⁡ ( X b × ( 1 − R ) , L b ) U b b = min ⁡ ( X b × ( 1 + R ) , U b ) \begin{array}{l} L b^{b}=\max \left(X^{b} \times(1-R), L b\right) \\ U b^{b}=\min \left(X^{b} \times(1+R), U b\right) \end{array} Lbb=max(Xb×(1R),Lb)Ubb=min(Xb×(1+R),Ub)
其中, X b X^{b} Xb表示全局最优位置, L b b L b^{b} Lbb U b b U b^{b} Ubb分别表示最佳觅食区的下限和上限。
在这里插入图片描述

小蜣螂的位置更新如下:
x i ( t + 1 ) = x i ( t ) + C 1 × ( x i ( t ) − L b b ) + C 2 × ( x i ( t ) − U b b ) x_{i}(t+1)=x_{i}(t)+C_{1} \times\left(x_{i}(t)-L b^{b}\right)+C_{2} \times\left(x_{i}(t)-U b^{b}\right) xi(t+1)=xi(t)+C1×(xi(t)Lbb)+C2×(xi(t)Ubb)
其中, x i ( t ) x_{i}(t) xi(t)表示第t次迭代中第i只小蜣螂在的位置, C 1 C_{1} C1是服从正态分布的随机数, C 2 C_{2} C2为(0,1)的随机向量。

2.4蜣螂偷窃

在这里插入图片描述

另一方面,一些蜣螂从其他蜣螂那里偷粪球,盗贼蜣螂的位置更新如下:

x i ( t + 1 ) = X b + S × g × ( ∣ x i ( t ) − X ∗ ∣ + ∣ x i ( t ) − X b ∣ ) x_{i}(t+1)=X^{b}+S \times g \times\left(\left|x_{i}(t)-X^{*}\right|+\left|x_{i}(t)-X^{b}\right|\right) xi(t+1)=Xb+S×g×(xi(t)X+ xi(t)Xb )
其中, x i ( t ) x_{i}(t) xi(t)表示在第t次迭代中第i个盗贼蜣螂的位置,g为服从正态分布的1×D随机向量,S为常数。

2.5DBO描述

滚球蜣螂、繁殖蜣螂、觅食蜣螂和偷窃蜣螂的比例分布如下:
在这里插入图片描述
DBO算法描述如下:
在这里插入图片描述
参考文献:Xue, J., Shen, B. Dung beetle optimizer: a new meta-heuristic algorithm for global optimization. J Supercomput (2022). https://doi.org/10.1007/s11227-022-04959-6

三、蜣螂优化算法DBO优化RBF神经网络

蜣螂优化算法DBO中每个个体由基函数的中心方差以及隐含层到输出层的权值构成,目标函数为样本真实值与预测值的均方误差(MSE)。训练数据集为5个输入,2个输出,共100个样例。构建结构为5-8-2的RBF神经网络,其中隐藏层神经元数目可以修改。
部分样例如下:(前5列为输入,后2列为输出)

0.231275469013250	0.819206722779840	0.845110449594525	0.184086789965809	0.785385668685064	0.273016775596421	-0.525289339305860
0.361541209457843	0.841205431876524	0.980374803793902	0.0859900940578461	0.688836587017380	0.182614021784274	-0.359086617897261
0.922688287491720	0.699812576279511	0.899786340304967	0.432450528880324	0.569301647632306	-0.373191545730696	0.692460134226641
0.299227234437514	0.0816091519448512	0.740899022326946	0.650897340325028	0.209324055396846	0.916657628162626	-0.732727263933928
0.0248021181709812	0.374796074923082	0.570315333727928	0.253772503915307	0.338256777364241	0.999960807859380	0.0177061120929101
0.646658961616975	0.0423161385647169	0.106104935388092	0.212179497735250	0.830057126375891	0.964693196398184	-0.508154508099431
0.808360466940075	0.399056561751923	0.821081939935231	0.663473595114130	0.521205398088936	-0.0715241846059059	0.142682003141748
0.996036904340983	0.177590010319259	0.498978760642987	0.535374820095270	0.273972088775787	0.612832469899295	-0.968536197268834
0.254095375608645	0.123643543287013	0.375547648543273	0.342271860252468	0.636914688527762	0.986958752561837	-0.317748121586226
0.489511345316060	0.858764063567839	0.672506934004802	0.416889604050640	0.875802154076831	-0.171036374456662	0.337032209465389
0.185278746013332	0.114882179349929	0.0249815105218890	0.540278515239829	0.336848910688767	0.932859186232019	0.672108668047313
0.909681828009080	0.102232107111248	0.656246980781499	0.654864043388290	0.956710552046541	-0.137703903094583	0.272784117161094
0.408456363651882	0.938823058283146	0.685665490425611	0.930210090681512	0.623586971563434	-0.430592654242920	0.777259681757975
0.269585875402607	0.271008875302077	0.507953142985896	0.229313997464057	0.344293696020832	0.998681403071495	-0.102537983893846
0.643025332315473	0.468703980190812	0.459677634270965	0.401146013642205	0.967774844146207	0.199908807799238	-0.391747100006622
0.595097567588796	0.309882133224413	0.0578735749039524	0.896085328764512	0.507751211966913	0.699646656853784	-0.999779704342388
0.832789921454823	0.502400345281531	0.225858041623964	0.657301469048430	0.245308474084980	0.627185531149164	-0.976991854507143

部分代码如下:(完整代码可以私聊博主或添加博主微信

close all
clear
clc
global inputnum hiddennum outputnum TrainNum 
inputnum=5;%神经网络输入层神经元个数(输入样本维度)
hiddennum=8;%神经网络隐藏层神经元个数(可以自己修改) 
outputnum=2;%神经网络输出层神经元个数(输出样本维度)
TrainNum=100;%训练集数目 
%% DBO优化RBF神经网络,目标函数是均方误差MSE
SearchAgents_no=50; %  种群大小(可以修改)
Function_name='F1'; 
Max_iteration=500000; % 最大迭代次数(可以修改)
[lb,ub,dim,fobj]=fun_info(Function_name);% 在fun_info.m中可以查看上下限及目标函数
[fMin,bestX,curve]=DBO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);  %DBO优化RBF神经网络的参数
save bestX bestX %保留DBO优化RBF神经网络得到的最优参数
figure
semilogy(curve,'Color','g')
title('Objective space')
xlabel('Iteration');
ylabel('MSE');
grid on
box on
legend('DBO')
Predata;%预测
%%
display(['The best solution obtained by FA is : ', num2str(bestX)]);
display(['The best optimal value of the objective funciton found by FA is : ', num2str(fMin)]);%fMin越小说明DBO优化RBF神经网络效果越好

四、预测结果

在第一个目标上的真实值与预测值:
在这里插入图片描述

在第二个目标上的真实值与预测值:
在这里插入图片描述

两个目标的真实值与预测值的误差MAE:
在这里插入图片描述

五、参考代码

完整代码添加博客下方博主微信:djpcNLP123

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

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

相关文章

【面试题】对async/await 的了解?

前言大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库“编程,就像一场开卷考试,题目的答案取决于对书本内容的熟悉程度;而一份源代码就好比一本书&#xff0c…

源码才十几行的数组转换工具arrify,快学起来

前言 前几天在项目中运用到了arrify工具,今天便阅读了arrify的源码,整个源码部分不过才十几行,而且也不难,所以来分享一下阅读心得。 arrify介绍 arrify是什么,有什么作用,或许有些小伙伴还不清楚。简单…

web测试的基本流程

1、web测试流程: (1)web测试 1)参与一个web新项目的测试前,先搜集测试相关的资料,包括原型图、各种需求文档、业务相关等需求相关材料 2)结合第一步搜集到的需求相关资料,自行熟悉系统,同时列出不明白的点,…

时间API在更新,传奇已经谢幕,但技术永远不死

(Bill Joy(左一),Vinod Khosla(左二),Andy Bechtolsheim(右二),Scott McNealy(右一) ) CSDN 博文征集活动(和日期相关的代码和bug):点击这里 各位 “big guys”,这篇博文…

植物大战 二叉搜索树——C++

这里是目录标题二叉排序树的概念模拟二叉搜索树定义节点类insert非递归Finderase(重点)析构函数拷贝构造(深拷贝)赋值构造递归FindRInsertR二叉搜索树的应用k模型KV模型二叉排序树的概念 单纯的二叉树存储数据没有太大的作用。 搜索二叉树作用很大。 搜索二叉树的一般都是用…

摸鱼用python获取弹幕的两种方式【前者简单,后者数据好看】

嗨害大家好鸭!我是小熊猫~ 相信大家对于 “弹幕文化” 已经相当熟悉啦 你不是一个人在看——这就是弹幕网站的存在感。 它形成了新的“抱团”观看模式, 也真正实现了无时空距离的社交。 有网友表示,弹幕简直比剧情还有趣。 看似简单的寥寥…

【ES】Elasticsearch-深入理解索引原理

文章目录Elasticsearch-深入理解索引原理读操作更新操作SHARD不变性动态更新索引删除和更新实时索引更新持久化Segment合并近实时搜索,段数据刷新,数据可见性更新和事务日志更新索引并且将改动提交修改Searcher对象默认的更新时间Elasticsearch-深入理解…

CentOS8基础篇9:进程的延迟与周期调度

一、进程的概念 进程:开始执行但是还没有结束的程序的实例 程序:包含可执行代码的文件 进程与程序的关系 进程由程序产生,是一个运行着的、要占系统资源的程序 进程不等于程序 浏览网络时,打开多个IE浏览器程序;…

一文讲清楚如何进行主数据编码

主数据编码作为一类重要的数据资源,在信息化建设中具有重要的地位和作用,是保证现有信息系统和未来新系统建设成功的关键因素,决定着系统中的信息一致性。 编码,是一件简单的事情,但绝对不是一件容易做好的事情&#…

FPGA案例开发手册——基于全志T3+Logos FPGA核心板

前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit。 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板…

PImpl(Pointer to Implementation)指向实现的指针 [使用ChatGPT学习系列]

PImpl是Pointer to Implementation的缩写,也被称为“编译期实现”,是一种C设计的模式。 用于将类的实现细节与其公共接口分离开来。该模式的核心思想是 通过一个指向类的实现的指针来隐藏类的实现细节,从而提高类的封装性和安全性。PImpl是一…

「考研算法」

考研算法 前言 本系列文章涉及的算法内容,针对的是哈尔滨工业大学854科目。在本文中通过具体的算法题进行讲解相应算法。 今天涉及的算法主要有线性筛,十大排序中快速排序和归并排序。 后续会有动态规划的相关算法以及尝试模型的总结,如果…

[Java·算法·中等]LeetCode17. 电话号码的字母组合

每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…

本科毕业设计-基于ORB SLAM3的多从机SLAM导航系统

耗时:两个月 需求:多从机协作 多地图系统 稠密建图 定位 导航 硬件:二个D435 一台X86主机(CPU:13600kf 内存:32G) X86主机环境:ubuntu18.04 opencv3.2 ROS1 主要代码参考:ORB-SLAM3 主要调用…

【CNN】FractalNet——与DenseNet有异曲同工之妙

FractalNet论文名称:FractalNet: Ultra-Deep Neural Networks without Residuals FractalNet论文下载链接: FractalNet(分型网络),2016年Gustav Larsson首次提出。 (1)分形网络不像resNet那样…

嵌入式 Linux 文件IO操作

目录 Linux 文件操作 1 Linux 系统环境文件操作概念 2 缓冲 IO 文件操作 1 文件的创建,打开与关闭 fopen 函数函数 2 freopen 函数 3、fdopen函数 4、fclose函数 5、格式化读写 6、单个字符读写 7、文件定位 8、标准目录文件 9、非缓冲IO文件操作 Linux 文…

十二、MyBatis的高级映射及延迟加载

1 数据库表的准备 准备数据库表:一个班级对应多个学生。班级表:t_clazz。学生表:t_stu 2 环境搭建 创建模块 打包方式:jar 引入依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖 配置文件:…

C#/.net程序调用python

C#/.net程序调用python C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet…

Kubernetes初始化容器

初始化容器 之前了解了容器的健康检查的两个探针:liveness probe(存活探针)和readiness probe(可读性探针)的使用方法,我们说在这两个探针是可以影响容器的生命周期的,包括我们之前提到的容器的…

如何或者无插件Web页面监控播放软件LiveNVR的固定视频流地址,实现大屏上墙、播放、视频分析等目的

1、LiveNVR介绍 LiveNVR的安防监控的视频直播,可以按标准的Onvif/RTSP协议接入监控设备,也可以通过海康、大华、天地伟业等厂家私有SDK接入监控,实现web页面的播放和录像回放。 可以分发HTTP-FLV、WS-FLV、WebRTC、RTMP、HLS(M3U8)、RTSP等多…