基于萤火虫算法优化的BP神经网络预测模型附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

个人主页:Matlab科研工作室

个人信条:格物致知。

更多Matlab仿真内容点击

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

BP(Back Propagation)神经网络是目前最重要的神经网络之一,其结构简单、工作时状态稳定、并且易于硬件实现,被广泛应用于模式识别、分类预测、系统仿真和图像处理等诸多领域。但是,BP神经网络在广泛应用过程中被发现存在一些缺陷,比如对初始权值敏感、容易陷入局部极小值、隐含层结构难以确定等。针对这些问题,本文提出一种利用萤火虫群优化算法训练BP神经网络的权值和阈值的方法。萤火虫群优化算法是一种基于群体智能的优化算法,能较快地找到全局最优值。利用萤火虫群优化算法结合BP算法获得较好的网络初始连接权值和阈值,以此开始网络的学习,通过仿真实验表明,该优化算法在分类预测问题中有较高的测试精度和较好的拟合能力,避免了BP神经网络对初始值敏感和训练过程容易陷入局部极小值的问题,提高了BP神经网络的泛化能力、收敛速度和学习能力,验证了该优化算法的可行性和有效性。

⛄ 部分代码

%% Cost or Objective function 

function [nbest,fbest,NumEval]=ffa_mincon(u0,Lb,Ub,para,inputnum,hiddennum,outputnum,net,inputn,outputn) % para=[20 500 0.5 0.2 1]; 

% Check input parameters (otherwise set as default values)

if nargin<5, para=[20 50 0.25 0.20 1]; end  

if nargin<4, Ub=[]; end

if nargin<3, Lb=[]; end

if nargin<2,

disp('Usuage: FA_mincon(@cost,u0,Lb,Ub,para)');

end

% n=number of fireflies

% MaxGeneration=number of pseudo time steps

% ------------------------------------------------

% alpha=0.25;      % Randomness 0--1 (highly random)

% betamn=0.20;     % minimum value of beta

% gamma=1;         % Absorption coefficient

% ------------------------------------------------

n=para(1);  

MaxGeneration=para(2);  %MaxGeneration

alpha=para(3); 

betamin=para(4); 

gamma=para(5);        

NumEval=n*MaxGeneration;

% Check if the upper bound & lower bound are the same size

if length(Lb) ~=length(Ub),

    disp('Simple bounds/limits are improper!');

    return

end

% Calcualte dimension        

d=length(u0); %

% Initial values of an array       

zn=ones(n,1)*10^100;

% ------------------------------------------------

% generating the initial locations of n fireflies       

[ns,Lightn]=init_ffa(n,d,Lb,Ub,u0);  % 

% Iterations or pseudo time marching

for k=1:MaxGeneration,     %%%%% start iterations     

% This line of reducing alpha is optional

 alpha=alpha_new(alpha,MaxGeneration);

% Evaluate new solutions (for all n fireflies)       

for i=1:n,

   zn(i)=fun(ns(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);               

   Lightn(i)=zn(i);

end

% Display the shape of the objective function

% Ranking fireflies by their light intensity/objectives 

[Lightn,Index]=sort(zn);

         ns_tmp=ns;

for i=1:n,

 ns(i,:)=ns_tmp(Index(i),:);

end

%% Find the current best  

nso=ns; 

Lighto=Lightn;

nbest=ns(1,:);

Lightbest=Lightn(1);

% For output only

fbest=Lightbest;

% Move all fireflies to the better locations 

[ns]=ffa_move(n,d,ns,Lightn,nso,Lighto,nbest,Lightbest,alpha,betamin,gamma,Lb,Ub);

end   %%%%% end of iterations

% The initial locations of n fireflies    

function [ns,Lightn]=init_ffa(n,d,Lb,Ub,u0)

  % if there are bounds/limits,

if length(Lb)>0,

   for i=1:n,

   ns(i,:)=Lb+(Ub-Lb).*rand(1,d);

   end

else

   % generate solutions around the random guess

   for i=1:n,

   ns(i,:)=u0+randn(1,d);

   end

end

% initial value before function evaluations

Lightn=ones(n,1)*10^100;

% Move all fireflies toward brighter ones

function [ns]=ffa_move(n,d,ns,Lightn,nso,Lighto,nbest,Lightbest,alpha,betamin,gamma,Lb,Ub)

% Scaling of the system

scale=abs(Ub-Lb);

% Updating fireflies

for i=1:n  

% The attractiveness parameter beta=exp(-gamma*r)

   for j=1:n,

      r=sqrt(sum((ns(i,:)-ns(j,:)).^2));  %

      % Update moves

if Lightn(i)>Lighto(j), % Brighter and more attractive

        beta0=1; beta=(beta0-betamin)*exp(-gamma*r.^2)+betamin;

        tmpf=alpha.*(rand(1,d)-0.5).*scale;

        ns(i,:)=ns(i,:).*(1-beta)+nso(j,:).*beta+tmpf;

        [ns]=findlimits(n,ns,Lb,Ub);

   end

   end % end for j

end % end for i

% convergence can occur. So use with care.

function alpha=alpha_new(alpha,NGen) %

% alpha_n=alpha_0(1-delta)^NGen=0.005

% alpha_0=0.9

delta=1-(10^(-4)/0.9)^(1/NGen);

alpha=(1-delta)*alpha;

function [ns]=findlimits(n,ns,Lb,Ub)

for i=1:n,

     % Apply the lower bound

  ns_tmp=ns(i,:);

  I=ns_tmp

  ns_tmp(I)=Lb(I);

  % Apply the upper bounds

  J=ns_tmp>Ub;

  ns_tmp(J)=Ub(J);

  % Update this new move 

  ns(i,:)=ns_tmp;

end

⛄ 运行结果

基于萤火虫算法优化的BP神经网络预测模型附Matlab代码_第1张图片

⛄ 参考文献

​[1]张小琼. 基于改进萤火虫群优化算法的BP神经网络研究[D]. 广西大学, 2016.

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

 

你可能感兴趣的:(神经网络预测,matlab,算法,神经网络)