1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56YlZtx
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
鲸鱼算法(Whale Optimization Algorithm,WOA)[1]。鲸鱼优化算法(WOA)是 2016 年由澳大利亚格里菲斯大学的 Mirjalili 等提出的一种新的群体智能优化算法,因算法简练易于实现,且对目标函数条件要求宽松,参数控制较少等种种优点受到一批又一批学者的亲睐,且经过不断的改进WOA已应用于许多领域。WOA算法设计的既精妙又富有特色,它源于对自然界中座头鲸群体狩猎行为的模拟, 通过鲸鱼群体搜索、包围、追捕和攻击猎物等过程实现优时化搜索的目的。在原始的WOA中,提供了包围猎物,螺旋气泡、寻找猎物的数学模型。
4.部分源码
...................................................................
delta = 1e-6;
Flag = 0;
Positions = initialization(SearchAgents_no, dim, ub, lb);
Convergence_curve = zeros(1,Max_iter);
iter = 0;
while iter < Max_iter && Flag <= 3
for i = 1:size(Positions,1)
%返回超出搜索空间边界的搜索代理
Flag4ub = Positions(i,:) > ub;
Flag4lb = Positions(i,:) < lb;
Positions(i,:) = (Positions(i,:).*(~(Flag4ub+Flag4lb))) + ub.*Flag4ub + lb.*Flag4lb;
% 计算每个搜索代理的目标函数
fitness = fobj(Positions(i,:));
%更新
if fitness < Leader_score
Leader_score = fitness;
Leader_pos = Positions(i,:);
end
end
a = 2 - iter*((2)/Max_iter);
a2 = -1 + iter*((-1)/Max_iter);
% 更新搜索代理的位置
for i = 1:size(Positions,1)
r1 = rand();
r2 = rand();
A = 2*a*r1-a;
C = 2*r2;
b = 1;
l = (a2-1)*rand + 1;
p = rand();
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));
Positions(i,j) = X_rand(j) - A*D_X_rand;
elseif abs(A) < 1
D_Leader = abs(C*Leader_pos(j) - Positions(i,j));
Positions(i,j) = Leader_pos(j) - A*D_Leader;
end
elseif p>=0.5
distance2Leader = abs(Leader_pos(j)-Positions(i,j));
Positions(i,j) = distance2Leader*exp(b.*l).*cos(l.*2*pi) + Leader_pos(j);
end
end
end
iter = iter + 1;
Convergence_curve(iter) = -Leader_score;
[iter -Leader_score]
end
end
function Positions = initialization(SearchAgents_no, dim, ub, lb)
Boundary_no = size(ub,2);
if Boundary_no == 1
Positions = rand(SearchAgents_no,dim).*(ub - lb) + lb;
end
if Boundary_no > 1
for i = 1:dim
ub_i = ub(i);
lb_i = lb(i);
Positions(:,i) = rand(SearchAgents_no,1).*(ub_i - lb_i) + lb_i;
end
end
end
A295