Matlab code for Flamingo Optimization


function [Score,Position,Convergence_curve]=FSA(Pop,Max_iter,lb,ub,dim,fobj)

if size(ub,1)==1

   ub=ones(dim,1)*ub;

   lb=ones(dim,1)*lb;

end

Convergence_curve = zeros(1,Max_iter);

%Initialize the positions

X=initialization(Pop,dim,ub,lb);

Position=zeros(1,dim);

Score=inf;

%calculate the initial fitness

for i=1:size(X,1)

   Fitness(1,i)=fobj(X(i,:));

end

[sorted_fitness,sorted_indexes]=sort(Fitness);

for newindex=1:Pop

   Sorted_Pos(newindex,:)=X(sorted_indexes(newindex),:);

end

Position=Sorted_Pos(1,:);

Score=sorted_fitness(1);

%Main loop

l=1;    %initial itreration

while l<Max_iter+1

MP_b=0.1;                    % The basic proportion of flamingos migration in the first stage.

R=rand();

MPr=round(R*Pop*(1-MP_b));   % The number of flamingos migrating in the second stage.

MPo=MP_b*Pop;         %The number of flamingos that migrate in the first phase.

MPt=Pop-MPo-MPr;      %The number of flamingos foraging for food.

Xb=Sorted_Pos(1,:);

% This function is randomly evaluated between negative 1 and 1.

   a=rand();

   if a>0.5

       eps= 1;

   else

       eps= -1;

   end

G= random('Normal',0,1);

%  The first phase migratory flamingo update function.

   for j=1:round(MPo)

       for i=1:dim

           sz=1; w = normrnd(0,1.2,sz);

           X(j, i) = X(j, i) + (Xb(i) - X(j, i)) * w;   %eqn.3

       end

   end

%  Foraging flamingo position update function.

   for j =1+round(MPo):round(MPo+MPt)

       for i=1:dim

           X(j, i) = (X(j, i) + eps * Xb(i) + G * (G * abs(Xb(i) + eps * X(j, i)))) / chi2pdf(8,1);   %eqn.2

       end

   end

  

   % The second stage migratory flamingo position update function.

   for j =round(MPo+MPt)+1:Pop

       for i=1:dim

           sz=1;w = normrnd(0,1.2,sz);

           X(j, i) = X(j, i)+(Xb(i)-X(j, i))*w;      %eqn.3

       end

   end

   for i=1:Pop

       for j=1:dim

           if X(i,j)<lb(j)

               X(i,j) = ub(j);

           elseif X(i,j)>ub(j)

               X(i,j) = lb(j);

           end

       end

   end

  

  

  for i=1:size(X,1) 

       Fitness(1,i)=fobj(X(i,:));

      

       if Fitness(1,i)<Score

           Position=X(i,:);

           Score=Fitness(1,i);

          

       end

  end

  

   Convergence_curve(l)=Score;

   l = l + 1;

end

Comments

Popular Posts