✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

针对元启发算法中麻雀搜索算法(SSA)的早熟收敛,易陷入局部最优,全局搜索性差等问题进行研究,提出一种自适应螺旋飞行麻雀搜索算法(ASFSSA).

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_搜索算法

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_搜索算法_02

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_计算机应用_03

⛄ 部分代码

function [fMin , bestX,Convergence_curve ] = SSA(pop, M,c,d,dim,fobj  )

   P_percent = 0.2;    % The population size of producers accounts for "P_percent" percent of the total population size       

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pNum = round( pop *  P_percent );    % The population size of the producers   

lb= c.*ones( 1,dim );    % Lower limit/bounds/     a vector

ub= d.*ones( 1,dim );    % Upper limit/bounds/     a vector

%Initialization

for i = 1 : pop

    x( i, : ) = lb + (ub - lb) .* rand( 1, dim );  

    fit( i ) = fobj( x( i, : ) ) ;                       

end

pFit = fit;                      

pX = x;                            % The individual's best position corresponding to the pFit

[ fMin, bestI ] = min( fit );      % fMin denotes the global optimum fitness value

bestX = x( bestI, : );             % bestX denotes the global optimum position corresponding to fMin

 % Start updating the solutions.

for t = 1 : M    

  [ ans, sortIndex ] = sort( pFit );% Sort.

  [fmax,B]=max( pFit );

   worse= x(B,:);  

   r2=rand(1);

if(r2<0.8)

    for i = 1 : pNum                                                   % Equation (3)

         r1=rand(1);

        x( sortIndex( i ), : ) = pX( sortIndex( i ), : )*exp(-(i)/(r1*M));

        x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );

        fit( sortIndex( i ) ) = fobj( x( sortIndex( i ), : ) );   

    end

  else

  for i = 1 : pNum   

  x( sortIndex( i ), : ) = pX( sortIndex( i ), : )+randn(1)*ones(1,dim);

  x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );

  fit( sortIndex( i ) ) = fobj( x( sortIndex( i ), : ) );

  end

end

 [ fMMin, bestII ] = min( fit );      

  bestXX = x( bestII, : );            

   for i = ( pNum + 1 ) : pop                     % Equation (4)

         A=floor(rand(1,dim)*2)*2-1;

          if( i>(pop/2))

           x( sortIndex(i ), : )=randn(1)*exp((worse-pX( sortIndex( i ), : ))/(i)^2);

          else

        x( sortIndex( i ), : )=bestXX+(abs(( pX( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);  

         end  

        x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );

        fit( sortIndex( i ) ) = fobj( x( sortIndex( i ), : ) );

   end

  c=randperm(numel(sortIndex));

   b=sortIndex(c(1:20));

    for j =  1  : length(b)      % Equation (5)

    if( pFit( sortIndex( b(j) ) )>(fMin) )

        x( sortIndex( b(j) ), : )=bestX+(randn(1,dim)).*(abs(( pX( sortIndex( b(j) ), : ) -bestX)));

        else

        x( sortIndex( b(j) ), : ) =pX( sortIndex( b(j) ), : )+(2*rand(1)-1)*(abs(pX( sortIndex( b(j) ), : )-worse))/ ( pFit( sortIndex( b(j) ) )-fmax+1e-50);

          end

        x( sortIndex(b(j) ), : ) = Bounds( x( sortIndex(b(j) ), : ), lb, ub );

       fit( sortIndex( b(j) ) ) = fobj( x( sortIndex( b(j) ), : ) );

 end

    for i = 1 : pop 

        if ( fit( i ) < pFit( i ) )

            pFit( i ) = fit( i );

            pX( i, : ) = x( i, : );

        end

        if( pFit( i ) < fMin )

           fMin= pFit( i );

            bestX = pX( i, : );

        end

    end

    Convergence_curve(t)=fMin;

end

% Application of simple limits/bounds

function s = Bounds( s, Lb, Ub)

  % Apply the lower bound vector

  temp = s;

  I = temp < Lb;

  temp(I) = Lb(I);

  % Apply the upper bound vector 

  J = temp > Ub;

  temp(J) = Ub(J);

  % Update this new move 

  s = temp;

%---------------------------------------------------------------------------------------------------------------------------

⛄ 运行结果

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_自适应_04

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_搜索算法_05

【麻雀算法】基于自适应螺旋飞行麻雀搜索算法(ASFSSA)求解单目标优化问题附matlab代码_搜索算法_06

⛄ 参考文献

[1] 刘睿莫愿斌. 动态优化问题的瞬态自适应麻雀搜索算法求解[J]. 计算机应用研究, 2022, 39(12):3651-3657.

[2] 高晨峰, 陈家清, 石默涵. 融合黄金正弦和曲线自适应的多策略麻雀搜索算法[J]. 计算机应用研究, 2022, 39(2):9.

[3] 周玉, 房倩, 裴泽宣,等. 基于切线飞行的麻雀搜索算法[J]. 计算机应用研究, 2023, 40(1):6.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料