C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > Matlab嗅觉优化算法

基于Matlab实现嗅觉优化算法的示例代码

作者:电力系统与算法之美

嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。本文将利用Matlab实现这一智能优化算法,需要的可以参考一下

1.概述

嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。该概念分为三个阶段(嗅探,尾随和随机)是独特且易于实现的。此上传包含 SAO 在 37 个 CEC 基准测试函数上的实现。

2.37 个 CEC 基准测试函数代码

function [lb,ub,dim,fobj] = Select_Function(F)
 
 
switch F
    case 'F1'
        %Admijan
        fobj = @F1;
        lb=[-1 -1];
        ub=[2 1];
        dim=2;
      case 'F2'
        %Beale
        fobj = @F2;
        dim=2;
        lb=-4.5*ones(1,dim);
        ub=4.5*ones(1,dim);
        case 'F3'
       %Bird
        fobj = @F3;
        dim=2;
        lb=-2*pi*ones(1,dim);
        ub=2*pi*ones(1,dim);      
         case 'F4'
       %Bohachevsky
        fobj = @F4;
        dim=2;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F5'
%         Booth
        fobj = @F5;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F6'
       %Branin RCOS1
        fobj = @F6;
        lb=[-5,0];
        ub=[10, 15];
        dim=2;
    case 'F7'
        %Branin RCOS2
        fobj = @F7;
        dim=2;
        lb=-5*ones(1,dim);
        ub=15*ones(1,dim);
    case 'F8'
        %Brent
         fobj = @F8;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim); 
    case 'F9'
        %Bukin F2
         fobj = @F9;
        dim=2;
        lb=[-15 -3];
        ub=[-5 3];
      case 'F10'
        %six-hump
         fobj = @F10;
        dim=2;
        lb=-5*ones(1,dim);
        ub=5*ones(1,dim);  
    case 'F11'
        %Chichinadze
        fobj = @F11;
        dim=2;
        lb=-30*ones(1,dim);
        ub=30*ones(1,dim);
   case 'F12'
        %Deckkers-Aarts
        fobj = @F12;
        dim =2;
        lb=-20*ones(1,dim);
        ub=20*ones(1,dim);
    case 'F13'
        %Easom
        dim=2;
        fobj=@F13;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);   
    case 'F14'
        %Matyas
        fobj = @F14;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);   
     case 'F15'
        %McComick
        fobj = @F15;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);         
    case 'F16'
        %Michalewicz2
        fobj = @F16;
        dim=2;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);         
     case 'F17'
        %Quadratic
        fobj = @F17;        
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);         
    case 'F18'
        %Schaffer
        dim=2;
        fobj = @F18;                
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F19'
        %StyblinskiTang
        fobj = @F19;                
        dim=2;
        lb=-5*ones(1,dim);
        ub=5*ones(1,dim);        
     case 'F20'
        %Box-Betts
        fobj = @F20;                        
        dim=3;
        lb=[0.9 9 0.9];
        ub=[1.2 11.2 1.2]; 
    case 'F21'
        %Colville
        fobj = @F21;                        
        dim=4;
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);          
    case 'F22'
        %Csendes
        fobj = @F22;                        
        dim=4;
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);         
    case 'F23'
       %  Michalewicz 5
        fobj = @F23;                        
        dim=5;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);          
    case 'F24'
        %Miele Cantrell
        dim=4;
        fobj = @F24;                        
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);
    case 'F25'
        % Step
        fobj = @F25;                        
        dim=5;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F26'
        %Michalewicz
        fobj = @F26;                                
         dim=10;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);    
    case 'F27'    
        %Shubert
        fobj = @F27;                                
        dim=5;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);        
    case 'F28'
        %Ackley
        dim=30;
        fobj = @F28;                                        
        lb=-32*ones(1,dim);
        ub=32*ones(1,dim);         
    case 'F29'
        %Brown
        fobj = @F29;                                
        dim=30;
        lb=-1*ones(1,dim);
        ub=4*ones(1,dim);        
    case 'F30'
        %Ellipsoid
        dim=2;
        fobj = @F30;                                        
        lb=-5.12*ones(1,dim);
        ub=5.12*ones(1,dim);          
    case 'F31'
        % Grienwank
        fobj = @F31;                                                
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim); 
    case 'F32'
        %Mishra
        fobj = @F32;                                                
        dim=30;
        lb=0*ones(1,dim);
        ub=1*ones(1,dim); 
    case 'F33'
        %Quartic
        dim=30;
        fobj = @F33;                                                        
        lb=-1.28*ones(1,dim);
        ub=1.28*ones(1,dim);
    case 'F34'
        %Rastrigin
        fobj = @F34;                                                
        dim=30;
        lb=-5.12*ones(1,dim);
        ub=5.12*ones(1,dim);         
    case 'F35'
        %Rosenbrock
        fobj = @F35;                                                             
        dim=30;
        lb=-30*ones(1,dim);
        ub=30*ones(1,dim);   
    case 'F36'
     %     Salomon
        fobj = @F36;                                                     
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F37'
        %Sphere
        fobj = @F37;                                                     
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);           
end
end
 
function o=F1(x)
% Adjiman
 o=(cos(x(:,1)).*sin(x(:,2))-x(:,1)./(x(:,2).^2+1));
 
end
function o=F2(x)
  %     Beale
   o=(1.5-x(:,1)+(x(:,1).*(x(:,2)))).^2+(2.25-x(:,1)+(x(:,1).*(x(:,2)).^2)).^2+...
    (2.625-x(:,1)+(x(:,1).*(x(:,2)).^3)).^2;
end
function o=F3(x)
    %     Bird
    o=sin(x(:,2)).*(exp(1-cos(x(:,1))).^2)+cos(x(:,1)).*(exp(1-sin(x(:,2))).^2)...
    +(x(:,1)+(x(:,2))).^2;
end
 
function o=F4(x)
    %     Bohachevsky
    W=0;
    [a,dim]=size(x);
    for i=1:dim-1
        W=W+x(:,i).^2+2.*x(:,i+1).^2-0.3.*cos(3.*pi.*x(:,i+1))-0.4.*cos(4.*pi.*(x(:,i+1)))+0.7;
    end
    o=W;
end
 
function o=F5(x)
        %Booth
    o=(x(:,2)-(5.1*x(:,1).^2/(4*pi*2))+(5*x(:,1)/pi)-6).^2+...
        10*(1-1/(8*pi)).*cos(x(:,1))+10;
end
 
function o=F6(x)
    %     Branin RCOS 1
    o=(x(:,2)-(5.1*x(:,1).^2/(4*pi*2))+(5*x(:,1)/pi)-6).^2+...
        10*(1-1/(8*pi)).*cos(x(:,1))+10;
end
 
function o=F7(x)
%     Branin RCOS 2 
    a=1; b=5.1/(4*pi^2); c=5/pi; d=6; e=10; g=1/(8*pi);
    f1=a*(x(:,2)-b*x(:,1).^2+c*x(:,1)-d).^2;
    f2=e*(1-g)*cos(x(:,1)).*cos(x(:,2));
    f3=log(x(:,1).^2+x(:,2)+1);
    o=-1/(f1+f2+f3+e);
end
function o=F8(x)
%Brent
    o=(x(:,1)+10).^2+(x(:,1)+10).^2+exp(-x(:,1).^2-x(:,2).^2);
end
function o=F9(x)
  %Bukin F2
o=(abs(x(:,1)-0.01.*x(:,2).^2))+0.01.*abs(x(:,2)+10);
end
function o=F10(x)
%Camel Six Hump
    o=(4-2.1*x(:,1).^2+(x(:,1).^4)/3).*x(:,1).^2+x(:,1).*x(:,2)+...
        (4*x(:,2).^2-4).*x(:,2).^2;  
end
function o=F11(x)
        %Chichinadze
    o=x(:,1).^2-12*x(:,1)+11+10*cos(pi*x(:,1)/2)+8*sin(5*pi*x(:,1)/2)-...
        ((1/5)^0.5)*exp(-0.5*(x(:,2)-0.5).^2);
end
 
function o=F12(x)
%     Deckkers-Aarts
    o=10^5*x(:,1).^2+x(:,2).^2-(x(:,1).^2+x(:,2).^2).^2+...
        10^(-5)*(x(:,1).^2+x(:,2).^2).^4;  
end
function o = F13(x)
% Easom
o=-cos(x(:,1)).*cos(x(:,2)).*exp(-(x(:,1)-pi).^2-(x(:,2)-pi).^2);      
 
end
function o=F14(x)
    %     Evaluate Matyas
    o=0.26*(x(:,1).^2+x(:,2).^2)-0.48*x(:,1).*x(:,2);
end
function o=F15(x)
  %     McCormick
o=mccormick(x);%
end
function o=F16(x)
    %  Michalewicz2
    [~,d]=size(x);
    W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
end  
function o=F17(x)
   %   Quadratic
    o=-3803.84-138.08*x(:,1)-232.92*x(:,2)+128.08*x(:,1).^2+203.64*x(:,2).^2+182.25*x(:,1).*x(:,2);  
end
function o=F18(x)
        %     Evaluate Schaffer
        [~,d]=size(x);
        w=0;
        for i=1:d-1
            w=w+((x(i).^2+x(i+1).^2).^.5).*(sin(50.*(x(i).^2+x(i+1).^2).^0.1)).^2;
        end
        o=w;
end
    function o=F19(x)
    %  Styblinki's Tang
    [~,d]=size(x);
      W=0;
      for i=1:d
          W=W+(x(:,i).^4-16.*x(:,i).^2+5.*x(:,i));
      end
      o=W.*0.5;
    end
    function o=F20(x)
        % Box-Betts
        [~,d]=size(x);
    W=0;
    for i=1:d
        g=exp(-0.1.*(i+1)).*x(:,1)-exp(-0.1.*(i+1)).*x(:,2)-((exp(-0.1.*(i+1)))-exp(-(i+1)).*x(:,3));
        W=W+g.^2;
    end
    o=W;
    end    
    function o=F21(x)
    %     Colville
    o=100*(x(:,1)-x(:,2).^2).^2+(1-x(:,1)).^2+90*(x(:,4)-x(:,3).^2).^2+...
    (1-x(:,3)).^2+10.1*((x(:,2)-1).^2+(x(:,4)-1).^2)+...
    19.8*(x(:,2)-1).*(x(:,4)-1);
    end    
    function o=F22(x)
        %     Csendes
        [~,d]=size(x);
    aa=0;
    for i=1:d
        aa=aa+x(:,i).^6.*(2+sin(1/x(:,i)));
    end
    o=aa;
    end    
    function o=F23(x)
            % Michalewicz 5
            [~,d]=size(x);
    W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
    end    
    function o=F24(x)
 %Miele Cantrell
    o=(exp(-x(:,1))-x(:,2)).^4+100*(x(:,2)-x(:,3)).^6+...
        (tan(x(:,3)-x(:,4))).^4+x(:,1).^8;
    end
    function o=F25(x)
        %     Evaluate Step
        [~,d]=size(x);
    W=0;
    for i=1:d
        W=W+(floor(x(:,i)+0.5)).^2;
    end
    o=W;
    end
    
    function o=F26(x)
        %     Evaluate Michalewicz 10
        [~,d]=size(x);
        W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
    end
    function o=F27(x)
%     shubert
        [~,d]=size(x);
        s1=0;
        s2=0;
        for i = 1:d
             s1 = s1+i*cos((i+1)*x(1)+i);
             s2 = s2+i*cos((i+1)*x(2)+i);
        end
        o = s1*s2;   
    end    
% F28--Ackley
function o = F28(x)
dim=size(x,2);
o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);
end    
    function o=F29(x)
    [~,d]=size(x);
    %     Brown
    a=0;
    for i=1:d-1
        a=(x(:,i).^2).^(x(:,i+1)+1)+(x(:,i+1).^2).^(x(:,i).^2+1);
    end
    o=a;
    end    
    function o=F30(x)
            %     Ellipsoid
     [~,d]=size(x);
        W=0;
        for i=1:d
            W=W+i.*x(:,1).^2;
        end
        o=W;
    end    
    %Grienwank
    function o=F31(x)
    o=griewank(x);
    end
    function o=F32(x)
        %      Mishra
        [~,d]=size(x);
    a=0;
    for i=1:d-1
        a=a+x(:,i);
    end
    aa=d-a;
    b=0;
    for j=1:d-1
        b=b+x(:,j);
    end
    W=abs((1+d-b).^aa);
    o=W;   
    end    
% --Quartic
function o = F33(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end    
%Rastrigin
    function o=F34(x)
    o=rastrigin(x); 
    end
% Rosenbrock
function o = F35(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end
    function o=F36(x)
%     salomon
    x2 = x.^2;
    sumx2 = sum(x2, 2);
    sqrtsx2 = sqrt(sumx2);
    o = 1 - cos(2 .* pi .* sqrtsx2) + (0.1 * sqrtsx2);
    end
function o = F37(x)
%Sphere
o=sum(x.^2);
end
    
    
function o=Ufun(x,a,k,m)
o=k.*((x-a).^m).*(x>a)+k.*((-x-a).^m).*(x<(-a));
end

3.F1 Matlab代码仿真

到此这篇关于基于Matlab实现嗅觉优化算法的示例代码的文章就介绍到这了,更多相关Matlab嗅觉优化算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文