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.


https://sites.google.com/a/correounivalle.edu.co/implementationparallelswarm/_/rsrc/1472775933136/home/algoritmo-pso/PSO_Esquema.jpeg
 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

Entradas Populares

Desarrollo y pruebas de algoritmo Adaboost

Algoritmo P&O para placas solares

e-meeting