鲸鱼算法(WOA)在matlab中的实现

目录

1.鲸鱼算法简介

2. 算法代码展示

3.算法运算结果展示


1.鲸鱼算法简介

鲸鱼算法是根据鲸鱼的捕食行为而衍生的一种算法,属于智能优化算法的一种。鲸鱼算法是Mirjalili等于2016年提出的一种模拟鲸鱼群体捕食行 为的启发式优化算法,捕食行为称为泡泡网捕食方法,分为搜寻猎物、包围猎物、泡网攻击3个阶段。 

首先,鲸鱼随机地搜寻猎物,并且通过互相远离其他鲸鱼的位置,实现搜寻到更优的猎物;随后,鲸鱼识别出猎物的位置,向猎物靠拢;最后,鲸鱼采取螺旋的方式包围猎物,收缩包围圈,实现捕食。鲸鱼算法具有优化参数少,操作简单,收敛速度快等特点,广泛应用于工程中。其优化步骤为:①初始化参数:种群数量及迭代次数;②初始化搜索代理位置;③计算搜索代理的适应度值,取适应度值最小的搜索代理为最佳位置;④更新下一代搜索代理位置;⑤如达到终止条件,输出最优搜索代理,否则返回步骤③继续优化。其算法流程为:

鲸鱼算法(WOA)在matlab中的实现_第1张图片

2. 算法代码展示

主代码展示

clear all 
clc

SearchAgents_no=30; % Number of search agents 搜索代理数量

Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)

Max_iteration=500; % Maximum numbef of iterations

% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);%dim维数,变量的数量

[Best_score,Best_pos,WOA_cg_curve]=WOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);

figure('Position',[269   240   660   290]) %Position属性则指定窗口的大小和位置
%Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

%Draw objective space
subplot(1,2,2);
semilogy(WOA_cg_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');

WOA狩猎行为代码展示 

for i=1:size(Positions,1)
        r1=rand(); % r1 is a random number in [0,1]
        r2=rand(); % r2 is a random number in [0,1]
        
        A=2*a*r1-a;  % Eq. (2.3) in the paper
        C=2*r2;      % Eq. (2.4) in the paper
        
        
        b=1;               %  parameters in Eq. (2.5)
        l=(a2-1)*rand+1;   %  parameters in Eq. (2.5)
        
        p = rand();        % p in Eq. (2.6)
        
        for j=1:size(Positions,2)
            
            if p<0.5   
                if abs(A)>=1
                    rand_leader_index = floor(SearchAgents_no*rand()+1);
                    X_rand = Positions(rand_leader_index, :);
                    D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)
                    Positions(i,j)=X_rand(j)-A*D_X_rand;      % Eq. (2.8)
                    
                elseif abs(A)<1
                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)
                    Positions(i,j)=Leader_pos(j)-A*D_Leader;      % Eq. (2.2)
                end
                
            elseif p>=0.5
              
                distance2Leader=abs(Leader_pos(j)-Positions(i,j));
                % Eq. (2.5)
                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);
                
            end
            
        end
    end

3.算法运算结果展示

 鲸鱼算法(WOA)在matlab中的实现_第2张图片

欢迎大家一起交流学习 

你可能感兴趣的:(matlab,算法,开发语言,启发式算法)