【智能优化算法-白鲸优化算法】基于白鲸优化算法求解单目标优化问题附matlab代码

1 内容介绍

白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和“鲸鱼坠落”行为。

在本文中,提出了一种新的基于群体的元启发式算法,其灵感来自白鲸的行为,称为白鲸优化 (BWO),以解决优化问题。BWO中建立了探索、开发和鲸落三个阶段,分别对应成对游泳、猎物和落鲸的行为。BWO中的平衡因子和鲸落概率具有自适应性,对控制探索和开发能力起着重要作用。此外,还引入了 Levy 飞行以增强开发阶段的全局收敛性。使用 30 个基准函数测试了所提出的 BWO 的有效性,并进行了定性、定量和可扩展性分析,并将统计结果与其他 15 种元启发式算法进行了比较。根据结果和讨论,BWO是解决单峰和多峰优化问题的竞争算法,通过弗里德曼排名测试,BWO在比较的元启发式算法中基准函数的可扩展性分析中的整体排名第一。最后,四个工程问题展示了 BWO 在解决复杂的现实世界优化问题中的优点和潜力。

2 仿真代码

function func_plot(func_name)

[lb,ub,dim,fobj]=Get_Functions_details(func_name);

switch func_name 
    case 'F1' 
        x=-100:2:100; y=x; %[-100,100]  
    case 'F2' 
        x=-10:1:10; y=x; %[-10,10] 
    case 'F3' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F4' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F5' 
        x=-30:1:30; y=x; %[-30,30]
    case 'F6' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F7' 
        x=-1:0.03:1;  y=x;  %[-1.28,1.28]
    case 'F8' 
        x=-10:0.1:10;y=x; %[-10,10]
    case 'F9' 
        x=-10:0.1:10;   y=x; %[-10,10]    
    case 'F10' 
        x=-1:0.01:1; y=x;%[-1,1]
    case 'F11' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F12' 
        x=-5:0.1:10; y=x;%[-5,10]
    case 'F13' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F14' 
        x=-5.12:0.5:5.12; y=x;%[-5.12,5.12]
    case 'F15' 
        x=-32:0.4:32; y=x;%[-32,32]
    case 'F16' 
        x=-600:6:600; y=x;%[-600,600]
    case 'F17' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F18' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F19' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F20' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F21' 
        x=-5:0.1:5; y=x;%[-5.12,5.12]
    case 'F22' 
        x=-10:0.2:10; y=x;%[-10,10]     
    case 'F23'
        x=-20:1:20; y=x;%[-100,100]
    case 'F24' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F25' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F26' 
        x=-1:0.01:1; y=x;%[-5,5]
    case 'F27' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F28' 
        x=-5:0.06:5; y=x;%[-5,5]
    case 'F29' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F30' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F31' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F32' 
        x=-5:0.1:5; y=x;%[-5,5]     
    case 'F33' 
        x=-5:0.1:5; y=x;%[-5,5]  
end    

    

clear all;
close all;
clc;

Function_name = 'F2';   % function name
Npop = 50;      % Number of search agents
Max_it = 100;  % Maximum number of iterations
[lb,ub,nD,fobj]=Get_Functions_details(Function_name);
[xposbest,fvalbest,Curve]=BWO(Npop,Max_it,lb,ub,nD,fobj);
figure('Position',[500 500 660 290])

subplot(1,2,1);
func_plot(Function_name);
title('Objective space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

subplot(1,2,2);
semilogy(Curve,'Color','r');
hold on
title('Objective space')
xlabel('Iterations');
ylabel('Best score');

 

L=length(x);
f=[];

for i=1:L
    for j=1:L
        if strcmp(func_name,'F20') == 0 && strcmp(func_name,'F25')==0 && strcmp(func_name,'F29')==0 && strcmp(func_name,'F30')==0 && strcmp(func_name,'F31')==0 && strcmp(func_name,'F32')==0 && strcmp(func_name,'F33')==0
            f(i,j)=fobj([x(i),y(j)]);
        end
        if strcmp(func_name,'F25')==1 || strcmp(func_name,'F20')==1
            f(i,j)=fobj([x(i),y(j),0,0]);
        end
        if strcmp(func_name,'F29')==1
            f(i,j)=fobj([x(i),y(j),0]);
        end
        if strcmp(func_name,'F30')==1 
            f(i,j)=fobj([x(i),y(j),0,0,0,0]);
        end       
        if strcmp(func_name,'F31')==1 || strcmp(func_name,'F32')==1 || strcmp(func_name,'F33')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end         
         if strcmp(func_name,'F21')==1 || strcmp(func_name,'F22')==1 || strcmp(func_name,'F23')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end   
    end
end

surfc(x,y,f,'LineStyle','none');

end


function [lb,ub,dim,fobj] = Get_Functions_details(F)


switch F
    case 'F1'
        fobj = @F1;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F2'
        fobj = @F2;
        lb=-10;
        ub=10;
        dim=30;
    
    case 'F3'
        fobj = @F3;
        lb = -1;
        ub = 1;
        dim = 30;    
        
    case 'F4'
        fobj = @F4;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F5'
        fobj = @F5;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F6'
        fobj = @F6;
        lb=-30;
        ub=30;
        dim=30;
        
    case 'F7'
        fobj = @F7;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F8'
        fobj = @F8;
        lb=-1.28;
        ub=1.28;
        dim=30;
        
    case 'F9' 
        fobj = @F9;
        lb=-5;
        ub=10;
        dim=30;
        
    case 'F10'
        fobj = @F10;
        lb=-500;
        ub=500;
        dim=30;
    
    case 'F11' 
        fobj = @F11;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F12'  
        fobj = @F12;
        lb=-5;
        ub=5;
        dim=30; 
        
    case 'F13'
        fobj = @F13;
        lb=-5.12;
        ub=5.12;
        dim=30;
        
    case 'F14'
        fobj = @F14;
        lb=-32;
        ub=32;
        dim=30;
        
    case 'F15'
        fobj = @F15;
        lb=-600;
        ub=600;
        dim=30;
        
    case 'F16'
        fobj = @F16;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F17'
        fobj = @F17;
        lb=-50;
        ub=50;
        dim=30;
        
    case 'F18'
        fobj = @F18;
        lb=-50;
        ub=50;
        dim=30;

    case 'F19'
        fobj = @F19;
        lb=-65;
        ub=65;
        dim=2;
        
    case 'F20'
        fobj = @F20;
        lb=-5;
        ub=5;
        dim=4;
        
    case 'F21'
        fobj = @F21;
        lb=-5;
        ub=5;
        dim=2;
        
    case 'F22'
        fobj = @F22;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F23'
        fobj = @F23;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F24'
        fobj = @F24;
        lb=0;
        ub=10;
        dim=4;

end

end

% F1

function o = F1(x)
o=sum(x.^2);
end

% F2

function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end

% F3

function o = F3(x)
dim = size(x,2);
o=0;
for i=1:dim
    o=o+abs(x(i))^(i+1);
end
end

% F4

function o = F4(x)
dim=size(x,2);
o=0;
for i=1:dim
    o=o+sum(x(1:i))^2;
end
end

% F5

function o = F5(x)
o=max(abs(x));
end

% F6

function o = F6(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end

% F7

function o = F7(x)
o=sum(abs((x+.5)).^2);
end

% F8

 1 内容介绍

白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和“鲸鱼坠落”行为。

在本文中,提出了一种新的基于群体的元启发式算法,其灵感来自白鲸的行为,称为白鲸优化 (BWO),以解决优化问题。BWO中建立了探索、开发和鲸落三个阶段,分别对应成对游泳、猎物和落鲸的行为。BWO中的平衡因子和鲸落概率具有自适应性,对控制探索和开发能力起着重要作用。此外,还引入了 Levy 飞行以增强开发阶段的全局收敛性。使用 30 个基准函数测试了所提出的 BWO 的有效性,并进行了定性、定量和可扩展性分析,并将统计结果与其他 15 种元启发式算法进行了比较。根据结果和讨论,BWO是解决单峰和多峰优化问题的竞争算法,通过弗里德曼排名测试,BWO在比较的元启发式算法中基准函数的可扩展性分析中的整体排名第一。最后,四个工程问题展示了 BWO 在解决复杂的现实世界优化问题中的优点和潜力。

2 仿真代码

function func_plot(func_name)

[lb,ub,dim,fobj]=Get_Functions_details(func_name);

switch func_name 
    case 'F1' 
        x=-100:2:100; y=x; %[-100,100]  
    case 'F2' 
        x=-10:1:10; y=x; %[-10,10] 
    case 'F3' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F4' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F5' 
        x=-30:1:30; y=x; %[-30,30]
    case 'F6' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F7' 
        x=-1:0.03:1;  y=x;  %[-1.28,1.28]
    case 'F8' 
        x=-10:0.1:10;y=x; %[-10,10]
    case 'F9' 
        x=-10:0.1:10;   y=x; %[-10,10]    
    case 'F10' 
        x=-1:0.01:1; y=x;%[-1,1]
    case 'F11' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F12' 
        x=-5:0.1:10; y=x;%[-5,10]
    case 'F13' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F14' 
        x=-5.12:0.5:5.12; y=x;%[-5.12,5.12]
    case 'F15' 
        x=-32:0.4:32; y=x;%[-32,32]
    case 'F16' 
        x=-600:6:600; y=x;%[-600,600]
    case 'F17' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F18' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F19' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F20' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F21' 
        x=-5:0.1:5; y=x;%[-5.12,5.12]
    case 'F22' 
        x=-10:0.2:10; y=x;%[-10,10]     
    case 'F23'
        x=-20:1:20; y=x;%[-100,100]
    case 'F24' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F25' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F26' 
        x=-1:0.01:1; y=x;%[-5,5]
    case 'F27' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F28' 
        x=-5:0.06:5; y=x;%[-5,5]
    case 'F29' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F30' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F31' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F32' 
        x=-5:0.1:5; y=x;%[-5,5]     
    case 'F33' 
        x=-5:0.1:5; y=x;%[-5,5]  
end    

    

clear all;
close all;
clc;

Function_name = 'F2';   % function name
Npop = 50;      % Number of search agents
Max_it = 100;  % Maximum number of iterations
[lb,ub,nD,fobj]=Get_Functions_details(Function_name);
[xposbest,fvalbest,Curve]=BWO(Npop,Max_it,lb,ub,nD,fobj);
figure('Position',[500 500 660 290])

subplot(1,2,1);
func_plot(Function_name);
title('Objective space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

subplot(1,2,2);
semilogy(Curve,'Color','r');
hold on
title('Objective space')
xlabel('Iterations');
ylabel('Best score');

 

L=length(x);
f=[];

for i=1:L
    for j=1:L
        if strcmp(func_name,'F20') == 0 && strcmp(func_name,'F25')==0 && strcmp(func_name,'F29')==0 && strcmp(func_name,'F30')==0 && strcmp(func_name,'F31')==0 && strcmp(func_name,'F32')==0 && strcmp(func_name,'F33')==0
            f(i,j)=fobj([x(i),y(j)]);
        end
        if strcmp(func_name,'F25')==1 || strcmp(func_name,'F20')==1
            f(i,j)=fobj([x(i),y(j),0,0]);
        end
        if strcmp(func_name,'F29')==1
            f(i,j)=fobj([x(i),y(j),0]);
        end
        if strcmp(func_name,'F30')==1 
            f(i,j)=fobj([x(i),y(j),0,0,0,0]);
        end       
        if strcmp(func_name,'F31')==1 || strcmp(func_name,'F32')==1 || strcmp(func_name,'F33')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end         
         if strcmp(func_name,'F21')==1 || strcmp(func_name,'F22')==1 || strcmp(func_name,'F23')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end   
    end
end

surfc(x,y,f,'LineStyle','none');

end

 1 内容介绍

白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和“鲸鱼坠落”行为。

在本文中,提出了一种新的基于群体的元启发式算法,其灵感来自白鲸的行为,称为白鲸优化 (BWO),以解决优化问题。BWO中建立了探索、开发和鲸落三个阶段,分别对应成对游泳、猎物和落鲸的行为。BWO中的平衡因子和鲸落概率具有自适应性,对控制探索和开发能力起着重要作用。此外,还引入了 Levy 飞行以增强开发阶段的全局收敛性。使用 30 个基准函数测试了所提出的 BWO 的有效性,并进行了定性、定量和可扩展性分析,并将统计结果与其他 15 种元启发式算法进行了比较。根据结果和讨论,BWO是解决单峰和多峰优化问题的竞争算法,通过弗里德曼排名测试,BWO在比较的元启发式算法中基准函数的可扩展性分析中的整体排名第一。最后,四个工程问题展示了 BWO 在解决复杂的现实世界优化问题中的优点和潜力。

2 仿真代码

function func_plot(func_name)

[lb,ub,dim,fobj]=Get_Functions_details(func_name);

switch func_name 
    case 'F1' 
        x=-100:2:100; y=x; %[-100,100]  
    case 'F2' 
        x=-10:1:10; y=x; %[-10,10] 
    case 'F3' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F4' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F5' 
        x=-30:1:30; y=x; %[-30,30]
    case 'F6' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F7' 
        x=-1:0.03:1;  y=x;  %[-1.28,1.28]
    case 'F8' 
        x=-10:0.1:10;y=x; %[-10,10]
    case 'F9' 
        x=-10:0.1:10;   y=x; %[-10,10]    
    case 'F10' 
        x=-1:0.01:1; y=x;%[-1,1]
    case 'F11' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F12' 
        x=-5:0.1:10; y=x;%[-5,10]
    case 'F13' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F14' 
        x=-5.12:0.5:5.12; y=x;%[-5.12,5.12]
    case 'F15' 
        x=-32:0.4:32; y=x;%[-32,32]
    case 'F16' 
        x=-600:6:600; y=x;%[-600,600]
    case 'F17' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F18' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F19' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F20' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F21' 
        x=-5:0.1:5; y=x;%[-5.12,5.12]
    case 'F22' 
        x=-10:0.2:10; y=x;%[-10,10]     
    case 'F23'
        x=-20:1:20; y=x;%[-100,100]
    case 'F24' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F25' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F26' 
        x=-1:0.01:1; y=x;%[-5,5]
    case 'F27' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F28' 
        x=-5:0.06:5; y=x;%[-5,5]
    case 'F29' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F30' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F31' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F32' 
        x=-5:0.1:5; y=x;%[-5,5]     
    case 'F33' 
        x=-5:0.1:5; y=x;%[-5,5]  
end    

    

clear all;
close all;
clc;

Function_name = 'F2';   % function name
Npop = 50;      % Number of search agents
Max_it = 100;  % Maximum number of iterations
[lb,ub,nD,fobj]=Get_Functions_details(Function_name);
[xposbest,fvalbest,Curve]=BWO(Npop,Max_it,lb,ub,nD,fobj);
figure('Position',[500 500 660 290])

subplot(1,2,1);
func_plot(Function_name);
title('Objective space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

subplot(1,2,2);
semilogy(Curve,'Color','r');
hold on
title('Objective space')
xlabel('Iterations');
ylabel('Best score');

 

L=length(x);
f=[];

for i=1:L
    for j=1:L
        if strcmp(func_name,'F20') == 0 && strcmp(func_name,'F25')==0 && strcmp(func_name,'F29')==0 && strcmp(func_name,'F30')==0 && strcmp(func_name,'F31')==0 && strcmp(func_name,'F32')==0 && strcmp(func_name,'F33')==0
            f(i,j)=fobj([x(i),y(j)]);
        end
        if strcmp(func_name,'F25')==1 || strcmp(func_name,'F20')==1
            f(i,j)=fobj([x(i),y(j),0,0]);
        end
        if strcmp(func_name,'F29')==1
            f(i,j)=fobj([x(i),y(j),0]);
        end
        if strcmp(func_name,'F30')==1 
            f(i,j)=fobj([x(i),y(j),0,0,0,0]);
        end       
        if strcmp(func_name,'F31')==1 || strcmp(func_name,'F32')==1 || strcmp(func_name,'F33')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end         
         if strcmp(func_name,'F21')==1 || strcmp(func_name,'F22')==1 || strcmp(func_name,'F23')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end   
    end
end

surfc(x,y,f,'LineStyle','none');

end


function [lb,ub,dim,fobj] = Get_Functions_details(F)


switch F
    case 'F1'
        fobj = @F1;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F2'
        fobj = @F2;
        lb=-10;
        ub=10;
        dim=30;
    
    case 'F3'
        fobj = @F3;
        lb = -1;
        ub = 1;
        dim = 30;    
        
    case 'F4'
        fobj = @F4;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F5'
        fobj = @F5;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F6'
        fobj = @F6;
        lb=-30;
        ub=30;
        dim=30;
        
    case 'F7'
        fobj = @F7;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F8'
        fobj = @F8;
        lb=-1.28;
        ub=1.28;
        dim=30;
        
    case 'F9' 
        fobj = @F9;
        lb=-5;
        ub=10;
        dim=30;
        
    case 'F10'
        fobj = @F10;
        lb=-500;
        ub=500;
        dim=30;
    
    case 'F11' 
        fobj = @F11;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F12'  
        fobj = @F12;
        lb=-5;
        ub=5;
        dim=30; 
        
    case 'F13'
        fobj = @F13;
        lb=-5.12;
        ub=5.12;
        dim=30;
        
    case 'F14'
        fobj = @F14;
        lb=-32;
        ub=32;
        dim=30;
        
    case 'F15'
        fobj = @F15;
        lb=-600;
        ub=600;
        dim=30;
        
    case 'F16'
        fobj = @F16;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F17'
        fobj = @F17;
        lb=-50;
        ub=50;
        dim=30;
        
    case 'F18'
        fobj = @F18;
        lb=-50;
        ub=50;
        dim=30;

    case 'F19'
        fobj = @F19;
        lb=-65;
        ub=65;
        dim=2;
        
    case 'F20'
        fobj = @F20;
        lb=-5;
        ub=5;
        dim=4;
        
    case 'F21'
        fobj = @F21;
        lb=-5;
        ub=5;
        dim=2;
        
    case 'F22'
        fobj = @F22;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F23'
        fobj = @F23;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F24'
        fobj = @F24;
        lb=0;
        ub=10;
        dim=4;

end

end

% F1

function o = F1(x)
o=sum(x.^2);
end

% F2

function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end

% F3

function o = F3(x)
dim = size(x,2);
o=0;
for i=1:dim
    o=o+abs(x(i))^(i+1);
end
end

% F4

function o = F4(x)
dim=size(x,2);
o=0;
for i=1:dim
    o=o+sum(x(1:i))^2;
end
end

% F5

function o = F5(x)
o=max(abs(x));
end

% F6

function o = F6(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end

% F7

function o = F7(x)
o=sum(abs((x+.5)).^2);
end

% F8

 1 内容介绍

白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和“鲸鱼坠落”行为。

在本文中,提出了一种新的基于群体的元启发式算法,其灵感来自白鲸的行为,称为白鲸优化 (BWO),以解决优化问题。BWO中建立了探索、开发和鲸落三个阶段,分别对应成对游泳、猎物和落鲸的行为。BWO中的平衡因子和鲸落概率具有自适应性,对控制探索和开发能力起着重要作用。此外,还引入了 Levy 飞行以增强开发阶段的全局收敛性。使用 30 个基准函数测试了所提出的 BWO 的有效性,并进行了定性、定量和可扩展性分析,并将统计结果与其他 15 种元启发式算法进行了比较。根据结果和讨论,BWO是解决单峰和多峰优化问题的竞争算法,通过弗里德曼排名测试,BWO在比较的元启发式算法中基准函数的可扩展性分析中的整体排名第一。最后,四个工程问题展示了 BWO 在解决复杂的现实世界优化问题中的优点和潜力。

2 仿真代码

function func_plot(func_name)

[lb,ub,dim,fobj]=Get_Functions_details(func_name);

switch func_name 
    case 'F1' 
        x=-100:2:100; y=x; %[-100,100]  
    case 'F2' 
        x=-10:1:10; y=x; %[-10,10] 
    case 'F3' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F4' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F5' 
        x=-30:1:30; y=x; %[-30,30]
    case 'F6' 
        x=-100:2:100; y=x; %[-100,100]
    case 'F7' 
        x=-1:0.03:1;  y=x;  %[-1.28,1.28]
    case 'F8' 
        x=-10:0.1:10;y=x; %[-10,10]
    case 'F9' 
        x=-10:0.1:10;   y=x; %[-10,10]    
    case 'F10' 
        x=-1:0.01:1; y=x;%[-1,1]
    case 'F11' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F12' 
        x=-5:0.1:10; y=x;%[-5,10]
    case 'F13' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F14' 
        x=-5.12:0.5:5.12; y=x;%[-5.12,5.12]
    case 'F15' 
        x=-32:0.4:32; y=x;%[-32,32]
    case 'F16' 
        x=-600:6:600; y=x;%[-600,600]
    case 'F17' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F18' 
        x=-50:1:50; y=x;%[-50,50]
    case 'F19' 
        x=-500:5:500; y=x;%[-500,500]
    case 'F20' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F21' 
        x=-5:0.1:5; y=x;%[-5.12,5.12]
    case 'F22' 
        x=-10:0.2:10; y=x;%[-10,10]     
    case 'F23'
        x=-20:1:20; y=x;%[-100,100]
    case 'F24' 
        x=-100:2:100; y=x;%[-100,100]
    case 'F25' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F26' 
        x=-1:0.01:1; y=x;%[-5,5]
    case 'F27' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F28' 
        x=-5:0.06:5; y=x;%[-5,5]
    case 'F29' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F30' 
        x=-5:0.1:5; y=x;%[-5,5]        
    case 'F31' 
        x=-5:0.1:5; y=x;%[-5,5]
    case 'F32' 
        x=-5:0.1:5; y=x;%[-5,5]     
    case 'F33' 
        x=-5:0.1:5; y=x;%[-5,5]  
end    

    

clear all;
close all;
clc;

Function_name = 'F2';   % function name
Npop = 50;      % Number of search agents
Max_it = 100;  % Maximum number of iterations
[lb,ub,nD,fobj]=Get_Functions_details(Function_name);
[xposbest,fvalbest,Curve]=BWO(Npop,Max_it,lb,ub,nD,fobj);
figure('Position',[500 500 660 290])

subplot(1,2,1);
func_plot(Function_name);
title('Objective space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

subplot(1,2,2);
semilogy(Curve,'Color','r');
hold on
title('Objective space')
xlabel('Iterations');
ylabel('Best score');

 

L=length(x);
f=[];

for i=1:L
    for j=1:L
        if strcmp(func_name,'F20') == 0 && strcmp(func_name,'F25')==0 && strcmp(func_name,'F29')==0 && strcmp(func_name,'F30')==0 && strcmp(func_name,'F31')==0 && strcmp(func_name,'F32')==0 && strcmp(func_name,'F33')==0
            f(i,j)=fobj([x(i),y(j)]);
        end
        if strcmp(func_name,'F25')==1 || strcmp(func_name,'F20')==1
            f(i,j)=fobj([x(i),y(j),0,0]);
        end
        if strcmp(func_name,'F29')==1
            f(i,j)=fobj([x(i),y(j),0]);
        end
        if strcmp(func_name,'F30')==1 
            f(i,j)=fobj([x(i),y(j),0,0,0,0]);
        end       
        if strcmp(func_name,'F31')==1 || strcmp(func_name,'F32')==1 || strcmp(func_name,'F33')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end         
         if strcmp(func_name,'F21')==1 || strcmp(func_name,'F22')==1 || strcmp(func_name,'F23')==1 
            f(i,j)=fobj([x(i),y(j),0,0]);
        end   
    end
end

surfc(x,y,f,'LineStyle','none');

end


function [lb,ub,dim,fobj] = Get_Functions_details(F)


switch F
    case 'F1'
        fobj = @F1;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F2'
        fobj = @F2;
        lb=-10;
        ub=10;
        dim=30;
    
    case 'F3'
        fobj = @F3;
        lb = -1;
        ub = 1;
        dim = 30;    
        
    case 'F4'
        fobj = @F4;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F5'
        fobj = @F5;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F6'
        fobj = @F6;
        lb=-30;
        ub=30;
        dim=30;
        
    case 'F7'
        fobj = @F7;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F8'
        fobj = @F8;
        lb=-1.28;
        ub=1.28;
        dim=30;
        
    case 'F9' 
        fobj = @F9;
        lb=-5;
        ub=10;
        dim=30;
        
    case 'F10'
        fobj = @F10;
        lb=-500;
        ub=500;
        dim=30;
    
    case 'F11' 
        fobj = @F11;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F12'  
        fobj = @F12;
        lb=-5;
        ub=5;
        dim=30; 
        
    case 'F13'
        fobj = @F13;
        lb=-5.12;
        ub=5.12;
        dim=30;
        
    case 'F14'
        fobj = @F14;
        lb=-32;
        ub=32;
        dim=30;
        
    case 'F15'
        fobj = @F15;
        lb=-600;
        ub=600;
        dim=30;
        
    case 'F16'
        fobj = @F16;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F17'
        fobj = @F17;
        lb=-50;
        ub=50;
        dim=30;
        
    case 'F18'
        fobj = @F18;
        lb=-50;
        ub=50;
        dim=30;

    case 'F19'
        fobj = @F19;
        lb=-65;
        ub=65;
        dim=2;
        
    case 'F20'
        fobj = @F20;
        lb=-5;
        ub=5;
        dim=4;
        
    case 'F21'
        fobj = @F21;
        lb=-5;
        ub=5;
        dim=2;
        
    case 'F22'
        fobj = @F22;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F23'
        fobj = @F23;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F24'
        fobj = @F24;
        lb=0;
        ub=10;
        dim=4;

end

end

% F1

function o = F1(x)
o=sum(x.^2);
end

% F2

function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end

% F3

function o = F3(x)
dim = size(x,2);
o=0;
for i=1:dim
    o=o+abs(x(i))^(i+1);
end
end

% F4

function o = F4(x)
dim=size(x,2);
o=0;
for i=1:dim
    o=o+sum(x(1:i))^2;
end
end

% F5

function o = F5(x)
o=max(abs(x));
end

% F6

function o = F6(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end

% F7

function o = F7(x)
o=sum(abs((x+.5)).^2);
end

% F8

function o = F8(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end

% F9

function o = F9(x)
dim = size(x,2);
o = sum(x.^2)+(sum(0.5*[1:dim].*x))^2+(sum(0.5*[1:dim].*x))^4;
end

% F10

function o = F10(x)
o=sum(-x.*sin(sqrt(abs(x))));
end

% F11

function o = F11(x)
dim = size(x,2);
o = 1+sum(sin(x(1:dim)).^2)-exp(-sum(x.^2));
end

% F12

function o = F12(x)
dim = size(x,2);
o = 0.5*sum(x(1:dim).^4-16*x(1:dim).^2+5*x(1:dim));
end

% F13

function o = F13(x)
dim=size(x,2);
o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
end

% F14

function o = F14(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

% F15

function o = F15(x)
dim=size(x,2);
o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
end

% F16

function o = F16(x)
dim = size(x,2);
o = (sum(sin(x(1:dim)).^2) - exp(-sum(x.^2)))*exp(-sum(sin(sqrt(abs(x(1:dim)))).^2));
end

% F17

function o = F17(x)
dim=size(x,2);
o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
end

% F18

function o = F18(x)
dim=size(x,2);
o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
end

% F19

function o = F19(x)
aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];

for j=1:25
    bS(j)=sum((x'-aS(:,j)).^6);
end
o=(1/500+sum(1./([1:25]+bS))).^(-1);
end

% F20

function o = F20(x)
aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;
o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);
end

% F21

function o = F21(x)
o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);
end

% F22

function o = F22(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:5
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F23

function o = F23(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:7
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F24

function o = F24(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:10
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end


​​​​​​​

3 运行结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

function o = F8(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end

% F9

function o = F9(x)
dim = size(x,2);
o = sum(x.^2)+(sum(0.5*[1:dim].*x))^2+(sum(0.5*[1:dim].*x))^4;
end

% F10

function o = F10(x)
o=sum(-x.*sin(sqrt(abs(x))));
end

% F11

function o = F11(x)
dim = size(x,2);
o = 1+sum(sin(x(1:dim)).^2)-exp(-sum(x.^2));
end

% F12

function o = F12(x)
dim = size(x,2);
o = 0.5*sum(x(1:dim).^4-16*x(1:dim).^2+5*x(1:dim));
end

% F13

function o = F13(x)
dim=size(x,2);
o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
end

% F14

function o = F14(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

% F15

function o = F15(x)
dim=size(x,2);
o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
end

% F16

function o = F16(x)
dim = size(x,2);
o = (sum(sin(x(1:dim)).^2) - exp(-sum(x.^2)))*exp(-sum(sin(sqrt(abs(x(1:dim)))).^2));
end

% F17

function o = F17(x)
dim=size(x,2);
o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
end

% F18

function o = F18(x)
dim=size(x,2);
o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
end

% F19

function o = F19(x)
aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];

for j=1:25
    bS(j)=sum((x'-aS(:,j)).^6);
end
o=(1/500+sum(1./([1:25]+bS))).^(-1);
end

% F20

function o = F20(x)
aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;
o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);
end

% F21

function o = F21(x)
o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);
end

% F22

function o = F22(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:5
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F23

function o = F23(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:7
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F24

function o = F24(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:10
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end


​​​​​​​

3 运行结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


function [lb,ub,dim,fobj] = Get_Functions_details(F)


switch F
    case 'F1'
        fobj = @F1;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F2'
        fobj = @F2;
        lb=-10;
        ub=10;
        dim=30;
    
    case 'F3'
        fobj = @F3;
        lb = -1;
        ub = 1;
        dim = 30;    
        
    case 'F4'
        fobj = @F4;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F5'
        fobj = @F5;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F6'
        fobj = @F6;
        lb=-30;
        ub=30;
        dim=30;
        
    case 'F7'
        fobj = @F7;
        lb=-100;
        ub=100;
        dim=30;
        
    case 'F8'
        fobj = @F8;
        lb=-1.28;
        ub=1.28;
        dim=30;
        
    case 'F9' 
        fobj = @F9;
        lb=-5;
        ub=10;
        dim=30;
        
    case 'F10'
        fobj = @F10;
        lb=-500;
        ub=500;
        dim=30;
    
    case 'F11' 
        fobj = @F11;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F12'  
        fobj = @F12;
        lb=-5;
        ub=5;
        dim=30; 
        
    case 'F13'
        fobj = @F13;
        lb=-5.12;
        ub=5.12;
        dim=30;
        
    case 'F14'
        fobj = @F14;
        lb=-32;
        ub=32;
        dim=30;
        
    case 'F15'
        fobj = @F15;
        lb=-600;
        ub=600;
        dim=30;
        
    case 'F16'
        fobj = @F16;
        lb=-10;
        ub=10;
        dim=30;
        
    case 'F17'
        fobj = @F17;
        lb=-50;
        ub=50;
        dim=30;
        
    case 'F18'
        fobj = @F18;
        lb=-50;
        ub=50;
        dim=30;

    case 'F19'
        fobj = @F19;
        lb=-65;
        ub=65;
        dim=2;
        
    case 'F20'
        fobj = @F20;
        lb=-5;
        ub=5;
        dim=4;
        
    case 'F21'
        fobj = @F21;
        lb=-5;
        ub=5;
        dim=2;
        
    case 'F22'
        fobj = @F22;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F23'
        fobj = @F23;
        lb=0;
        ub=10;
        dim=4;    
        
    case 'F24'
        fobj = @F24;
        lb=0;
        ub=10;
        dim=4;

end

end

% F1

function o = F1(x)
o=sum(x.^2);
end

% F2

function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end

% F3

function o = F3(x)
dim = size(x,2);
o=0;
for i=1:dim
    o=o+abs(x(i))^(i+1);
end
end

% F4

function o = F4(x)
dim=size(x,2);
o=0;
for i=1:dim
    o=o+sum(x(1:i))^2;
end
end

% F5

function o = F5(x)
o=max(abs(x));
end

% F6

function o = F6(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end

% F7

function o = F7(x)
o=sum(abs((x+.5)).^2);
end

% F8

function o = F8(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end

% F9

function o = F9(x)
dim = size(x,2);
o = sum(x.^2)+(sum(0.5*[1:dim].*x))^2+(sum(0.5*[1:dim].*x))^4;
end

% F10

function o = F10(x)
o=sum(-x.*sin(sqrt(abs(x))));
end

% F11

function o = F11(x)
dim = size(x,2);
o = 1+sum(sin(x(1:dim)).^2)-exp(-sum(x.^2));
end

% F12

function o = F12(x)
dim = size(x,2);
o = 0.5*sum(x(1:dim).^4-16*x(1:dim).^2+5*x(1:dim));
end

% F13

function o = F13(x)
dim=size(x,2);
o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
end

% F14

function o = F14(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

% F15

function o = F15(x)
dim=size(x,2);
o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
end

% F16

function o = F16(x)
dim = size(x,2);
o = (sum(sin(x(1:dim)).^2) - exp(-sum(x.^2)))*exp(-sum(sin(sqrt(abs(x(1:dim)))).^2));
end

% F17

function o = F17(x)
dim=size(x,2);
o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
end

% F18

function o = F18(x)
dim=size(x,2);
o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
end

% F19

function o = F19(x)
aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];

for j=1:25
    bS(j)=sum((x'-aS(:,j)).^6);
end
o=(1/500+sum(1./([1:25]+bS))).^(-1);
end

% F20

function o = F20(x)
aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;
o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);
end

% F21

function o = F21(x)
o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);
end

% F22

function o = F22(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:5
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F23

function o = F23(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:7
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F24

function o = F24(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:10
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end


​​​​​​​

3 运行结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

function o = F8(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end

% F9

function o = F9(x)
dim = size(x,2);
o = sum(x.^2)+(sum(0.5*[1:dim].*x))^2+(sum(0.5*[1:dim].*x))^4;
end

% F10

function o = F10(x)
o=sum(-x.*sin(sqrt(abs(x))));
end

% F11

function o = F11(x)
dim = size(x,2);
o = 1+sum(sin(x(1:dim)).^2)-exp(-sum(x.^2));
end

% F12

function o = F12(x)
dim = size(x,2);
o = 0.5*sum(x(1:dim).^4-16*x(1:dim).^2+5*x(1:dim));
end

% F13

function o = F13(x)
dim=size(x,2);
o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
end

% F14

function o = F14(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

% F15

function o = F15(x)
dim=size(x,2);
o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
end

% F16

function o = F16(x)
dim = size(x,2);
o = (sum(sin(x(1:dim)).^2) - exp(-sum(x.^2)))*exp(-sum(sin(sqrt(abs(x(1:dim)))).^2));
end

% F17

function o = F17(x)
dim=size(x,2);
o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
end

% F18

function o = F18(x)
dim=size(x,2);
o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
end

% F19

function o = F19(x)
aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];

for j=1:25
    bS(j)=sum((x'-aS(:,j)).^6);
end
o=(1/500+sum(1./([1:25]+bS))).^(-1);
end

% F20

function o = F20(x)
aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;
o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);
end

% F21

function o = F21(x)
o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);
end

% F22

function o = F22(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:5
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F23

function o = F23(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:7
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end

% F24

function o = F24(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];

o=0;
for i=1:10
    o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end


​​​​​​​

3 运行结果

4 参考文献

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。