Ajuste de regulador PI con el algoritmo PSO
Introducción
PSO permite optimizar un problema a partir de una población de
soluciones candidatas, denotadas como "partículas", moviendo éstas por
todo el espacio de búsqueda según reglas matemáticas que tienen en
cuenta la posición y la velocidad de las partículas. El movimiento de
cada partícula se ve infulido por su mejor posición local hallada hasta
el momento, así como por las mejores posiciones globales encontradas por
otras partículas a medida querecorren el espacio de búsqueda. El
fundamento teórico de esto es hacer que la nube de partículas converja
rápidamente hacia las mejores soluciones.

Objetivos
El objetivo de será la minimización de una función de coste
para obtener los parámetros de un controlador PI que mejor se ajusten a nuestra
problemática. Para la realización del problema se ha supuesto que la respuesta
escalón de la función de transferencia dada con el controlador PI que se
generen debe: el tiempo de pico tiene que ser menor de 2.5 segundos, el tiempo
de establecimiento ha de ser menor a 15 segundos y el máximo sobreimpulso ha de
ser menor del 15%. Además, las constantes proporcional e integral tienen que
ser mayores que 0.
Definción de función de coste y prueba final
En este apartado se va a cambiar el cálculo de la función de
coste de manera que podamos analizar con cual se obtienen los mejores
resultados. En primer lugar, he modificado las restricciones y la función de
coste realizadas en clase ya que eran demasiado restrictivas y nunca se
conseguía una respuesta satisfactoria ya que los costes tendían siempre a
infinito. Las restricciones elegidas para la función de coste son: Kp>0, Ti>0,
tpico<2.5, ts<15 y sobreimpulso (Mp)<15. La
función de coste es la siguiente:
function
[coste]=calcular_coste_reguladorPI(x)
Kp=x(1);
Ti=x(2);
R=tf(Kp*[Ti,1],[Ti,0]);
H=tf(1,[1,1,1]);
HLA=R*H;%Lazo
Abierto
HLC=feedback(HLA,1);%Lazo
Cerrado
tsimul=20;
t=[0:0.001:tsimul];
datos=stepinfo(HLC);
ts=datos.SettlingTime;
tpico=datos.PeakTime;
sobreimpulso=datos.Overshoot;
if
(Kp<0)||(Ti<0)
coste=inf;
else
if (tpico>2.5)
coste=inf;
else
if
(sobreimpulso>10)
coste=inf;
else
if
(ts>15)
coste=inf;
else
coste=ts+sobreimpulso;
end
end
end
end
Si el tiempo de pico, el tiempo de establecimiento, el
sobreimpulso o las constantes proporcional e integral toman un valor no acorde
con nuestras restricciones, el coste será infinito. Si todas las variables
están dentro de los límites establecidos al coste se le asignará un valor de
coste=ts+sobreimpulso, de manera que cuanto menor sea la suma del tiempo de
establecimiento por el sobreimpulso menor será el coste y más adecuados serán
los parámetros Kp y Ti a la salida del PSO.
En la primera prueba los valores de los parámetros del PSO
son los mismos que se dieron en clase. A partir de ahora se hará referencia a
estos parámetros como parámetros por defecto:
n_iter=100;
n_particulas=100;
n_var=2;
Delta_t=1;
inercia=0.1;
phi_1_max=0.1;
phi_2_max=0.1;
%Inicialización de las partículas.
x=random('uniform',0,10,n_var,n_particulas);
v=random('uniform',-0.1,0.1,n_var,n_particulas);
Se realiza la simulación:
Como se puede observar en la gráfica, el algoritmo PSO va
ajustando los valores de los parámetros del controlador y se van obteniendo
respuestas cada vez más acordes a las especificaciones fijadas, hasta que
termina la simulación.
Los valores conseguidos al final son:
Comentarios
Publicar un comentario