一、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(t−1)+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(t−1)∣
其中, θ \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∗×(1−R),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=1−t/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×(1−R),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