首页 > 编程语言 >海马优化算法(SHO)优化支持向量机网络原理及MATLAB代码复现

海马优化算法(SHO)优化支持向量机网络原理及MATLAB代码复现

时间:2024-11-19 17:50:02浏览次数:3  
标签:horses 海马 MATLAB Sea new1 优化 向量 SHO

目录

0 引言

1 数学模型

2 优化方式

3 MATLAB代码

3.1 伪代码

3.2 SHO主函数代码

3.3 SHO-SVR、SHO-SVM

0 引言

海马优化算法(Sea-horse optimizer,SHO)是Shijie Zhao等人于2023年提出群智能算法,该算法模拟了海马的运动、捕食和繁殖行为。在前两个阶段,SHO分别模拟了海马的不同运动模式和概率捕食机制。此外由于海马妊娠的独特特点,有利于增加种群多样性。

1 数学模型

SHO的数学模型主要模拟海马的运动、捕食和繁殖行为。其中运动阶段主要分为受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式。捕食策略以一定的概率捕获猎物的成败,繁殖阶段则保持男亲正信息的同时繁殖后代,有利于增加种群多样性。具体模型如下:

1)初始化:SHO为群智能算法,该算法种群初始化为随机生成,具体如下。

式中Xi为第i个个体的海马种群位置,UB,LB为问题维度边界,Dim问题维度,Pop为种群数量,Xeite为精英个体,f为适应度函数。

2)海马的运动:海马的运动主要模拟受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式,前者为海马正跟随螺旋运动向精英精英移动,避免了局部对SHO的过度利用;后者则是利用布朗运动模拟海马的另一个运动长度,以确保其在搜索空间中更好的探索,提高全局搜索性能。

2.1)螺旋运动:该运动中海马正跟随螺旋运动向精英精英移动,采用Levy飞行来模拟海马的运动步长,有利于海马在早期迭代中高概率穿越到其他位置。具体模型如下:

式中levy为莱维飞行分布函数,x = ρ×cos (θ)、y = ρ×sin (θ)和z = ρ×θ分别表示螺旋运动下的坐标(x、y、z)的三维分量,其中ρ = u × e^(θv),uv为螺旋常数。入为0到2随机数,s为固定常数,w和k为0到1之间的随机数,Γ为阶乘。

2.2)布朗运动:海马随海浪变化时的运动,在漂移作用下,利用布朗运动模拟海马的另一个运动长度,以确保其在搜索空间中更好的探索。具体模型如下:

式中l为系数常量,βt为布朗运动的随机游走系数,服从正态分布。

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

式中α为随迭代次数减少系数,t为当前迭代次数,T为最大迭代次数。

4)繁殖行为:根据适合度值将其分为雄性和雌性组。值得强调的是,由于雄性海马负责繁殖,SHO算法将健康值最好的个体的一半作为父亲,另一半作为母亲。这种划分将促进父母之间的良好的遗传特征,以产生下一代,并避免新的解决方案的过度定位。海马角色分配的简明数学表达式为:

式中Xsort为适应度排列的种群位置,r3为0到1的随机数。

2 优化方式

前篇对支持向量机(支持向量机原理及Matlab代码-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述SHO原理介绍,可以将支持向量机的超参数作为海马种群位置,每一个种群位置对应支持向量机的预测值,将这个预测值作为适应度更新海马精英个体及雄雌性,进行算法的运动、捕食及繁殖等社会运动,更新更优的下一代个体位置向量。

3 MATLAB代码

3.1 伪代码

3.2 SHO主函数代码

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-SVR、SHO-SVM

回归模型和分类模型代码复现:(海马优化算法优化支持向量机-CSDN博客

标签:horses,海马,MATLAB,Sea,new1,优化,向量,SHO
From: https://blog.csdn.net/2403_88401503/article/details/143868720

相关文章

  • 非洲秃鹫算法(AVOA)优化支持向量机原理及MATLAB代码复现
    目录0引言1数学模型2优化方式3MATLAB代码3.1伪代码3.2AVOA主函数代码3.3AVOA-SVR,AVOA-SVM0引言非洲秃鹫算法(Africanvulturesoptimizationalgorithm,AVOA)是由BenyaminAbdollahzadeh等人于2021年基于非洲秃鹫的领导者-追随者模型捕食提出的群智能算法,AVOA通......
  • C++编程:通过多线程与协程优化阻塞型任务的调度性能
    文章目录0.引言1.多线程VS多线程+协程1.1示例1:使用传统的多线程进行矩阵乘法1.2.示例2:使用协程优化阻塞型任务3.分析与对比0.引言我们知道:多线程:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。协程:适用于处......
  • 博客园-awescnb插件-geek皮肤优化-logo添加
    ......
  • Shopify开发入门(一)——APP & theme介绍
    什么是Shopify?一个概览,对Shopify运行逻辑的大概的介绍,并且抽象出一个贯穿始终的概念:作为一个Shopify开发者,我们需要为商家提供满足他们的配置并且我们还要实现对应的页面功能!shopify.dev/docsapp:shopify.dev/docs/apps/b…theme:shopify.dev/docs/storef…总结......
  • cmu15545笔记-查询优化(Query Optimization)
    目录概述Heuristics/RulesCost-basedSearchSinglerelationMutiplerelationGenertive/Bottom-UpTransformation/Top-DownNestedsub-queriesDecomposingQueriesExpression/QueriesRewritingStatistics概述数据库系统的执行流程:从优化器到磁盘所设计的步骤:查询......
  • 网格简化-QEM 顶点二次度量的优化
    QEM顶点二次度量的优化理论QEM(QuadricErrorMetrics,四元数误差度量)是一种常用的网格简化技术,它通过计算几何代价来评估边的简化。通过使用QEM,您可以在简化过程中保留重要的几何特性。边折叠的基本思想在QEM中,边折叠的目的是将两个顶点合并成一个新顶点,以减少网格的复杂性......
  • ctf show-web57
    这题相较于55过滤了更多的东西,但是flag在36.php中,并且不需要php,所以我们需要在绕过过滤的同时,构造一个36,这里就要知道linux下的运算$(())是算术扩展,允许你对数值进行加法、减法、乘法、除法等算术运算,并输出结果。$((~$((“”))))表达式解析:$((~$((""))))可以分为几......
  • ctfshow web-75
     由于本题过滤了strlen,没办法使用web72的uaf的方式绕过命令执行的限制连接数据库查询,通过构造一个可以连接数据库的php脚本,来查询数据库内的数据try{  //使用PDO(PHPDataObjects)创建一个新的数据库连接对象,指定DSN、用户名(root)和密码(root)  $dbh=newPDO('my......
  • Oracle AWR 报告指标全解析:深入理解数据库性能优化的关键
    一、引言在Oracle数据库管理与性能优化领域,AWR(AutomaticWorkloadRepository)报告扮演着极为重要的角色。它犹如一位精准的诊断专家,能够对数据库的运行状况进行全面、细致的剖析,为数据库管理员(DBA)提供丰富且关键的信息,助力其深入洞察数据库的性能表现,精准定位潜在问题,并......
  • 跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)
     ......