image thumbnail
from Tunning of PID controller using Particle Swarm Optimization by wael korani
tunining of PID controller by using PSO

Tunning of PID controller using Particle Swarm Optimization

Tunning of PID controller using Particle Swarm Optimization

Author: Wael Mansour (wael192@yahoo.com)

MSc Student, Electrical Enginering Dept, Faculty of Engineering Cairo University, Egypt

Contents

Initialization

clear
clc
n = 50;           % Size of the swarm " no of birds "
bird_setp  =50;   % Maximum number of "birds steps"
dim = 2;          % Dimension of the problem

c2 =1.2;          % PSO parameter C1
c1 = 0.12;        % PSO parameter C2
w =0.9;           % pso momentum or inertia
fitness=0*ones(n,bird_setp);

                                       %-----------------------------%
                                       %    initialize the parameter %
                                       %-----------------------------%

R1 = rand(dim, n);
R2 = rand(dim, n);
current_fitness =0*ones(n,1);

                                 %------------------------------------------------%
                                 % Initializing swarm and velocities and position %
                                 %------------------------------------------------%

current_position = 10*(rand(dim, n)-.5);
velocity = .3*randn(dim, n) ;
local_best_position  = current_position ;


                                 %-------------------------------------------%
                                 %     Evaluate initial population           %
                                 %-------------------------------------------%

for i = 1:n
    current_fitness(i) = tracklsq(current_position(:,i));
end


local_best_fitness  = current_fitness ;
[global_best_fitness,g] = min(local_best_fitness) ;

for i=1:n
    globl_best_position(:,i) = local_best_position(:,g) ;
end
                                               %-------------------%
                                               %  VELOCITY UPDATE  %
                                               %-------------------%

velocity = w *velocity + c1*(R1.*(local_best_position-current_position)) + c2*(R2.*(globl_best_position-current_position));

                                               %------------------%
                                               %   SWARMUPDATE    %
                                               %------------------%


current_position = current_position + velocity ;

                                               %------------------------%
                                               %  evaluate anew swarm   %
                                               %------------------------%

Main Loop

iter = 0 ;        % Iterations’counter
while  ( iter < bird_setp )
iter = iter + 1;

for i = 1:n,
current_fitness(i) = tracklsq(current_position(:,i)) ;
end


for i = 1 : n
        if current_fitness(i) < local_best_fitness(i)
           local_best_fitness(i)  = current_fitness(i);
           local_best_position(:,i) = current_position(:,i)   ;
        end
 end


 [current_global_best_fitness,g] = min(local_best_fitness);


if current_global_best_fitness < global_best_fitness
   global_best_fitness = current_global_best_fitness;

    for i=1:n
        globl_best_position(:,i) = local_best_position(:,g);
    end

end


 velocity = w *velocity + c1*(R1.*(local_best_position-current_position)) + c2*(R2.*(globl_best_position-current_position));
 current_position = current_position + velocity;

 sprintf('The value of interation iter %3.0f ', iter );


end % end of while loop its mean the end of all step that the birds move it


            xx=fitness(:,50);
            [Y,I] = min(xx);
            current_position(:,I)






%
ans =

    0.9399
    0.5610

Contact us at files@mathworks.com