共生生物搜索算法(SOS)优化长短期记忆神经网络原理及MATLAB代码复现

目录

0 引言

1 数学模型

2 优化方式

3 MATLAB代码

3.1 伪代码

3.2 SOS主函数代码

3.3 SOS-LSTM

0 引言

共生生物搜索算法(Symbiotic Organisms Search,SOS)是由学者Cheng等人于2013基于生态系统生物之间社会行为提出元启发式智能算法。该算法模拟了生物体在生态系统中互惠共生、共栖共生及寄生的社会行为,以此平衡算法的全局搜索和局部开发性能。

1 数学模型

SOS算法的数学建模对生物体之间的互惠共生、竞争关系及寄生关系进行模型构建,具体数学模型如下:

1)互惠共生:在对算法初始化随机生成种群后,互惠共生的是自然界中一个常见例子,例如是蜜蜂和花之间的关系,二者都能从中获利。在SOS算法中,仍以采用俩个X个体进行模拟该算法,具体模型如下:

式中X(*)为第*个生物个体,BF1和BF2的是趋势因子,即互惠共生趋势于最佳个体和互惠个体的趋势因子。

2)共栖阶段:共栖是模拟生物体物体依附共生关系,例如雷摩鱼依附于鲨鱼,吃剩下的食物,因此得到了好处。鲨鱼不受雷摩鱼活动的影响。在SOS算法中从生态系统中随机选择一个生物体Xj与Xi相互作用,来模拟共栖关系。

3)寄生阶段:生态环境中寄生例子例如疟原虫寄生虫,当寄生虫在人体内繁殖繁殖时,它的人类宿主患有疟疾,并可能因此死亡。在SOS中,生物体Xi通过创造一种名为“寄生虫”,利用随机向量对自身进行复制和修改, 生成变异向量,对比二者之间适应度函数,来模拟寄生虫和寄生个体优劣势情况, 其表达式为:

式中pick为随机选取的寄生向量,lb,ub为问题维度边界。

2 优化方式

前篇对长短期记忆神经网络(长短期记忆神经网络原理及Matlab代码复现-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述SOS原理介绍,可以将长短期记忆神经网络权值和阈值作为生态物体个体位置,每一个物体位置对应长短期记忆神经网络的预测值,将这个预测值作为适应度来模拟生态系统中互惠阶段、共栖阶段及寄生阶段,进一步更新更优Xbest个体。

3 MATLAB代码

3.1 伪代码

3.2 SOS主函数代码

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-LSTM

时间序列模型的代码:(

共生生物搜索算法优化长短期记忆神经网络-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值