改进的蝙蝠算法(FLFBA)优化BP神经网络原理及MATLAB代码复现

目录

0 引言

1 数学模型

2 模型性能可视化图

3 MATLAB代码

3.1 伪代码

3.2 主函数代码

3.3 FLFBA-BP

3.4 引用文献

0 引言

为了提高BA算法的全局搜索能力和局部开发性能,Redouane Boudjemaa等人于2020年提出改进的蝙蝠算法(FLLBA)。该算法主要提出了分数阶Levy飞行蝙蝠算法,提高BA算法全局性能,同时引入DE等算子提高算法局部能力。

1 数学模型

FLFBA是在BA基础上引入分数阶、DE算子和分数阶飞行策略,综合提高BA性能,其数学模型如下:

1)BA的数学模型:见主页上篇。

2)定义分数阶微积分:采用分数阶采用黎曼-刘维尔分数阶导数

式中Γ(x)是伽马函数,m−1≤α < m,右边是按点方向定义在(0,+∞)上。

3)改进蝙蝠初始速度更新:基于对分数阶定义,速度项是根据分数阶微分公式计算,其数学模型如下:

式中Sk是用方程(17)递归计算得到的,o是在整数1和整数10之间随机选择的分数阶导数的阶数。

4) 定义飞行levy策略:研究发现,不同的动物和昆虫在寻找猎物或成群飞行时,遵循着Levy的飞行行为更有利算法随机性能,其数学模型如下:

式中ζ是一个随机的步长,u,v为飞行因子,满足正态分布,β为常数项,Γ为阶乘函数,式(18)飞行策略改进蝙蝠位置更新。

5)DE策略改进:为了克服BA在局部最优值上的陷阱,提出了一个基于DE的改进版本来提高局部和全局层次上有更好的搜索能力,最值更新其速度:

式中其中x(t,q)是从总体中随机选择的解,ξ1和ξ2是[0,1]范围内的学习因子。ξinit为初始值、T为最大迭代次数,t实际迭代次数,V为分数阶改进后速度更新。

6)分数阶和飞行策略混合改进:尽管BA具有简单性和灵活性的优势,但仍然缺乏逃避局部最优的机制。因此提出微分进化和极限飞行的创新蝙蝠算法,更新蝙蝠回声定位后的位置。

式中Ai为第i个相关响度值,A¯为响度向量的平均值。

7)更新下一轮种群:基于改进策略和基础BA得到种群位置进行对比适应度函数,得到下一轮迭代的位置向量。

2 模型性能可视化图

FLFBA-BP和BA-BP的预测模型性能可视化图如下:数据集来源UCI回归数据集。

1)精度指标:

2)寻优指标:

3 MATLAB代码

3.1 伪代码

3.2 主函数代码

for iteration = 1 : M
    
    % 迭代参数
    freq = rand(pop,dim).* (freqMax-freqMin)+freqMin;%Eq(2)
    w = (wMax-wMin)*(M-iteration)/(1.0*M)+wMin; %惯性重量
    xsi1 = 1+((xsi_init-1)*((M-iteration)/M)^n);%Eq(23)学习因子
    xsi2 = 1-xsi1;%Eq(23)
    meanA = mean(A);
    meanP = mean(pX);

    for i = 1 : pop

        if rand < 0.5 %0.5
            q1 = randi([1 pop]);
            q2 = randi([1 pop]);
            X1 = pX(q1,:);
            X2 = pX(q2,:);
            newX=fm_BA(pX(i,:),X1,X2); % Eq(24-25)
            fnew= SYD(newX',net);
            net.trainParam.showCommandLine = 0;
            [pX(i,:),pFit(i)]=select_fit(pX(i,:),newX,fnew,pFit(i));

            % Levy飞行轨迹 
            u=randn(1,dim)*sigma;
            VV=randn(1,dim);
            step=u./abs(VV).^(1/beta);
            stepsize = 0.01*step.*randn(1,dim); %Eq(26)   
            
            x(i,:)=pX(i,:)+stepsize.*abs(meanP-x(i,:));%Eq(26)           
        
        else   % 使用分数导数
            t1 = randi([1 10]);
            q = randi([1 pop]);
            while q== i
                q = randi([1 pop]);
            end

            % 速度项是根据分数阶微分公式计算
            Vh = reshape(Vhist(:,i,:),10,dim); 
            vout = fra_dif(alfa,Vh,t1); %Eq(27)速度项
            
            % DE改进提高随机性
            v(i,:) = w.* vout + freq(i,:) .* xsi1 .*(bestX-x(i,:))+...
                freq(i,:).* xsi2 .*(pX(i,:)-x(q,:)); %Eq(22) 
            v(i,:) = Bounds(v(i,:),vLb,vUb);
            x(i,:) = x(i,:) + v(i,:);
            
        end
        
        % 局部搜索和Levy飞行结合
        if rand > r(i)
            % 另外一种Levy飞行轨迹 
            u=randn(1,dim)*sigma;
            VV=randn(1,dim);
            step=u./abs(VV).^(1/beta);
            stepsize = 0.01*step;
            
            rA = stepsize .*randn(1,dim).*(abs(A(i)-meanA)+realmin);%Eq(31)
            x(i,:) = bestX .* (1+rA); %Eq(32)
        end
        x(i,:) = Bounds(x(i,:),lb,ub);
        fit(i) = SYD(x(i,:)',net);
        net.trainParam.showCommandLine = 0;
    end
    
 % 更新个人最优适应度值和全局最优个体
    
    for i = 1 : pop
        if fit(i) < pFit(i)
            pFit(i) = fit(i);
            pX(i,:) = x(i,:);
        end
        
        if(pFit(i)< fMin &&rand <A(i))
            fMin = pFit(i);
            bestX = pX(i,:);
            A(i) = A(i)*alpha;%Eq(6)
            r(i) = r0(i)*(1-exp(-gama*iteration));%Eq(7)
        end
    end

    Vhist(2:10,:,:) = Vhist(1:9,:,:);
    Vhist(1,:,:) = v;
    
    fbest = fMin; 
    FunMin(iteration) = fMin;
end

3.3 FLFBA-BP

单输出回归预测模型、多输出回归预测模型、分类模型和时间序列模型的代码:

改进的蝙蝠算法优化BP神经网络(FLFBA-BP)-CSDN博客

3.4 引用文献

Boudjemaa R, Oliva D, Ouaar F. Fractional Lévy flight bat algorithm for global optimisation[J]. International Journal of Bio-Inspired Computation, 2020, 15(2): 100-112.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值