当前位置:   article > 正文

MATLAB实现果蝇算法优化BP神经网络(FOA-BP)预测数值

MATLAB实现果蝇算法优化BP神经网络(FOA-BP)预测数值

果蝇算法(Fruit Fly Optimization Algorithm, FFOA)是一种启发式优化算法,受果蝇觅食行为的启发。将其应用于优化BP神经网络,主要是为了寻找BP神经网络中的最佳权重和偏置值。以下是一个基本的流程:

  1. 初始化

    • 设定果蝇算法的参数,如种群大小(果蝇数量)、迭代次数、搜索空间的范围等。
    • 初始化果蝇群体的位置,这些位置将代表BP神经网络中的权重和偏置的初始值。
  2. 果蝇算法迭代

    • 对于每一只果蝇,进行以下操作:
      • 根据某种策略(如随机或基于历史信息)更新果蝇的位置,即更新BP神经网络的权重和偏置值。
      • 使用更新后的权重和偏置值来构建BP神经网络。
      • 使用训练数据集训练这个网络,并记录其在验证数据集上的性能(如准确率、误差等)。
    • 根据果蝇算法的评价函数(可以是验证数据集上的性能指标)来评估每只果蝇的适应度。
    • 选择适应度高的果蝇进行繁殖,生成新的果蝇种群。这可以通过选择、交叉和变异等操作来实现。
  3. 终止条件判断

    • 如果达到预设的迭代次数或满足其他停止条件(如连续多次迭代性能无显著提升),则停止迭代。
    • 否则,返回步骤2继续迭代。
  4. 输出最终结果

    • 选择在验证数据集上性能最好的BP神经网络作为最终结果。
    • 使用测试数据集评估这个网络的性能,并输出评估结果。

 完整代码见: https://download.csdn.net/download/corn1949/89238870

MATLAB部分主程序如下:

  1. % 果蝇算法优化BP
  2. clc;close all;clear all;warning off;%清除变量
  3. rand('seed', 100);
  4. randn('seed', 100);
  5. format long g;
  6. addpath(genpath('mytoolbox'));
  7. global inputnumber hiddenumber outputnumber input_train output_train input_test P1 P2 T1 T2 inputps outputps indexM N;
  8. format long g;
  9. m=200;
  10. X=rand(m,3);
  11. y=sum(X,2)+5+rand(m,1);
  12. Outputdata=y';
  13. Inputdata=X';
  14. snumber=size(Outputdata,2);
  15. % index200=1:snumber;%顺序样本
  16. index200=randperm(snumber);%随机样本
  17. numberTest=50;%用于测试的样本个数
  18. indextrain=index200(1:end-numberTest);
  19. indextest=index200(end-numberTest+1:end);
  20. % 定义训练集
  21. P1=Inputdata(:,indextrain);
  22. T1=Outputdata(:,indextrain);
  23. % 定义测试集
  24. P2=Inputdata(:,indextest);
  25. T2=Outputdata(:,indextest);
  26. %设置训练集和测试集
  27. %% (2)训练数据归一化
  28. [input_train,inputps]=mapminmax(P1);
  29. [output_train,outputps]=mapminmax(T1);
  30. %测试数据归一化
  31. input_test=mapminmax('apply',P2,inputps);
  32. output_test=mapminmax('apply',T2,outputps);
  33. [k11,k12]=size(input_train);%计算维数
  34. inputnumber=k11;%输入维数
  35. hiddenumber=8;%隐含神经元数
  36. outputnumber=size(output_train,1);%输出维数;%输出维数
  37. S=[hiddenumber*inputnumber,outputnumber*hiddenumber,hiddenumber*1,outputnumber*1];
  38. indexM=S2indexMfun(S);
  39. N=sum(S);% 编码长度
  40. tic;
  41. [x0,ybptest]=mybpfun();
  42. bptime=toc;
  43. %设置果蝇算法参数
  44. maxgen=100; %迭代次数
  45. popsize=50; %种群规模
  46. lb=-3*ones(1,N);
  47. ub=3*ones(1,N);
  48. p0=x0;% 随机果蝇群位置
  49. vlb=-(ub-lb)/20;% 果蝇群体散布范围下限
  50. vub=(ub-lb)/20;% 果蝇群体散布范围上限
  51. foamat=genfoafun(popsize,N,p0,lb,ub,vlb,vub);% 初始化果蝇群
  52. Value = decodingfun(foamat,popsize);%解码染色体;% 果蝇群解码
  53. %找出此果蝇群体中味道浓度最高的果蝇
  54. [bestSmell,bestindex]=min(Value);
  55. %保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去
  56. bestfoamat=foamat(bestindex,:);
  57. Smellbest=bestSmell;
  58. %果蝇迭代寻优开始
  59. tracemat=zeros(maxgen,2);
  60. tic;
  61. wait_hand = waitbar(0,'running...', 'tag', 'TMWWaitbar');
  62. for gen=1:maxgen
  63. %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
  64. foamat=genfoafun(popsize,N,bestfoamat,lb,ub,vlb,vub);% 初始化果蝇群
  65. Value = decodingfun(foamat,popsize);% 果蝇群解码
  66. %找出此果蝇群体中味道浓度最高的果蝇(求极大值)
  67. [bestSmell,bestindex]=min(Value);
  68. %判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去
  69. %% 计算最优
  70. [v1,indexmin]=min(Value);
  71. tracemat(gen,2)=mean(Value);
  72. %% 记录最优
  73. if gen==1
  74. bestfoamat=foamat(indexmin,:);
  75. bestvalue=v1;
  76. end
  77. if bestvalue>v1
  78. bestvalue=v1;
  79. bestfoamat=foamat(indexmin,:);
  80. end
  81. tracemat(gen,1)=bestvalue;% 保留最优
  82. waitbar(gen/maxgen,wait_hand);
  83. end
  84. delete(wait_hand);
  85. foabptime=toc;

程序结果如下:

果蝇算法优化得到的最优目标函数值

bestvalue =

         0.132766053966035

果蝇算法优化得到的最优染色体

bestfoamat =

  1 6

          2.41906303571828          1.96871285079055          2.61149930019226           1.0987716283701          0.50651831657148          2.30022179464217

  7 12

          2.40939262295353         -2.15817219641748         -0.81596335313324          1.17787006833961          -1.0479477211566          1.92074952368336

  13 18

          -2.2627904810513          1.57156783691099           2.5837850176607         -1.50132352268534         0.392281233412555         -1.04567877515283

  19 24

         0.482163776536098         -1.06816891420559          1.60328577153001          1.26601018747221        -0.465348459480349         -1.11395016558292

  25 30

         0.637461335369384         -0.21950071447636        -0.281880338455025       -0.0237056040107121        -0.231490532076062         0.425958967900226

  31 36

        -0.576084198240168        -0.878239222480313         -2.06194275761603         -2.52010426430077         -1.82918650080529        -0.532035550214701

  37 41

         0.617972713082428         0.452208468660384          2.09101141725358         -2.93656000664297        -0.295414914627872

foabp运行时间(s)

foabptime =

                 4.1001338

bp运行时间(s)

bptime =

                 5.2011365

>>

完整代码见: https://download.csdn.net/download/corn1949/89238870

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/525502
推荐阅读
相关标签
  

闽ICP备14008679号