蜘蛛猴優化算法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學習之家

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

4
1
1