蜘蛛猴优化算法MATLAB实战

    今天给大家分享蜘蛛猴优化算法MATLAB实战,主要从算法原理和代码实战展开。需要了解更多算法代码的,可以点击文章左下角的阅读全文,进行获取哦~需要了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦,下一期分享的内容就是你想了解的内容~


一、算法原理

    蜘蛛猴优化算法(Spider Monkey Optimization,SMO) 是通过模拟蜘蛛猴基于裂变-融合社会机制进行觅食的社会行为而衍生的一种算法。该算法的优点在于敏感参数少,鲁棒性强且具有良好的全局收敛性。蜘蛛猴优化算法主要包括 以下几个阶段:

(1)种群初始化

    通过下式初始化产生 M 只蜘蛛猴:

蜘蛛猴优化算法MATLAB实战的图1

(2) 局部领导阶段

     局部领导阶段位于种群初始化之后,基于当地领导者和个体成员的经验调整新的位置。通过使用适应度函数比较新位置和当前位置来进行贪婪选择。

蜘蛛猴优化算法MATLAB实战的图2

(3)  全局领导阶段

    全局领导者阶段基于全局领导者和局部组成员的经验,利用式(4-18)修改自 己的位置

蜘蛛猴优化算法MATLAB实战的图3

(4)全局领导学习阶段
    在该阶段,通过贪婪选择算法更新全局领导者,即在每个阶段使种群中的最优解,即当前蜘蛛猴在所选种群中具有高度拟合解的位置,并标记为新生成的全 局领导者位置。进一步,无论是否更新全球领导者位置,全局限制次数阈值均增加 1。
(5) 局部领导学习阶段 
    在该阶段,采用与全局领导学习阶段相同的策略更新局部领导者位置。局部限制次数阈值由于本地领导者更新后的位置与之前位置的比较而增量为 1。 
(6) 局部领导决策阶段 

    学习阶段结束后,对任一局部领导者位置的更新进行决策。如果没有更新到局部限制次数阈值,则组内所有成员通过随机初始化或基于全局领导者和局部领导者经验来更新自己的位置:

蜘蛛猴优化算法MATLAB实战的图4

(7)全局领导决策阶段

    在局部领导决策阶段之后,如果全局领导者的位置没有更新到特定的迭代值,则根据全局领导者的决策将种群划分为更小的组。

     蜘蛛猴优化算法的算法流程图如下图所示。

蜘蛛猴优化算法MATLAB实战的图5

二、代码实战

clc;clear;close all;
%% TARGET EQUATION% ((ABS(X)-20)^2+(Y)^2)  -100<X<100   -100<Y<100
%% MONKEY DEFINITIONempty_particle.Position=[];empty_particle.Cost=[];empty_particle.LimitCount=[];
%% GENERAL CONFIGURATIONconfig;confg = repmat(empty_config,1,1);confg.VarMin = [-100,-100];confg.VarMax=[100,100];confg.nVar = 2;confg.nPop = 50;confg.nGrp = 1;confg.MaxGrps = 5;confg.MaxIt=2000;confg.LocalLimitCount = 50;confg.GlobalLimitCount = 150;%confg.LocalLimitCount = 30;%confg.GlobalLimitCount = 50;confg.PR = 0.1;confg.grpSize=ceil(confg.nPop/confg.nGrp);
%% SMO
SM = repmat(empty_particle,confg.nPop,1);LL = repmat(empty_particle,confg.nPop,1);GL = repmat(empty_particle,1,1);SM = Initialize(SM,confg);GL.Cost=Inf;[LL,GL] = SetInitialLeaders(SM,GL,LL,confg);
for run=1:1        for it=1:confg.MaxIt                SM = LocalLeaderPhase(SM,LL,confg);        SM = GlobalLeaderPhase(SM,GL,confg);        LL = LocalLeaderLearningPhase(SM,LL,confg);        GL = GlobalLeaderLearningPhase(GL,LL,confg);        [SM,LL] = LocalLeaderDecisionPhase(SM,GL,LL,confg);        [GL,LL,confg] = GlobalLeaderDecisionPhase(SM,GL,LL,confg);            end    endfprintf('Iteration=%d Cost=%f Position=(%f %f)\n',it,GL.Cost,GL.Position(1),GL.Position(2));plotData(SM,GL,LL,confg);

  

function f = CostFunction( VAL )%UNTITLED4 Summary of this function goes here%   Detailed explanation goes here
   x=VAL(1);    y=VAL(2);    %f = x^4-4*x^3-2*x^2+5*x+9+y^2-y;    f=(abs(x)-20)^2+y^2;end

   实验结果:

蜘蛛猴优化算法MATLAB实战的图6

文章来源:matlab学习之家

(1条)
默认 最新
赞👍
评论 点赞
点赞 4 评论 1 收藏 1
关注