-----------------------------------------------------------------------
鲸鱼算法(Whale Optimization Algorithm)是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴的优化算法,研究应用案例不多。 鲸鱼算法中,每个鲸鱼的位置代表了一个可行解。在鲸鱼群捕猎过程中,每只鲸鱼有两种行为,一种是包围猎物,所有的鲸鱼都向着其他鲸鱼前进;另一种是汽包网,鲸鱼环形游动喷出气泡来驱赶猎物。在每一代的游动中,鲸鱼们会随机选择这两种行为来进行捕猎。在鲸鱼进行包围猎物的行为中,鲸鱼将会随机选择是向着最优位置的鲸鱼游去还是随机选择。
clc;
clear;
close all;
warning off;
Iters = 200; %最大迭代次数
Num = 50;
D = dim; %搜索空间维数
woa_idx = zeros(1,D);
woa_get = inf;
%初始化种群的个体
xwoa = randn(Num,D); %随机初始化位置
for t=1:Iters
for i=1:Num
%目标函数更新
pa(i) = func_F1_10(xwoa(i,:),sel);
Fitout = pa(i);
%更新
if Fitout < woa_get
woa_get = Fitout;
woa_idx = xwoa(i,:);
end
end
%调整参数
c1 = 2-t*((1)/300);
c2 =-1+t*((-1)/300);
%位置更新
for i=1:Num
r1 = rand();
r2 = rand();
K1 = 2*c1*r1-c1;
K2 = 2*r2;
l =(c2-1)*rand + 1;
rand_flag = rand();
for j=1:D
if rand_flag<0.5
if abs(K1)>=1
RLidx = floor(Num*rand()+1);
X_rand = xwoa(RLidx, :);
D_X_rand = abs(K2*X_rand(j)-xwoa(i,j));
xwoa(i,j)= X_rand(j)-K1*D_X_rand;
else
D_Leader = abs(K2*woa_idx(j)-xwoa(i,j));
xwoa(i,j)= woa_idx(j)-K1*D_Leader;
end
else
distLeader = abs(woa_idx(j)-xwoa(i,j));
xwoa(i,j) = distLeader*exp(6*l).*cos(l.*2*pi)+woa_idx(j);
end
end
end
pb = func_F1_10(woa_idx,sel);
Pbest(t) = pb;
end
Rs(mtkl) = Pbest(end);
end
RRs{idx2}(idx1,:)=[min(Rs),max(Rs),mean(Rs),std(Rs)];
end
end