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代码问题可私信交流。

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

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

  1. 【配电网】基于遗传算法实现三相单目标配电网重构附matlab代码

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

  2. 【智能优化算法】基于矮猫鼬优化算法求解单目标优化问题附matlab代码

    1 简介 基于矮猫鼬优化算法求解单目标优化问题​ 2 部分代码 %___________________________________________________________________ ...

  3. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...

  4. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  5. 【优化算法】基于matlab量子粒子群算法求解单目标优化问题【含Matlab源码 2203期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab量子粒子群算法求解单目标优化问题[含Matlab源码 2203期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  6. 【智能优化算法】基于黑寡妇优化算法求解单目标优化问题含Matlab源码

    1 简介 本期为大家介绍黑寡妇优化算法(Black Widow Optimization Algorithm,BWO).该算法由Adria´n F. Peña-Delgado等人于2020年提出,主要 ...

  7. 【智能优化算法】基于融合改进 Logistics 混沌和正弦余弦算子的自适应 t 分布海鸥算法求解单目标优化问题附matlab代码

    1 简介 针对基本海鸥算法存在的缺陷,提出一种融合改进Logistics混沌和正弦余弦算子的自适应t分布海鸥算法(ISOA).首先,采用改进Logistics混沌映射初始化种群,使海鸥更加均匀地分布于 ...

  8. 【智能优化算法】基于全局优化的改进鸡群算法求解单目标优化问题(ECSO)附matlab代码

    1 简介 智能算法分为两种,一种是群体智能算法(swarmintelligencealgorithm),该算法大多模拟自然界中动植物的特有行为,并将其表达成数学语言,从而进行迭代寻优,如模拟蝙蝠回声定 ...

  9. 【智能优化算法】基于自适应策略的混合鲸鱼优化算法求解单目标优化问题附matlab代码

    1 简介 针对鲸鱼优化算法在函数优化时存在收敛速度慢,易陷入局部最优等问题,提出了一种基于自适应策略的混合鲸鱼优化算法.该算法中先利用蝙蝠算法的局部搜索机制对当前鲸鱼算法最优解进行高斯扰动产生局部新解 ...

最新文章

  1. Talk is cheap, show me the code - 用 github 数据辅助你完善简历
  2. MySQL的binlog数据如何查看
  3. java层 android_Android开发实践:Java层与Jni层的数组传递
  4. Android-带你从源码角度理解SharedPreferences存储原理
  5. android添加时间,添加加载时间记录函数
  6. axis1.4 wsdl2java_axis2(1.4及以上版本) wsdl2java 使用方式 | 学步园
  7. python oop编程_23 Python - 面向对象编程OOP
  8. Linux on-the-fly kernel patching without LKM
  9. 从毫无交集到走向融合,AI+区块链才是改变世界的黑科技!
  10. 如何自学C语言(一个菜鸟的学习路)
  11. python-scrapy模拟登陆网站--登陆青果教务管理系统(一)
  12. 【雅思大作文考官范文】——第十九篇:独居人口' essay
  13. idea中项目文件颜色含义
  14. “报告星”自动报告生成系统介绍
  15. css做八边形图片有边框
  16. 实现正负值及多条Y轴 Echarts柱状图
  17. Spring boot + maven + jetty9在提交表单的时候出现Form too large
  18. spark进行数据清洗时,如何读取xlsx表格类型文件
  19. 解决jupyter notebook无法跳转浏览器
  20. markdown快速插入图片技巧

热门文章

  1. 对接熊迈SDK工作记录之实时视频和云录像功能集成
  2. php获取上月月初,php获取当前月与上个月月初及月末时间戳的方法
  3. python 将数据库的 utc时间转换成本地时间
  4. 服务器数据迁移:为知笔记私服数据迁移
  5. 通过将OC编译成C++ 一探究竟(边学编写,帮忙点评)
  6. fishtank 测试 linux,Fishtank fitts:a desktop VR testbed for evaluating 3D pointing techniques
  7. VSFTP一键部署脚本
  8. RDD优化--RDD共享变量(广播变量与累加器)
  9. 大牛揭秘:如何快速在阿里云搭建视频直播平台
  10. 数据库查询 - 选课系统