目录
1.鲸鱼算法简介
2. 算法代码展示
3.算法运算结果展示
鲸鱼算法是根据鲸鱼的捕食行为而衍生的一种算法,属于智能优化算法的一种。鲸鱼算法是Mirjalili等于2016年提出的一种模拟鲸鱼群体捕食行 为的启发式优化算法,捕食行为称为泡泡网捕食方法,分为搜寻猎物、包围猎物、泡网攻击3个阶段。
首先,鲸鱼随机地搜寻猎物,并且通过互相远离其他鲸鱼的位置,实现搜寻到更优的猎物;随后,鲸鱼识别出猎物的位置,向猎物靠拢;最后,鲸鱼采取螺旋的方式包围猎物,收缩包围圈,实现捕食。鲸鱼算法具有优化参数少,操作简单,收敛速度快等特点,广泛应用于工程中。其优化步骤为:①初始化参数:种群数量及迭代次数;②初始化搜索代理位置;③计算搜索代理的适应度值,取适应度值最小的搜索代理为最佳位置;④更新下一代搜索代理位置;⑤如达到终止条件,输出最优搜索代理,否则返回步骤③继续优化。其算法流程为:
主代码展示
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
欢迎大家一起交流学习