找回密码
 立即注册
查看: 187|回复: 0

基于PSO粒子群算法优化RBF网络的数据预测matlab仿真

[复制链接]
发表于 2024-7-15 18:40 | 显示全部楼层 |阅读模式
1.算法描述
1985年,Powell提出了多变量插值的径向基函数(RBF)方式。径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也可以是到任意一点c的距离,c点称为中心点。任意满足上述特性的函数,都可以叫做径向基函数。一般使用欧氏距离计算距离中心点的距离(欧式径向基函数)。最常用的径向基函数是高斯核函数。RBF神经网络只有三层,即输入层、隐藏层、输出层。RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接。当RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。此中,隐含层的感化是把向量从低维度的p映射到高维度的h,这样低维度线性不成分的情况到高维度就可以变得线性可分了,主要就是核函数的思想。这样,网络由输入到输出的映射长短线性的,而网络输出对可调参数而言却又是线性的。网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。RBF神经网络的隐节点采用输入模式与中心向量的距离(如欧式距离)作为函数的自变量,并使用径向基函数(如Gaussian函数)作为激活函数。神经元的输入离径向基函数中心越远,神经元的激活程度就越低(高斯函数)。RBF网络的输出与部门调参数有关,譬如,一个wij值只影响一个yi的输出,RBF神经网络因此具有“局部映射”特性。




PSO中,每个优化问题的解都是搜索空间的一只鸟,我们称之为“粒子”。所有的粒子都有一个被优化的函数决定的适应值,每个粒子还有一个速度决定他们翱翔的标的目的和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解,在每一次迭代中,粒子通过跟踪两个“极值”来更新本身。第一个就是粒子本身所找到的最优解,这个解叫做个体极值。另一个极值是整个种群目前找到的最优解,这个极值是全局机制。此外也可以不用整个种群而只是用此中一部门作为粒子的邻居,那么在所有邻居中的极值就是局部极值。
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个“极值(pbest和gbest)”来更新本身。在找到这两个最优值后,粒子通过下面的公式来更新本身的速度和位置。




对于公式(1):
公式(1)中的第一部门称为记忆项,暗示上次速度大小和标的目的的影响;
公式(1)中的第二部门称为自身认知项,是从当前点指向粒子自身最好点的一个矢量,暗示粒子的动作来源于本身经验的部门;
公式(1)中的第三部门称为群体认知项,是一个从当前点指向种群最好点的矢量,反映了粒子间的协调合作和常识共享。粒子就是通过本身的经验和同伴中最好的经验来决定下一步的运动。


综上所述,尺度PSO算法流程:
初始化一群微粒(群体规模为N),包罗随机位置和速度;
评价每个微粒的适应度;
对每个微粒,将其适应值与其颠末的最好位置pbest作斗劲,如果较好,则将其作为当前的最好位置pbest;
对每个微粒,将其适应值与其颠末的最好位置gbest作斗劲,如果较好,则将其作为当前的最好位置gbest;
按照公式(2)、(3)调整微粒的速度和位置;
未达到结束条件则转到第二步。
迭代终止条件按照具体问题一般选为最大迭代次数Gk或微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。
2.仿真效果预览
matlab2022a仿真成果如下:






3.MATLAB核心法式
  1. V = 0.1*rands(m,n);
  2. BsJ = 0;
  3. %按照初始化的种群计算个体好坏,找出群体最优和个体最优
  4. for s = 1:m
  5.     indivi = pop(s,:);
  6.     [indivi,BsJ] = func_obj(indivi,BsJ);
  7.     Error(s) = BsJ;
  8. end
  9. [OderEr,IndexEr] = sort(Error);
  10. Error;
  11. Errorleast = OderEr(1);
  12. for i = 1:m
  13.     if Errorleast == Error(i)
  14.         gbest = pop(i,:);
  15.         break;
  16.     end
  17. end
  18. ibest = pop;
  19. for kg = 1:G
  20.     kg
  21.     for s = 1:m;
  22. %个体有4%的变异概率        
  23.         for j = 1:n
  24.             for i = 1:m
  25.                 if rand(1)<0.04
  26.                     pop(i,j) = rands(1);
  27.                 end
  28.             end
  29.         end
  30. %r1,r2为粒子群算法参数        
  31.         r1 = rand(1);
  32.         r2 = rand(1);
  33. %个体和速度更新        
  34.         V(s,:) = w*V(s,:) + c1*r1*(ibest(s,:)-pop(s,:)) + c2*r2*(gbest-pop(s,:));
  35.         pop(s,:) = pop(s,:) + 0.3*V(s,:);
  36.         
  37.         for j = 1:3
  38.             if pop(s,j) < MinX(j)
  39.                 pop(s,j) = MinX(j);
  40.             end
  41.             if pop(s,j) > MaxX(j)
  42.                 pop(s,j) = MaxX(j);
  43.             end
  44.         end
  45.         for j = 4:9
  46.             if pop(s,j) < MinX(j)
  47.                 pop(s,j) = MinX(j);
  48.             end
  49.             if pop(s,j) > MaxX(j)
  50.                 pop(s,j) = MaxX(j);
  51.             end
  52.         end
  53.         for j = 10:12
  54.             if pop(s,j) < MinX(j)
  55.                 pop(s,j) = MinX(j);
  56.             end
  57.             if pop(s,j) > MaxX(j)
  58.                 pop(s,j) = MaxX(j);
  59.             end
  60.         end
  61. %求更新后的每个个体适应度值        
  62.         [pop(s,:),BsJ] = func_obj(pop(s,:),BsJ);
  63.         error(s) = BsJ;
  64. %按照适应度值对个体最优和群体最优进行更新        
  65.         if error(s)<Error(s)
  66.             ibest(s,:) = pop(s,:);
  67.             Error(s) = error(s);
  68.         end
  69.         if error(s)<Errorleast
  70.             gbest = pop(s,:);
  71.             Errorleast = error(s);
  72.         end
  73.     end
  74.    
  75.     Best(kg) = Errorleast;
  76. end
  77. plot(Best,&#39;-bs&#39;,...
  78.     &#39;LineWidth&#39;,2,...
  79.     &#39;MarkerSize&#39;,6,...
  80.     &#39;MarkerEdgeColor&#39;,&#39;r&#39;,...
  81.     &#39;MarkerFaceColor&#39;,[0.7,0.7,0.4]);
  82. save net.mat gbest;
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 20:41 , Processed in 0.203270 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表