海洋捕食者算法(MPA)优化BP神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 优化方式

3 Matlab代码

3.1 伪代码

3.2 MPA主函数代码

3.3 MPA-BP

4 视频讲解

0 引言

海洋捕食者算法(Marine Predators Algorithm,MPA)是Afshin Faramarzi于2020年基于自然启发提出的元启发式算法,该算法主要模拟海洋捕食者中广泛的觅食策略,以及捕食者与猎物之间相互作用的最佳相遇率策略。

1 数学模型

MPA算法模拟海洋捕食者觅食策略,即利用布朗游走和Levy游走来选择最佳觅食策略,同时利用涡流等策略来改变海洋捕食者的行为,具体数学模型如下:

1)初始化:MPA是一种基于种群的方法,其中初始解均匀分布在搜索空间上,故采用随机分布函数生成初始解:

式中X为捕食者(猎物)的种群位置,n为种群数,d为问题维度,其中Elite为精英种群,代表捕食能力强的生物种群,Prey为与捕食者相同矩阵的猎物。

2)MPA优化过程:海洋生物捕食者在捕食过程中,主要分为三个部分,其一为捕食者速度比猎物快、二者速度相同和捕食者速度比猎物慢,对着三种情况下捕食者进行捕食的活动进行建模。

2.1)当捕食者速度比猎物速度快时:MAP进行勘探策略,其数学模型如下:

式中stepsister为移动步长,RB为正态分布的布朗游走随机向量;P为常数项0.5,R为0到1的均匀随机序列

2.2)当捕食者和猎物都以相同的速度移动时:猎物基于Levy游走策略移动,捕食者基于布朗游走进行勘探,并且开始由勘探策略转向开发策略。开发和勘探策略的数学模型见下:

中(13)为开发策略,RL为Levy分布的随机向量,其式如下,CF为控制捕食者移动步长的自适应参数

2.3)当捕食者比猎物移动得慢时:捕食者基于Levy随机游走进行开发策略,其数学模型如下:

3)涡流的形成和FADs的效应:导致海洋捕食者行为变化的问题是环境问题,如涡流形成或鱼类聚集装置(FADs)效应,这一策略会使得一部分捕食者跳离更远的地域捕食,从而避开局部最值。其数学模型如下:

式中FADs为影响概率。常取0.2,U为二进制向量,r为0到1的随机向量,r1和r2为随机猎物矩阵。

2 优化方式

前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述MAP原理介绍,可以将BP神经网络权值和阈值作为海洋捕食者种群位置,每一个种群对应BP神经网络的预测值,将这个预测值作为适应度进行上述海洋捕食者和猎物之间运动策略,更新优势解。

3 Matlab代码

3.1 伪代码

3.2 MPA主函数代码

%% 参数
% Max_iter    最大迭代次数
% Prey    猎物种群
% ub,lb 问题维度边界
% SYD 适应度函数
% Top_predator_pos  精英捕食者位置
% levy 飞行策略
% 

while Iter<Max_iter    
     %探测顶级捕食者   
 for i=1:size(Prey,1)  
        
    Flag4ub=Prey(i,:)>ub;
    Flag4lb=Prey(i,:)<lb;    
    Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                    
        
    fitness(i,1)=SYD(Prey(i,:),net);
    net.trainParam.showWindow = 0; 

     if fitness(i,1)<Top_predator_fit 
       Top_predator_fit=fitness(i,1); 
       Top_predator_pos=Prey(i,:);
     end          
 end
     
     %海洋记忆
    
 if Iter==0
   fit_old=fitness;
   Prey_old=Prey;
 end
     
  Inx=(fit_old<fitness);
  Indx=repmat(Inx,1,dim);
  Prey=Indx.*Prey_old+~Indx.*Prey;
  fitness=Inx.*fit_old+~Inx.*fitness;
        
  fit_old=fitness;    Prey_old=Prey;

 %% 2.优化阶段
     
 Elite=repmat(Top_predator_pos,SearchAgents_no,1);  %(Eq. 10) 
 CF=(1-Iter/Max_iter)^(2*Iter/Max_iter);
                             
 RL=0.05*levy(SearchAgents_no,dim,1.5);   %模拟莱维运动的随机数向量
 RB=randn(SearchAgents_no,dim);          %布朗运动随机数向量
           
  for i=1:size(Prey,1)
     for j=1:size(Prey,2)        
       R=rand();
          %1.等待策略 (Eq.12)
       if Iter<Max_iter/3 
          stepsize(i,j)=RB(i,j)*(Elite(i,j)-RB(i,j)*Prey(i,j));                    
          Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); 
             
          %2.算法从探索开始向开发转变(Eqs. 13 & 14)
       elseif Iter>Max_iter/3 && Iter<2*Max_iter/3 
          
         if i>size(Prey,1)/2
            stepsize(i,j)=RB(i,j)*(RB(i,j)*Elite(i,j)-Prey(i,j));
            Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); 
         else
            stepsize(i,j)=RL(i,j)*(Elite(i,j)-RL(i,j)*Prey(i,j));                     
            Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j);  
         end  
         
         %3.算法寻优的最后时段 (Eq. 15)
       else 
           
           stepsize(i,j)=RL(i,j)*(RL(i,j)*Elite(i,j)-Prey(i,j)); 
           Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j);  
    
       end  
      end                                         
  end    
        
     %更新顶级捕食者
  for i=1:size(Prey,1)  
        
    Flag4ub=Prey(i,:)>ub;  
    Flag4lb=Prey(i,:)<lb;  
    Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
  
    fitness(i,1)=SYD(Prey(i,:),net);
    net.trainParam.showWindow = 0; 
        
      if fitness(i,1)<Top_predator_fit 
         Top_predator_fit=fitness(i,1);
         Top_predator_pos=Prey(i,:);
      end     
  end
        
     %海洋记忆
    
 if Iter==0
    fit_old=fitness;    Prey_old=Prey;
 end
     
    Inx=(fit_old<fitness);
    Indx=repmat(Inx,1,dim);
    Prey=Indx.*Prey_old+~Indx.*Prey;
    fitness=Inx.*fit_old+~Inx.*fitness;
        
    fit_old=fitness;    Prey_old=Prey;

     %% 3.涡流形成或鱼群聚集装置(FADs)效应(Eq 16)
                             
  if rand()<FADs
     U=rand(SearchAgents_no,dim)<FADs;                                                                                              
     Prey=Prey+CF*((Xmin+rand(SearchAgents_no,dim).*(Xmax-Xmin)).*U);

  else
     r=rand();  Rs=size(Prey,1);
     stepsize=(FADs*(1-r)+r)*(Prey(randperm(Rs),:)-Prey(randperm(Rs),:));
     Prey=Prey+stepsize;
  end
                                                        
  Iter=Iter+1;  
  Convergence_curve(Iter)=Top_predator_fit; 
       
end

3.3 MPA-BP

1)单输出回归预测:单输出回归预测:海洋捕食者算法优化BP神经网络模型(MPA-BP)

2)多输出回归预测:私信

3)分类模型:私信

4)随机序列:私信

4 视频讲解

B站搜索:‘ 不想学习的陈成 ’

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
海洋捕食者算法(Oceanic Predator Algorithm, OPA)是一种生物启发的优化算法,它模拟了海中掠食者的觅食策略,如鲨鱼搜索猎物的行为。当应用于机器学习领域,特别是在训练神经网络模型时,如BP(Back Propagation,反向传播)神经网络,OPA可以作为一种优化手段来调整BP神经网络的权重和偏置。 MPA-BP(Marine Predator Algorithm with Back Propagation)结合了这两种技术,其基本原理是: 1. **初始化**:设置BP神经网络结构,初始化权重和阈值,同时运用OPA算法随机生成一组初始解,即神经元权重的候选位置。 2. **适应度评估**:通过输入样本数据,使用BP神经网络进行预测,并计算预测结果与实际标签之间的误差。误差越小,表明适应度越高。 3. **捕食者行为**:依据OPA算法,每个“鲨鱼”(权重)根据自身的适应度更新其位置。更强的“鲨鱼”(更接近最优解的权重)会捕食较弱的“猎物”(较差的权重),并尝试模仿它们的位置,这类似于权重的迁移过程。 4. **学习与优化**:通过反向传播算法,根据预测错误调整所有鲨鱼的权重,使神经网络的性能逐渐提升。 5. **循环迭代**:不断重复上述步骤,直到满足停止条件(例如达到预设的迭代次数或达到一定的精度),或者捕食者找不到更好的猎物,算法收敛。 6. **故障识别和数据分类**:在应用到故障识别和数据分类时,MPA-BP可以利用优化后的BP神经网络对新的输入进行预测,判断其属于哪一类,以此来进行故障的诊断或数据的分类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值