基本信息
源码名称:WOA源码
源码大小:2.71KB
文件格式:.m
开发语言:C/C++
更新时间:2019-10-06
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
WOA的源代码
WOA的源代码
% The Whale Optimization Algorithm function [Leader_pos,Convergence_curve]=WOA(SearchAgents_no,MaxFEs,lb,ub,dim,fobj) % initialize position vector and score for the leader Leader_pos=zeros(1,dim); Leader_score=inf; %change this to -inf for maximization problems %Initialize the positions of search agents Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=[]; FEs=0; t=1; % Main loop while FEs < MaxFEs for i=1:size(Positions,1) % Return back the search agents that go beyond the boundaries of the search space Flag4ub=Positions(i,:)>ub; Flag4lb=Positions(i,:)<lb; Positions(i,:)=(Positions(i,:).*(~(Flag4ub Flag4lb))) ub.*Flag4ub lb.*Flag4lb; % Calculate objective function for each search agent fitness=fobj(Positions(i,:)); FEs=FEs 1; % Update the leader if fitness<Leader_score % Change this to > for maximization problem Leader_score=fitness; % Update alpha Leader_pos=Positions(i,:); end end a=2-FEs*((2)/MaxFEs); % a decreases linearly fron 2 to 0 in Eq. (2.3) % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12) a2=-1 FEs*((-1)/MaxFEs); % Update the Position of search agents 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 Convergence_curve(t)=Leader_score; t=t 1; end