神经网络优化鲸鱼算法

1年前未命名153
神经网络优化鲸鱼算法 优化大师傅 于2023-03-15 10:01:12发布 585 收藏 文章标签: 算法

%_________________________________________________________________________% %  Whale Optimization Algorithm (WOA) source codes demo 1.0               % %                                                                         % %                                                                         % %_________________________________________________________________________% ​ % You can simply define your cost in a seperate file and load its handle to fobj  % The initial parameters that you need are: %__________________________________________ % fobj = @YourCostFunction % dim = number of your variables % Max_iteration = maximum number of generations % SearchAgents_no = number of search agents % lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n % ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n % If all the variables have equal lower bound you can just % define lb and ub as two single number numbers ​ % To run ALO: [Best_score,Best_pos,cg_curve]=ALO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj) ​ % The Whale Optimization Algorithm function [Leader_score,Leader_pos,Convergence_curve]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj,handles,value) ​ % 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=zeros(1,Max_iter); ​ t=0;% Loop counter ​ % Main loop while t<Max_iter     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,:));         All_fitness(1,i)=fitness;                  % 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-t*((2)/Max_iter); % 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+t*((-1)/Max_iter);          % 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          t=t+1;     Convergence_curve(t)=Leader_score;          if t>2         line([t-1 t], [Convergence_curve(t-1) Convergence_curve(t)],'Color','b')         xlabel('Iteration');         ylabel('Best score obtained so far');                 drawnow     end            set(handles.itertext,'String', ['The current iteration is ', num2str(t)])     set(handles.optimumtext,'String', ['The current optimal value is ', num2str(Leader_score)])     if value==1         hold on         scatter(t*ones(1,SearchAgents_no),All_fitness,'.','k')     end                     end ​ ​ ​ ​

 

标签: [db:标签TAG]

相关文章

当我尝试问了chatGPT几个问题之后,我感到了危机......

当我尝试问了chatGPT几个问题之后,我感到了危机.........

GitHub2022年十大热门编程语言榜单(上)

GitHub2022年十大热门编程语言榜单(上)...

linux基本功系列-top命令实战

linux基本功系列-top命令实战...

[C++游戏开发]3D障碍飞车

[C++游戏开发]3D障碍飞车...

ChatGPT-4.0 : 未来已来,你来不来

ChatGPT-4.0 : 未来已来,你来不来...

Vue2 和Vue 3的区别

Vue2 和Vue 3的区别...