海马算法(SHO)优化BP神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 优化方式

3 Maltab代码

3.1 伪代码

3.2 SHO主函数代码

3.3 SHO-BP

4 视频讲解

0 引言

海马算法(Sea Horse Optimizer,SHO)是Shijie Zhao于2023年基于自然界中海马的运动、捕食和繁殖行为提出的群体智能算法。SHO算法两个阶段,SHO分别模拟了海马的不同运动模式和概率捕食机制。此外算法设计为在保持雌雄较好信息的同时繁殖后代,有利于增加种群多样性。

1 数学模型

SOS数学模型主要对海马的运动、捕食和繁殖进行构建模型。而海马的运动模式分为受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式。对于捕食策略模拟了海马以一定的概率捕获猎物的成败。繁殖阶段保持正信息的情况下进行后代繁殖。

1)初始化:SHO作为群智能算法,也是从总体初始化开始,采用随机参数进行产生种群位置。

式中Xi为海马种群位置,pop为种群数量,Dim为问题维度,LB,UB为问题维度边界,Xelite为精英海马个体,为适应度最小海马,f(*)为海马*对应的适应度。

2)海马的运动行为:海马运动行为主要有俩种:受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式,数学模型分别以加入莱维飞行策略和布朗运动来模拟,其数学模型如下:

2.1)受海洋涡旋作用影响的浮动螺旋模式:式中Levy为莱维飞行分布函数,s为固定常数0.001,w,k为0到1的随机数,入为0到2的随机数,Γ为阶乘,xyz为三维搜索向量,分别为x=ρ×cos(θ), y=ρ×sin(θ) 和z=ρ×θ。

2.2)沿当前波的漂移模式:式中l为常数系数0.05,β为布朗运动的随机游走系数,符合正态分布。

下图是二者运动趋势:

3)海马捕食行为:海马捕食浮游动物和小型甲壳类动物有两种结果:成功和失败。考虑到海马成功捕获食物的概率超过90%,我们设计了SHO的随机数r2来区分这两个结果,如下:

式中α随迭代而线性减少,以调整海马的移动步长,t为当前迭代,T为最大迭代,r2为0到1的随机数

4)海马的繁殖行为:海马通过适合度值将其分为男性和女性组。雄性和雌性被随机交配以产生新的后代,如下:

2 优化方式

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

3 Maltab代码

3.1 伪代码

3.2 SHO主函数代码

%% 参数
% initialization 初始化函数
% pop 种群大小
% Dim 问题维度
% UB,LB 问题维度边界
% Max_iter 最大迭代次数
% levy 飞行策略函数
% SYD 适应度函数


% 初始化
Sea_horses=initialization(pop,Dim,UB,LB);%海马种群
Sea_horsesFitness = zeros(1,pop);

fitness_history=zeros(pop,Max_iter);
population_history=zeros(pop,Dim,Max_iter);

Convergence_curve=zeros(1,Max_iter);
Trajectories=zeros(pop,Max_iter);

%计算初始海马的体能(适应度)
for i=1:pop
    Sea_horsesFitness(1,i)=SYD(Sea_horses(i,:),net);
    net.trainParam.showWindow = 0;

    fitness_history(i,1)=Sea_horsesFitness(1,i);
    population_history(i,:,1)=Sea_horses(i,:);

    Trajectories(:,1)=Sea_horses(:,1);
end

%找出初始种群中最优秀的海马
[~,sorted_indexes]=sort(Sea_horsesFitness);
Position=Sea_horses(sorted_indexes(1),:);
Fitness = Sea_horsesFitness(sorted_indexes(1));
Convergence_curve(1)=Fitness;

% 参数
t=1;
u=0.05;%螺旋常数 
v=0.05;%螺旋常数 
l=0.05;%常数系数

while t<Max_iter+1
    beta=randn(pop,Dim);%布朗运动的随机游走系数
    Elite=repmat(Position,pop,1);% 精英海马

    %海马的运动行为
    r1=randn(1,pop);
    omega = 1.5; 
    Step_length=levy(pop,Dim,omega);%levy飞行模拟海马的运动步长
    for i=1:pop
        for j=1:Dim
            if r1(i)>0  
                r=rand();
                theta=r*2*pi;%[0,2π]之间的随机值
                row=u*exp(theta*v);%螺旋常数u,v定义的长度
                x=row*cos(theta);%
                y=row*sin(theta);%
                z=row*theta;%三维分量
                %螺旋运动模式
                Sea_horses_new1(i,j)=Sea_horses(i,j)+Step_length(i,j)*((Elite(i,j)-Sea_horses(i,j)).*x.*y.*z+Elite(i,j));%Eq.(4)
            else
                %布朗运动模式
                Sea_horses_new1(i,j)=Sea_horses(i,j)+rand()*l*beta(i,j)*(Sea_horses(i,j)-beta(i,j)* Elite(i,j));%Eq.(7)
            end
        end
    end

     for i=1:pop

        %边界检测
        Tp=Sea_horses_new1(i,:)>UB;
        Tm=Sea_horses_new1(i,:)<LB;
        Sea_horses_new1(i,:)=(Sea_horses_new1(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;    
     end

    % 海马的捕食行为,90%成功率
    for i=1:pop
        for j=1:Dim
            r1=rand();
            r2(i)=rand();
            alpha=(1-t/Max_iter)^(2*t/Max_iter);%Eq(11)随着迭代而线性减小

            if r2(i)>0.1
                Sea_horses_new2(i,j)=alpha*(Elite(i,j)-rand()*Sea_horses_new1(i,j))+(1-alpha)*Elite(i,j);  %Eq.(10)
            else
                Sea_horses_new2(i,j)=(1-alpha)*(Sea_horses_new1(i,j)-rand()*Elite(i,j))+alpha*Sea_horses_new1(i,j);  %Eq.(10)
            end
        end
    end

    for i=1:pop
        %边界检查
        Tp=Sea_horses_new2(i,:)>UB;
        Tm=Sea_horses_new2(i,:)<LB;
        Sea_horses_new2(i,:)=(Sea_horses_new2(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;
        %计算所有海马的体能
        Sea_horsesFitness1(1,i)=SYD(Sea_horses_new2(i,:),net);
        net.trainParam.showWindow = 0;
    end

    [~,index]=sort(Sea_horsesFitness1);
    
    %海马的繁殖行为
    Sea_horses_father=Sea_horses_new2(index(1:pop/2),:);    %Eq.(12)雄性
    Sea_horses_mother=Sea_horses_new2(index(pop/2+1:pop),:);  %Eq.(12)雌性

    for k=1:pop/2
        r3=rand();
        Si(k,:)=r3*Sea_horses_father(k,:)+(1-r3)*Sea_horses_mother(k,:);  %Eq.(13)
    end

    Sea_horses_offspring=Si;%后代

    for i=1:pop*0.5
        %边界检查
        Tp=Sea_horses_offspring(i,:)>UB;
        Tm=Sea_horses_offspring(i,:)<LB;
        Sea_horses_offspring(i,:)=(Sea_horses_offspring(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;
        
        Sea_horsesFitness2(1,i)=SYD(Sea_horses_offspring(i,:),net);
        net.trainParam.showWindow = 0;
    end

    %海马对比
    Sea_horsesFitness=[Sea_horsesFitness1,Sea_horsesFitness2];
    Sea_horses_new=[Sea_horses_new2;Sea_horses_offspring];
    
    [~,sorted_indexes]=sort(Sea_horsesFitness);
    
    Sea_horses=Sea_horses_new(sorted_indexes(1:pop),:);
    
    SortfitbestN = Sea_horsesFitness(sorted_indexes(1:pop));
    fitness_history(:,t)=SortfitbestN';
    population_history(:,:,t)=Sea_horses;
    Trajectories(:,t)=Sea_horses(:,1);

    %更新最优解
    if SortfitbestN(1)<Fitness
        Position=Sea_horses(1,:);
        Fitness=SortfitbestN(1);
    end
    
    Convergence_curve(t)=Fitness;
    t = t + 1;
    
    
end

3.3 SHO-BP

1)单输出回归预测:单输出回归预测:海马算法优化BP神经网络模型(SHO-BP)

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

3)分类模型:私信

4)时间序列:私信

4 视频讲解

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

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
斑点鬣狗优化算法(Spotted Hyena Optimization,简称SHO)是一种模拟斑点鬣狗狩猎策略的优化算法,它结合了搜索的灵活性和强度。当应用于基于BP(Back Propagation,反向传播)神经网络的故障识别时,其优化过程可以分为以下几个步骤: 1. **初始化**:创建一个包含随机解(即神经网络权重)的群体,这些解代表可能的网络结构。 2. **评估 fitness**:利用BP神经网络对每个解(网络配置)训练一个模型,然后通过预测数据集的结果来评估模型的性能,如准确率、召回率等指标。 3. **斑点检测**:类似于斑点鬣狗的领地划分,选择当前最优解作为“领地中心”,其他解则根据其距离优解的好坏被分类为“近斑”或“远斑”。 4. **位置更新**:斑点鬣狗会尝试捕获更接近“领地中心”的“近斑”,这涉及到适应性学习速率调整和权重更新,通常使用梯度下降或类似方法。 5. **突变与扩散**:部分“远斑”可能会尝试随机变异,生成新的解决方案,同时允许一些程度的扩散,增加算法的探索能力。 6. **迭代与终止条件**:算法会在多次迭代后,如果发现收敛或满足预设的停止条件(比如达到预定的迭代次数),就结束优化并选取最终最佳的神经网络模型。 SHO-BP 故障识别的数据分类流程是这样的:首先将原始设备的运行数据转化为可用于神经网络训练的特征表示;然后用 SHO 算法优化神经网络的权值和偏置,使其能有效地将正常状态与故障状态区分开;最后,用训练好的神经网络对新数据进行预测,确定是否存在故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值