共生生物搜索算法(SOS)优化BP神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 优化方式

3 Maltab代码

3.1 伪代码

3.2 SOS主函数代码

3.3 SOS-BP

4 视频讲解

0 引言

共生生物搜索算法(Symbiotic Organisms Search,SOS)是Min-Yuan Cheng于2014年基于生物直接共生现象的提出启发式搜索算法,该算法控制参数少,容易实现且稳定性好。

1 数学模型

SOS算法数学模型构建主要包括三种共生现象,分别为互利阶段,共栖阶段和寄生阶段。

1)互利阶段:对生物群进行简单随机初始化后,生物之间开始以下三个共生现象,首先是互利阶段,该阶段模拟生物群中参与者双方都能互利生活现象,例如蜜蜂和花之间的关系,其数学模型见下:

式中Xi为与生态系统先匹配的种群i的位置,Xj为与Xi相匹配的随机种群j的位置,Xbest为最佳的种群位置。BF1和BF2为受益因素。

2)共栖阶段:在自然生物中,共栖生物也存在较多,例如红斑鱼和鲨鱼之间的关系。红斑鱼依附于鲨鱼,吃剩下的食物,因此得到了好处。鲨鱼不受红斑鱼活动的影响,从这种关系中获得的好处很小,其数学模型见下式:

式中Xi和Xj为共栖阶段俩个生物位置,Xi为依附者,当其自身适应度高于Xj时,俩者关系互换。

3)寄生阶段:寄生的一个例子是疟原虫寄生虫,它在人类宿主之间传播。当寄生虫在人体内繁殖时,它的人类宿主患有疟疾,并可能因此死亡。在其他生物中也存在寄生关系,其数学模型见下式:

式中pick为变异体,ub,lb为问题维度边界

2 优化方式

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

3 Maltab代码

3.1 伪代码

3.2 SOS主函数代码

%%参数
%maxFE 最大迭代次数
%ecosize  种群大小
%fitness 适应度
%eco 种群位置
%bound 边界函数
%SYD 适应度函数
%

while FE<maxFE 
    
    for i=1:ecosize 
        
        % 更新最佳s生物体
        [bestFitness,idx]=min(fitness); 
        bestOrganism=eco(idx,:);
        
        % 互惠阶段
            % 随机选择生物i之外的生物j         
            j=i;
            while i==j
                seed=randperm(ecosize); 
                j=seed(1);                  
            end
            
            mutualVector=mean([eco(i,:);eco(j,:)]);%Eq(3)
            BF1=round(1+rand); %随机确定为 1 或 2
            BF2=round(1+rand); %
            
            % 互惠阶段后位置
            ecoNew1=eco(i,:)+rand(1,n).*(bestOrganism-BF1.*mutualVector); %Eq(1)
            ecoNew2=eco(j,:)+rand(1,n).*(bestOrganism-BF2.*mutualVector); %Eq(2)
            
            ecoNew1=bound(ecoNew1,ub,lb); 
            ecoNew2=bound(ecoNew2,ub,lb);
                
            fitnessNew1=SYD(ecoNew1,net);
            net.trainParam.showWindow = 0;
            fitnessNew2=SYD(ecoNew2,net);
            net.trainParam.showWindow = 0;
            
            if fitnessNew1<fitness(i)
                fitness(i)=fitnessNew1;
                eco(i,:)=ecoNew1;
            end

            if fitnessNew2<fitness(j)
               fitness(j)=fitnessNew2;
               eco(j,:)=ecoNew2;
            end
            
           
            % 共生阶段 
            % 随机选择生物 i 之外的生物j
            j=i;
            while i==j
                seed=randperm(ecosize); 
                j=seed(1);                  
            end
            
   
            ecoNew1=eco(i,:)+(rand(1,n)*2-1).*(bestOrganism-eco(j,:));%Eq(4)
            ecoNew1=bound(ecoNew1,ub,lb);

            fitnessNew1=SYD(ecoNew1,net);
            net.trainParam.showWindow = 0;

            if fitnessNew1<fitness(i)
                fitness(i)=fitnessNew1;
                eco(i,:)=ecoNew1;
            end            
            
            % 寄生阶段
            j=i;
            while i==j
                seed=randperm(ecosize);
                j=seed(1);
            end   

            parasiteVector=eco(i,:);
            seed=randperm(n);           
            pick=seed(1:ceil(rand*n)); 
            parasiteVector(:,pick)=rand(1,length(pick)).*(ub(pick)-lb(pick))+lb(pick);
            fitnessParasite=SYD(parasiteVector,net);
            net.trainParam.showWindow = 0;
        

            if fitnessParasite < fitness(j)
                fitness(j)=fitnessParasite;
                eco(j,:)=parasiteVector;
            end     
    end 
    FE=FE+1;
    Convergence_curve(FE) = bestFitness;
end 

3.3 SOS-BP

1)单输出回归预测:单输出回归预测:共生生物搜索算法优化BP神经网络模型(SOS-BP)

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

3)分类模型:私信

4)时间序列:私信

4 视频讲解

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

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值