필터 지우기
필터 지우기

PID Controller tuning process

조회 수: 3 (최근 30일)
Maria
Maria 2014년 7월 12일
댓글: Image Analyst 2014년 7월 13일
Please if anyone could help I really need help I am working with tuning process for a close-loop system with two PIDs by using PSO (PARTICLE SWARM OPTIMIZATION) but the results of PIDs parameters that get from the algorithm don't give the desired values of the system , could anyone help me , what is the wrong thing in the code ? the code is below
%------------------%
% The code %
%------------------%
clc n = 50; % Size of the swarm " no of birds "
bird_setp =50; % Maximum number of "birds steps"
dim = 6;
K=0;
% Dimension of the problem
xmax=[200 10 100 200 10 100 ] xmin=[10 0 0 160 0 0 ]
c2 =1.2; % PSO parameter C1
c1 = 1.2; % PSO parameter C2
w =0.9; % pso momentum or inertia
fitness=0*ones(n,bird_setp);
R1 = rand(n,dim);
R2 = rand(n,dim);
current_fitness =0*ones(n,1);
for i= 1:n
for j= 1:dim
current_position (i,j)=rand*(xmax(j)-xmin(j))+xmin(j);
end
end
%current_position
velocity = .3*randn(n,dim) ;
local_best_position = current_position ;
K=current_position
for i=1:n
% Parameters of PID 1 P1=K(i,1); D1=K(i,2); I1=K(i,3);
% Parameters of PID 2 P2=K(i,4); D2=K(i,5); I2=K(i,6);
simopt = simset('solver','ode4','SrcWorkspace','Current','DstWorkspace','Current'); % Initialize sim options
[tout,xout,yout] = sim('PID_Simulink',[0 10],simopt);
e1=abs(Error_Velocity);
e1=sum(e1);
e2=abs(Error_theta);
e2=sum(e2);
F(i)=e1+e2;
end
local_best_fitness = F ;
[global_best_fitness,g] = min(local_best_fitness) ;
for i=1:n
globl_best_position(i,:) = local_best_position(g,:) ;
end
%globl_best_position
dif1=local_best_position-current_position;
dif2=globl_best_position-current_position; %-------------------% % 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 %
%------------------------%
iter = 0 ; % Iterations’counter
while ( iter < bird_setp )
iter = iter + 1
for i = 1:n,
% Parameters of PID 1 P1=K(i,1); D1=K(i,2); I1=K(i,3);
% Parameters of PID 2 P2=K(i,4); D2=K(i,5); I2=K(i,6);
simopt = simset('solver','ode4','SrcWorkspace','Current','DstWorkspace','Current'); %
Initialize sim options
[tout,xout,yout] = sim('PID_Simulink',[0 10],simopt);
e1=abs(Error_Velocity);
e1=sum(e1);
e2=abs(Error_theta);
e2=sum(e2);
F(i)=e1+e2;
end
for i = 1 : n
if F(i) < local_best_fitness(i)
local_best_fitness(i) = F(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
globl_best_position(i,:)=K(1,:);
simopt = simset('solver','ode4','SrcWorkspace','Current','DstWorkspace','Current');
% Initialize sim options
[tout,xout,yout] = sim('PID_Simulink',[0 10],simopt);
plot(xd,yd,'r', x,y,'k')

답변 (0개)

카테고리

Help CenterFile Exchange에서 Particle Swarm에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by