✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
针对无线网络流量数据预测精度不高问题,提出一种基于蝙蝠算法(BA)优化的反向传播(BP)神经网络的分类预测模型——BABP.通过采用蝙蝠算法对BP神经网络模型的初始权值与阈值进行全局寻优,构建崭新的基于蝙蝠算法优化的神经网络模型.
⛄ 部分代码
%% Bat Algorithm For Sphere Function %%
%% 开始 %%
clear;clc;
close all;
%% 初始化参数 %%
Iter=1;%初始迭代次数
Iter_Max=50;%最大迭代次数
Dim=2;%问题的维度
Pop_Size=30;%种群大小
Loud_Min=0;%响度最小值
Alpha=0.95;%响度控制参数
Gama=0.95;%脉冲发射率控制参数
Freq_Min=0;Freq_Max=2;%频率范围
V_Min=-5;V_Max=5;%速度范围
Pop_Min=-10;Pop_Max=10;%种群个体大小范围
%% 初始化种群 %%
PR=0.5*ones(Pop_Size,1);%脉冲发射率初始化
Loud=0.9*ones(Pop_Size,1);%响度初始化
PR0=PR;%记录初始脉冲发射率
Beta=rand(Pop_Size,1);%随机化Beta值
Freq=Freq_Min+(Freq_Max-Freq_Min)*Beta;%频率初始化
V=V_Min+(V_Max-V_Min)*rand(Pop_Size,Dim);%速度初始化
% V=zeros(Pop_Size,Dim);
Pop=Pop_Min+(Pop_Max-Pop_Min)*rand(Pop_Size,Dim);%种群初始化
for i=1:Pop_Size
Fitness(i)=Sphere_Function(Pop(i,:));%评估当前野草对应的适应度值
end
[Fitness_Best,Position_Best]=min(Fitness);%寻找当前最优适应度值
Position_Current=find(Fitness==Fitness_Best);%最优适应度值的位置
Trace(Iter)=Fitness_Best;%记录当前代适应度值最小值
%% 迭代部分 %%
while Iter<=Iter_Max
Iter%记录当前迭代次数
Fitness_Best%记录当前最优适应度值
for i=1:Pop_Size
Beta(i)=rand;
Freq(i,:)=Freq_Min+(Freq_Max-Freq_Min)*Beta(i);%频率控制
V(i,:)=V(i,:)+(Pop(i,:)-Pop(Position_Best,:))*Freq(i);%速度更新
V(i,find(V(i,:)>V_Max))=V_Max;
V(i,find(V(i,:)<V_Min))=V_Min;
Pop_New(i,:)=Pop(i,:)+V(i,:);%位置更新
Pop_New(i,find(Pop_New(i,:)>Pop_Max))=Pop_Max;
Pop_New(i,find(Pop_New(i,:)<Pop_Min))=Pop_Min;
% Fitness(i)=Griewank_Function(Pop(i,:));%适应度值更新
Epsilon=-1+2*rand(1,Dim);%随机选取Epsilon
PR_Mean=mean(PR);%求当前脉冲发射率的平均值
if rand>PR(i)
Position_Select=Position_Current(ceil(length(Position_Current)*rand));%选择一个最优解作为全局最优解
Pop_New(i,:)=Pop(Position_Select,:)+Epsilon*PR_Mean;%当前最优适应度值解作微扰移动
% else
% Position_Select=ceil(Pop_Size*rand);%选择任意一个解
% Pop_New(i,:)=Pop(Position_Select,:)+Epsilon*PR_Mean;%当前选定解作微扰移动
end
Fitness_New(i)=Sphere_Function(Pop_New(i,:));%适应度值更新
if (rand<Loud(i))&(Fitness_New(i)<Fitness(i))
Pop(i,:)=Pop_New(i,:);%接受新解
Fitness(i)=Fitness_New(i);
Loud(i)=Alpha*Loud(i);%响度更新
PR(i)=PR0(i)*(1-exp(-Gama*Iter));%脉冲发射率更新
end
if Fitness(i)<Fitness_Best
Fitness_Best=Fitness(i);
end
[Fitness_Best,Position_Best]=min(Fitness);%寻找当前最优适应度值
Position_Current=find(Fitness==Fitness_Best);%最优适应度值的位置
end
Iter=Iter+1;
Trace(Iter)=Fitness_Best;%记录当前代适应度值最小值
end
%% 数据后处理 %%
Iter%记录当前迭代次数
Fitness_Best%记录当前最优适应度值
figure('Position',[269 240 660 290])
%Draw search space
subplot(1,2,1);
X1=linspace(-10,10,101);
X2=linspace(-10,10,101);
for i=1:length(X1)
for j=1:length(X2)
Y(i,j)=X1(i)^2+X2(j)^2;
end
end
subplot(1,2,1),surf(X1,X2,Y);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel('( x_1 , x_2 )')
subplot(1,2,2);,plot(Trace);
xlabel('Iteration');
ylabel('Best score obtained so far');
⛄ 运行结果
⛄ 参考文献
[1]赵永杰, 张强, 潘德法,等. 基于蝙蝠算法优化的BP神经网络估算工质沸点温度[J]. 自动化与仪器仪表, 2022(000-004).
[2]郭贝, 任金霞. 基于蝙蝠算法优化BP神经网络的特征点匹配[J]. 制造业自动化, 2019, 41(8):4.
❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除