• 基于萤火虫算法优化的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

    ⛄ 运行结果

    ⛄ 参考文献

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

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

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

     

  • 相关阅读:
    [大模型]Llama-3-8B-Instruct FastApi 部署调用
    使用 Docker 部署 VS Code in The Browser
    【CSP-J/S初赛知识点整理】
    python相关岗位面试题总结(五)(持续更新)
    Yarn 和 npm 的区别
    ​明知工作没前途,想辞职却又不知道做什么?
    腾讯云免费SSL证书申请流程_2023更新教程
    论文阅读-----使用可分离脚印的x射线3D CT向前和向后投影
    2022年11月华南师范大学自考本科网络工程-本科实践题目
    如何解决swagger-editor在线接口调试时的跨域问题
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/127459719