• 【matlab】智能优化算法优化BP神经网络


    目录

    引言

    一、BP神经网络简介

    二、智能优化算法概述

    三、智能优化算法优化BP神经网络的方法

    四、蜣螂优化算法案例

    1、算法来源

    2、算法描述

    3、算法性能

    结果仿真

    代码实现


    引言

    智能优化算法优化BP神经网络是一个重要的研究领域,旨在通过智能算法提高BP神经网络的性能和效率。以下是对该过程的详细解释:

    一、BP神经网络简介

    BP神经网络(Back Propagation Neural Network)是一种基于误差反向传播算法的人工神经网络,由输入层、隐层和输出层组成。它通过前向传播计算输出,然后通过反向传播调整权重和阈值,以最小化输出误差。BP神经网络广泛应用于分类、回归、模式识别等领域。

    二、智能优化算法概述

    智能优化算法是一类受到人类智能、生物群体社会性或自然现象规律启发的算法,用于解决复杂的优化问题。这些算法通常具有全局搜索能力,能够避免陷入局部最优解。智能优化算法包括进化类算法(如遗传算法、差分进化算法)、群智能类算法(如蚁群算法、粒子群算法)和物理法则类算法(如模拟退火算法、引力搜索算法)等。

    三、智能优化算法优化BP神经网络的方法

    1. 选择智能优化算法
      • 根据问题的特性和需求选择合适的智能优化算法。例如,对于高维度、非线性问题,可以考虑使用遗传算法或粒子群算法等。
    2. 确定优化目标
      • 在BP神经网络中,优化目标通常是调整权重和阈值,以最小化输出误差。这可以通过定义一个目标函数(如均方误差MSE)来实现。
    3. 编码和解码
      • 将BP神经网络的权重和阈值编码为智能优化算法可以处理的形式(如二进制编码、实数编码等)。
      • 在优化过程中,对编码后的参数进行解码,以构建BP神经网络模型。
    4. 初始化种群或粒子
      • 在进化类算法中,需要初始化一个种群;在群智能类算法中,则需要初始化一组粒子。这些个体或粒子代表了BP神经网络的初始权重和阈值。
    5. 评估适应度
      • 使用目标函数评估每个个体或粒子的适应度(即BP神经网络的性能)。这通常通过计算训练集或测试集上的误差来实现。
    6. 进化或迭代
      • 根据适应度进行进化操作(如交叉、变异、选择)或迭代更新(如粒子位置的更新)。这些操作旨在产生性能更好的BP神经网络模型。
    7. 终止条件
      • 设置适当的终止条件(如最大迭代次数、最小误差等),以结束优化过程。
    8. 结果分析
      • 分析优化后的BP神经网络模型的性能,并与优化前的模型进行比较。

    四、蜣螂优化算法案例

    蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,该算法在2022年底被提出,并发表在知名SCI期刊《The Journal of Supercomputing》上。其主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发,具有进化能力强、搜索速度快、寻优能力强的特点。以下是对蜣螂优化算法的详细介绍:

    1、算法来源

    蜣螂优化算法由Jiankai Xue和Bo Shen在2022年提出,其灵感来源于蜣螂在自然界中的多种行为习性。这些习性包括滚球导航、跳舞重新定位、觅食、偷窃以及繁殖等,这些行为被巧妙地转化为算法中的优化策略。

    2、算法描述

    在蜣螂优化算法中,每只蜣螂的位置对应一个解,通过模拟蜣螂的多种行为来更新解的位置,从而找到问题的最优解。算法主要包括以下几个部分:

    1. 滚球行为
      • 蜣螂在滚动粪球的过程中会利用天体(如太阳)进行导航,使粪球沿直线滚动。在算法中,这一行为被模拟为蜣螂位置的更新受光源强度、风等自然因素的影响。
      • 公式表示:xi​(t+1)=xi​(t)+α×k×(xi​(t)−xi​(t−1))+b×Δx,其中Δx用于模拟光的强度变化。
    2. 跳舞行为
      • 当蜣螂遇到障碍物无法前进时,会通过跳舞来调整方向。在算法中,这被模拟为使用切线函数获得新的滚动方向,并继续滚动。
      • 公式表示:xi​(t+1)=xi​(t)+tan(θ)×∣xi​(t)−xi​(t−1)∣,其中θ为偏转角。
    3. 觅食行为
      • 雌性蜣螂会将粪球滚到安全的地方进行产卵,为后代提供安全的环境。在算法中,这被模拟为建立最优觅食区域,引导小蜣螂觅食。
      • 公式表示:小蜣螂的位置更新受全局最优位置的影响,同时加入随机数进行探索。
    4. 偷窃行为
      • 蜣螂种群中存在偷窃行为,即一些蜣螂会争夺食物并占为己有。在算法中,这被模拟为小偷蜣螂根据其他蜣螂的位置和最佳觅食区寻找食物。
      • 公式表示:小偷蜣螂的位置更新受全局最优位置和随机向量的影响。
    3、算法性能

    蜣螂优化算法通过模拟蜣螂的多种行为,实现了全局探索和局部开发的平衡,具有收敛速度快和准确率高的特点。该算法已被应用于多个领域的优化问题中,如无人机路径规划、神经网络参数优化等,并取得了良好的效果

    结果仿真

    神经网络工具箱:

     网络图:

    回归

    预测误差

    代码实现

    1. % 清空环境
    2. clc
    3. clear
    4. %读取数据
    5. load data input output
    6. %节点个数
    7. inputnum=2;
    8. hiddennum=5;
    9. outputnum=1;
    10. %训练数据和预测数据
    11. input_train=input(1:1900,:)';
    12. input_test=input(1901:2000,:)';
    13. output_train=output(1:1900)';
    14. output_test=output(1901:2000)';
    15. %选连样本输入输出数据归一化
    16. [inputn,inputps]=mapminmax(input_train);
    17. [outputn,outputps]=mapminmax(output_train);
    18. %构建网络
    19. net=newff(inputn,outputn,hiddennum);
    20. % 参数初始化
    21. dim=21;
    22. maxgen=100; % 进化次数
    23. sizepop=30; %种群规模
    24. popmax=5;
    25. popmin=-5;
    26. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    27. P_percent = 0.2; % The population size of producers accounts for "P_percent" percent of the total population size
    28. pNum = round( sizepop * P_percent ); % The population size of the producers
    29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    30. for i=1:sizepop
    31. pop(i,:)=5*rands(1,21);
    32. % V(i,:)=rands(1,21);
    33. fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    34. end
    35. XX= pop;
    36. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    37. pFit = fitness;
    38. [ fMin, bestI ] = min( fitness ); % fMin denotes the global optimum fitness value
    39. bestX = pop( bestI, : ); % bestX denotes the global optimum position corresponding to fMin
    40. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 蜣螂优化算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    41. for t = 1 : maxgen
    42. [ ans, sortIndex ] = sort( pFit );% Sort.
    43. [fmax,B]=max( pFit );
    44. worse= pop(B,:);
    45. r2=rand(1);
    46. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    47. for i = 1 : pNum
    48. if(r2<0.9)
    49. r1=rand(1);
    50. a=rand(1,1);
    51. if (a>0.1)
    52. a=1;
    53. else
    54. a=-1;
    55. end
    56. pop( i , : ) = pop( i , :)+0.3*abs(pop(i , : )-worse)+a*0.1*(XX( i , :)); % Equation (1)
    57. else
    58. aaa= randperm(180,1);
    59. if ( aaa==0 ||aaa==90 ||aaa==180 )
    60. pop( i , : ) = pop( i , :);
    61. end
    62. theta= aaa*pi/180;
    63. pop( i , : ) = pop( i , :)+tan(theta).*abs( pop(i , : )-XX( i , :)); % Equation (2)
    64. end
    65. fitness( i )=fun(pop(i ,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    66. end
    67. [ fMMin, bestII ] = min( fitness );
    68. bestXX = pop( bestII, : );
    69. R=1-t/maxgen; %
    70. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    71. Xnew1 = bestXX.*(1-R);
    72. Xnew2 =bestXX.*(1+R); %%% Equation (3)
    73. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    74. Xnew11 = bestX.*(1-R);
    75. Xnew22 =bestX.*(1+R); %%% Equation (5)
    76. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    77. for i = ( pNum + 1 ) :12 % Equation (4)
    78. pop( i, : )=bestXX+((rand(1,dim)).*(pop( i , : )-Xnew1)+(rand(1,dim)).*(pop( i , : )-Xnew2));
    79. fitness( i )=fun(pop(i ,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    80. end
    81. for i = 13: 19 % Equation (6)
    82. pop( i, : )=pop( i , : )+((randn(1)).*(pop( i , : )-Xnew11)+((rand(1,dim)).*(pop( i , : )-Xnew22)));
    83. fitness( i )=fun(pop(i ,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    84. end
    85. for j = 20 : sizepop % Equation (7)
    86. pop( j,: )=bestX+randn(1,dim).*((abs(( pop(j,: )-bestXX)))+(abs(( pop(j,: )-bestX))))./2;
    87. fitness( j )=fun(pop(j ,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    88. end
    89. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    90. XX=pop;
    91. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    92. for i = 1 : sizepop
    93. if ( fitness( i ) < pFit( i ) )
    94. pFit( i ) = fitness( i );
    95. pop(i,:) = pop(i,:);
    96. end
    97. if( pFit( i ) < fMin )
    98. fMin= pFit( i );
    99. bestX =pop( i, : );
    100. end
    101. end
    102. yy(t)=fMin;
    103. end
    104. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    105. %% 迭代寻优
    106. x=bestX
    107. %% 结果分析
    108. plot(yy)
    109. title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
    110. xlabel('进化代数');ylabel('适应度');
    111. %% 把最优初始阀值权值赋予网络预测
    112. % %用蜣螂优化算法优化的BP网络进行值预测
    113. w1=x(1:inputnum*hiddennum);
    114. B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
    115. w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
    116. B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
    117. net.iw{1,1}=reshape(w1,hiddennum,inputnum);
    118. net.lw{2,1}=reshape(w2,outputnum,hiddennum);
    119. net.b{1}=reshape(B1,hiddennum,1);
    120. net.b{2}=B2;
    121. %% 训练
    122. %网络进化参数
    123. net.trainParam.epochs=100;
    124. net.trainParam.lr=0.1;
    125. net.trainParam.goal=0.00001;
    126. %网络训练
    127. [net,tr]=train(net,inputn,outputn);
    128. %%预测
    129. %数据归一化
    130. inputn_test=mapminmax('apply',input_test,inputps);
    131. an=sim(net,inputn_test);
    132. test_simu=mapminmax('reverse',an,outputps);
    133. error=test_simu-output_test;
    134. figure(2)
    135. plot(error)
    136. title('仿真预测误差','fontsize',12);
    137. xlabel('仿真次数','fontsize',12);ylabel('误差百分值','fontsize',12);

  • 相关阅读:
    考研结束大半年,研0这些时间普通人的一些感触(附开学flag)
    java对一个对象加锁,锁的是什么东西?
    知识点16:big.LITTLE 和 dynamIQ架构的cache
    Echarts-实现3D柱状图
    Golang爬虫封装
    windows下gdal的java开发环境搭建
    android top 参数
    3 内存访问
    milvus数据库-管理数据库
    金九银十面试即将到来!字节内部数据结构与算法笔记,限时上线,Java程序员们准备好了吗?
  • 原文地址:https://blog.csdn.net/m0_58683132/article/details/140414570