Control Lógico Fuzzy
Control basado en aprendizaje de máquina
Douglas A. Plaza Guingla, Ph.D.
Faculty of Electrical and Computing Engineering (FIEC)
Escuela Superior Politécnica del Litoral (ESPOL)
December 10, 2022
[email protected] Machine Learning Control-MACI 10 1 / 40
Outline
1 Diseño de controlador fuzzy
[email protected] Machine Learning Control-MACI 10 2 / 40
Pasos para el diseño de controlador fuzzy
Paso 1: Fusificaciónde las variables
Incialmente deberemos fusificar las variables de entrada y salida del sistema.
Por ejemplo si el error ẽ es una variable de entrada fuzzy, entonces podriamos
definir una de las siguientes opciones de número de conjuntos fuzzy.
ẽ = NB , NS , ZO , PS , PB
ẽ = {NB , NM , NS , ZO , PS , PM , PB }
ẽ = {NB , NM , NS , NZ , PZ , PS , PM , PB }
[email protected] Machine Learning Control-MACI 10 3 / 40
Pasos para el diseño de controlador fuzzy
Paso 2: Definir base de reglas
La base de reglas consiste en la difinición de varias reglas fuzzy. Por ejemplo,
en el control lógico fuzzy, podemos diseñar RB con dos reglas fuzzy como:
1 R1 : if E is NB and EC is NB then U is PB.
2 R2 : if E is NB and EC is NS then U is PM.
donde E es el error, EC representa el cambio del error, U es la señal de control.
Paso 3: Inferencia fuzzy y defusificación
Del conjunto de reglas se extrae la matriz relacional fuzzy R. Empleando
información actual a través de las matrices A y B entonces es posible obtener
un nuevo resultado:
C = (A × B ) ◦ R .
La matriz conclusión C es un vector fuzzy, el mismo deberá ser desfusificado
para obtener un solo valor numérico.
[email protected] Machine Learning Control-MACI 10 4 / 40
Ejemplo de diseño de controlador
Consideremos el control de nivel (altura) de un reservorio de agua como el
mostrado en la siguiente figura:
[email protected] Machine Learning Control-MACI 10 5 / 40
Ejemplo de diseño de controlador
Definición del error: De la gráfica podemos definir el error como:
e = ∆h = h0 − h.
donde h0 es el nivel deseado y h es el nivel actual.
Fusificación de la entrada y la salida:
ē = {NB , NS , O , PS , PB }
Niveles del error: {−3, −2, −1, 0, +1, +2, +3}
[email protected] Machine Learning Control-MACI 10 6 / 40
Ejemplo de diseño de controlador
Fusificación de la salida:
ū = {NB , NS , O , PS , PB }
Niveles de u: {-4,-3,-2,-1,0,+1,+2,+3,+4}
[email protected] Machine Learning Control-MACI 10 7 / 40
Ejemplo de diseño de controlador
Diseño de las reglas lógicas fuzzy: Basado en la experiencia en el control
vamos a diseñar una base de reglas con 5 reglas fuzzy.
1 If e = NB then u = NB
2 If e = NS then u = NS
3 If e = 0 then u = 0
4 If e = PS then u = PS
5 If e = PB then u = PB
Inferencia fuzzy: la siguiente tabla muestra la base de reglas:
de la table se define la matriz relacional R de la siguiente manera:
R = (NBe ∧ NBu )∨(NSe ∧ NSU )∨(Oe ∧ Ou )∨(PSe ∧ PSu )∨(PBe ∧ PBu ).
En las siguintes diapositivas se muestra el cálculo de la matriz R.
[email protected] Machine Learning Control-MACI 10 8 / 40
Ejemplo del diseño del controlador
[email protected] Machine Learning Control-MACI 10 9 / 40
Ejemplo del diseño del controlador
[email protected] Machine Learning Control-MACI 10 10 / 40
Ejemplo del diseño del controlador
[email protected] Machine Learning Control-MACI 10 11 / 40
Ejemplo del diseño del controlador
[email protected] Machine Learning Control-MACI 10 12 / 40
Ejemplo del diseño del controlador
[email protected] Machine Learning Control-MACI 10 13 / 40
Ejemplo del diseño del controlador
La matriz relacional fuzzy R se presenta, con la matriz R es posible hacer
inferencias sobre el sistema fuzzy.
[email protected] Machine Learning Control-MACI 10 14 / 40
Ejemplo del diseño del controlador
De manera general la toma de decisión fuzzy está dado por:
u = e ◦ R.
Por ejemplo: Si e es NB, e=[1.0 0.5 0 0 0 0 0], la señal de control estaría
dado por:
[email protected] Machine Learning Control-MACI 10 15 / 40
Ejemplo del diseño del controlador
Defusificación: una vez se obtiene la señal de control se procede a
defusificar, proceso donde se emplean varios métodos: Centroid,
Bisector, MOM, LOM. SOM. (Check: https://www.mathworks.
com/help/fuzzy/defuzzification-methods.html)
Por ejemplo:
1 0.5 0.5 0.5 0 0 0 0 0
u= + + + + + + + + .
−4 −3 −2 −1 0 +1 +2 +3 +4
En este caso empleando el método ´Middle of Maximum´ (MoM),
tenemos como valor numérico u = −4
[email protected] Machine Learning Control-MACI 10 16 / 40
Implementación del diseño del controlador
Definimos el sistema fuzzy en la variable a (newfis), le agregamos al sistema a
una variable de entrada e (addvar), finalmente se agregan funciones de
membresía con la instrucción (addmf).
a=newfis('fuzz_tank');
a=addvar(a,'input','e',[-3,3]);
a=addmf(a,'input',1,'NB','zmf',[-3,-1]); %Parameter e
a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);
a=addvar(a,'output','u',[-4,4]);
a=addmf(a,'output',1,'NB','zmf',[-4,-1]); %Parameter u
a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);
a=addmf(a,'output',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);
a=addmf(a,'output',1,'PB','smf',[1,4]);
[email protected] Machine Learning Control-MACI 10 17 / 40
Implementación del diseño del controlador
Se debe indicar la base de reglas mediante una matriz que en Matlab se la
define de la siguiente manera: (https:
//www.mathworks.com/help/fuzzy/mamfis.addrule.html)
rulelist=[1 1 1 1; %Edit rule base
2 2 1 1;
3 3 1 1;
4 4 1 1;
5 5 1 1];
a=addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','mom'); %Defuzzy
writefis(a1,'tank'); %Save to fuzzy file 'tank.fis'
a2=readfis('tank');
[email protected] Machine Learning Control-MACI 10 18 / 40
Implementación del diseño del controlador
A continuación se muestra el sistema fuzzy:
[email protected] Machine Learning Control-MACI 10 19 / 40
Implementación del diseño del controlador
A continuación se muestra la variable de entrada fuzzy el error e:
[email protected] Machine Learning Control-MACI 10 20 / 40
Implementación del diseño del controlador
A continuación se muestra la variable de salida fuzzy, la señal u:
[email protected] Machine Learning Control-MACI 10 21 / 40
Implementación del diseño del controlador
Fuzzy logic control GUI:
[email protected] Machine Learning Control-MACI 10 22 / 40
Tutorial fuzzy logic control GUI
A continuación se indican los enlaces al tutorial del GUI de la herramienta
Fuzzy Logic Controller de Matlab.
Part 01: https://www.mathworks.com/videos/
getting-started-with-fuzzy-logic-toolbox-part-1-68
html
Part 02: https://www.mathworks.com/videos/
getting-started-with-fuzzy-logic-toolbox-part-2-68
html
Part 03: https://www.mathworks.com/videos/
getting-started-with-fuzzy-logic-toolbox-part-3-68
html
[email protected] Machine Learning Control-MACI 10 23 / 40
Control de lavadora de ropa
En una lavadora de ropa es importante implementar un control del tiempo de
lavado. Control fuzzy es un método comunmente utilizado en esta aplicación.
Estructura del controlador fuzzy
En el presente ejemplo definiremos las siguientes entradas y salida el
controlador:
Input 1: Lodoso.
Input 2: Grasoso.
Output: Tiempo de lavado.
Número de conjuntos fuzzy
Basado en la experiencia se podrán definir 3 conjuntos fuzzy para las entradas
mud y axunge, respectivamente, y 5 conjuntos fuzzy para la salida tiempo de
lavado.
[email protected] Machine Learning Control-MACI 10 24 / 40
Definción de las funciones de membresía
MF para la entrada mud, se definen 3 conjuntos fuzzy: SD (mud small),
MD (mud middle), and LD (mud much), el rango de la variable mud esta
dentro del [0.100], y la MF se la diseña de la siguiente manera:
50−x
µSD (x ) = (50
0 ≤ x ≤ 50
x
0 ≤ x ≤ 50
µmud (x ) = µMD (x ) = 50 100−x
.
50
50 ≤ x ≤ 100
µ (x ) = x −50
50 ≤ x ≤ 100
LD 50
[email protected] Machine Learning Control-MACI 10 25 / 40
Definicón de las funciones de membresía
A continuación se presentan las funciones MF para input mud.
[email protected] Machine Learning Control-MACI 10 26 / 40
Definición de las funciones de membresía
MF para la entrada axunge, se definen 3 conjuntos fuzzy: NG (no
axunge), MG (middle axunge), and LG (much axunge), el rango de la
variable axunge esta dentro del rango [0.100], y la MF se la diseña de la
siguiente manera:
50−y
µNG (y ) = (50
0 ≤ y ≤ 50
y
0 ≤ y ≤ 50
50
µaxunge (y ) = µMG (y ) = 100−y .
50
50 ≤ y ≤ 100
µ (y ) = y −50
50 ≤ y ≤ 100
LG 50
[email protected] Machine Learning Control-MACI 10 27 / 40
Definicón de las funciones de membresía
A continuación se presentan las funciones MF para input axunge.
[email protected] Machine Learning Control-MACI 10 28 / 40
Definición de las funciones de membresía
MF para la salida washing time, se definen 5 conjuntos fuzzy: VS (very
small), S (small), and M (middle), L (ling), and VL (very long), el rango de
la variable washing tima esta dentro de los valores [0.60], y la MF se la
diseña de la siguiente manera:
µVS (z ) =(1010−z 0 ≤ z ≤ 10
z
0 ≤ z ≤ 10
10
( z ) =
µS 25−z
10 ≤ z ≤ 25
( 15
z −10
10 ≤ z ≤ 25
µtime (y ) = µM (z ) = 4015−z .
25 ≤ z ≤ 40
( 15
z −25
25 ≤ z ≤ 40
15
( z ) =
µ
L 60−z
20
40 ≤ z ≤ 60
µ (z ) = z −40
40 ≤ y ≤ 60
VL 20
[email protected] Machine Learning Control-MACI 10 29 / 40
Definicón de las funciones de membresía
A continuación se presentan las funciones MF para input mud.
[email protected] Machine Learning Control-MACI 10 30 / 40
Diseño de la base de reglas
Las reglas fuzzy se las designa basado en la experiencia. Como el sistema
fuzzy consta de dos entradas y una salida entonces con 3 MFs por cada
entrada será posible montar 9 reglas con el formato: "If mud is A and axunge is
B then washing time is C". Las 9 reglas se presentan en el siguiente recuadro:
[email protected] Machine Learning Control-MACI 10 31 / 40
Diseño en matlab del controlador fuzzy
a=newfis('fuzz_wash');
a=addvar(a,'input','x',[0,100]); %Fuzzy Stain
a=addmf(a,'input',1,'SD','trimf',[0,0,50]);
a=addmf(a,'input',1,'MD','trimf',[0,50,100]);
a=addmf(a,'input',1,'LD','trimf',[50,100,100]);
a=addvar(a,'input','y',[0,100]); %Fuzzy Axunge
a=addmf(a,'input',2,'NG','trimf',[0,0,50]);
a=addmf(a,'input',2,'MG','trimf',[0,50,100]);
a=addmf(a,'input',2,'LG','trimf',[50,100,100]);
a=addvar(a,'output','z',[0,60]); %Fuzzy Time
a=addmf(a,'output',1,'VS','trimf',[0,0,10]);
a=addmf(a,'output',1,'S','trimf',[0,10,25]);
a=addmf(a,'output',1,'M','trimf',[10,25,40]);
a=addmf(a,'output',1,'L','trimf',[25,40,60]);
a=addmf(a,'output',1,'VL','trimf',[40,60,60]);
[email protected] Machine Learning Control-MACI 10 32 / 40
Diseño en matlab del controlador fuzzy
rulelist=[1 1 1 1 1; %Edit rule base
1 2 3 1 1;
1 3 4 1 1;
2 1 2 1 1;
2 2 3 1 1;
2 3 4 1 1;
3 1 3 1 1;
3 2 4 1 1;
3 3 5 1 1];
a=addrule(a,rulelist);
showrule(a) %Show fuzzy rule base
a1=setfis(a,'DefuzzMethod','mom'); %Defuzzy
writefis(a1,'wash');
a2=readfis('wash');
[email protected] Machine Learning Control-MACI 10 33 / 40
Resultados del diseño
Sistema de inferencia fuzzy para el controlador de lavadora
[email protected] Machine Learning Control-MACI 10 34 / 40
Simulación del sistema fuzzy
Con el entorno gráfico es posible simular entradas y visualizar la salida.
[email protected] Machine Learning Control-MACI 10 35 / 40
Control PI fuzzy
El PI discreto está dado por:
k
uk = kp ek + ki Ts ∑ ej .
j =0
donde kp > 0, ki > 0. ek es:
ek = yd k − yk .
donde yd k es el valor deseado. La sintonización apropiada de los parámetros
kp , ki es importante en el desempeño de los controladores PID.
[email protected] Machine Learning Control-MACI 10 36 / 40
Diseño del controlador
A continuación definimos las entradas y salidas del sistema fuzzy:
Input 1: error e. Range [0, 1], fuzzy set {N , O , P }.
Input 2: error change ec Range [0, 1], fuzzy set {N , O , P }.
Output 1: kp .
Output 2: ki
[email protected] Machine Learning Control-MACI 10 37 / 40
Diseño del controlador
Para un sintonzación online de kp tenemos: kp = kp 0 + ∆kp .
Reglas fuzzy para sintonización de kp
cuando ek es P, kp se debe incrementar. Como resultado ∆kp debe ser
positivo.
cuendo ek es N, aparece el sobrepico, debemos disminuir kp y como
resultado ∆kp debe ser negativo.
cuando el error es cercano a cero, e = Z , podemos tener tres
condiciones: si ec = N, el sobrepico crece, ∆kp debe ser negativo; si
ec = Z , para disminuir el error estático, ∆kp debe ser positivo; si ec = P,
el error tenderá aumentar, debemos incrementar kp y ∆kp debe ser
positivo.
[email protected] Machine Learning Control-MACI 10 38 / 40
Diseño del controlador
Para un sintonzación online de ki tenemos:
ki = ki 0 + ∆ki
Reglas fuzzy para sintonización de ki
cuando ek es muy pequeño, se debe tener un valor grande de ∆ki .
cuando ek es grande, se debe tener un valor muy pequeño de ∆ki .
[email protected] Machine Learning Control-MACI 10 39 / 40
Diseño del controlador
El diseño se lo encuentra en el archivo de matlab: "chap4_5.m".
a=readfis('fuzzpid'); %Load fuzzpid.fis
ts=0.001;
sys=tf(133,[1,25,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;y_1=0;y_2=0;e_1=0;ec_1=0;ei=0;
kp0=0;ki0=0;
for k=1:1:1000
time(k)=k*ts;
yd(k)=1;
%Using fuzzy inference to tunning PI
k_pid=evalfis([e_1,ec_1],a);
kp(k)=kp0+k_pid(1); ki(k)=ki0+k_pid(2);
u(k)=kp(k)*e_1+ki(k)*ei;
y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
e(k)=yd(k)-y(k);
u_2=u_1;u_1=u(k); y_2=y_1;y_1=y(k); ei=ei+e(k)*ts;
ec(k)=e(k)-e_1; e_1=e(k); ec_1=ec(k);
end
[email protected] Machine Learning Control-MACI 10 40 / 40