• 大小: 1KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: 人工智能  

资源简介

用粒子群算法改进蝙蝠算法,引入自适应权重,具有很好的收敛速度和收敛精度

资源截图

代码片段和文件信息

% Usage: bat_algorithm([20 0.25 0.5]);                     %

function [bestfminN_iter]=Abat_algorithm(para)
% Display help
 help bat_algorithm.m

% Default parameters
if nargin<1  para=[10 0.25 0.5 0.8 0.6]; end
n=para(1);      % Population size typically 10 to 25
A=para(2);      % Loudness  (constant or decreasing)
r=para(3); 
wmax=para(4);
wmin=para(5);
% Pulse rate (constant or decreasing)
% This frequency range determines the scalings
Qmin=0;         % Frequency minimum
Qmax=2;         % Frequency maximum
% Iteration parameters
tol=10^(-5);    % Stop tolerance
N_iter=0;       % Total number of function evaluations
% Dimension of the search variables
d=5;
% Initial arrays
Q=zeros(n1);   % Frequency
v=zeros(nd);   % Velocities
% Initialize the population/solutions
for i=1:n
  Sol(i:)=randn(1d);
  Fitness(i)=Fun(Sol(i:));
end
% Find the current best
[fminI]=min(Fitness);
best=Sol(I:);


% ======================================================  %
% Note: As this is a demo here we did not implement the  %
% reduction of loudness and increase of emission rates.   %
% Interested readers can do some parametric studies       %
% and also implementation various changes of A and r etc  %
% ======================================================  %

% Start the iterations -- Bat Algorithm
while (fmin>tol)
     for i=1;n
        fv(i)= Fitness(i);
                end
        favg=sum(fv)/n;
        for i=1;n
            if fv(i)<=favg
                w=wmin+(fv(i)-fmin)*(wmax-wmin)/(favg-fmin);
            else
                w=wmax;
            end
          Q(i)=Qmin+(Qmin-Qmax)*rand;
          v(i:)=w*v(i:)+(Sol(i:)-best)*Q(i);
          S(i:)=Sol(i:)+v(i:);
          % Pulse rate
          if rand>r
              S(i:)=best+0.01*randn(1d);
          end

     % Evaluate new solutions
           Fnew=Fun(S(i:));
     % If the solution improves or not too loudness
           if (Fnew<=Fitness(i)) & (rand                Sol(i:)=S(i:);
                Fitness(i)=Fnew;
           end
          % Update the current best
          if Fnew<=fmin
                best=S(i:);
                fmin=Fnew;
          end
     end
          N_iter=N_iter+n;
end
plot(Fitness) 
% Output/display
disp([‘Number of evaluations: ‘num2str(N_iter)]);
disp([‘ fmin=‘num2str(fmin)]);
disp([‘Best =‘num2str(best)]);


function z=Fun(u)
z=(1-u(1))^2+100*(u(2)-u(1)^2)^2+(1-u(3))^2+(u(4)-2)^2+(u(5)-0.4)^2;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2533  2018-05-21 18:52  Abat_algorithm.m

评论

共有 条评论