Es un sistema de control que esta basado en la lógica difusa.
Lofti A. Zadeh desarrollo la lógica difusa.
Tomada de A survey on industrial applications of fuzzy control
Dado un sistema con dos entradas $X$ y $Y$ y una salida $Z$, podemos definir las reglas de control en el modulo de inferencia así:
Para la defusificación se pueden usar diferentes métodos:
Realicemos el control de posición de la impresora via el voltaje del motor con un controlador difuso.
Usaremos la aplicación fuzzy logic designer, debemos tener instalado el Fuzzy Logic Toolbox
Esta es la ventana inicial, donde definiremos la variable de entrada como el error y la variable de salida como el voltaje.
Cambiar los valores de error en posición
Cambiar los valores de voltaje
Aunque la lógica difusa se había estado estudiando desde aproximadamente Los años 1920,Lofti Zadeh fue quien oficialmente introdujo el tema en 1965. El observó que los computadores no les iba bien manejando datos subjetivos Tales que si podían ser manejados por humanos.
¿Que tan mojada esta la ropa?
Lógica difusa: Parcialmente verdarero, parcialmente falso.
$$M \in [0,1]$$
Muy seca, poco seca, poco mojada, muy mojada
¿Está el té caliente?
No requiere conocer el modelo dinámico del sistema a controlar. Por tanto,
Pero necesita conocer las reglas lingüísticas de control de un experto. Cuando no se conoce el modelo se usa:
La función de membresia fue introducida por Lofti A. Zaden en 1965 en el artículo "fuzzy sets". Las funciones de membresia caracterizan la caracteristica difusa.
A cada valor difuso se le asigna un valor numérico entre 0 y 1.
En conjuntos clásicos los elementos pueden ser o no-ser parte de un conjunto.
Sea $A$ un conjunto, y $\chi$ la función de membresia a dicho conjunto:
$$\chi_A(x) = \left\{\array{0&x\in A\\1&x\notin A}\right\}$$Para un ejemplo de alturas $A= \{165,166,167,\ldots\}$
La cardinalidad de un conjunto $S$ es denotado por $|S|$, y es el numero de elementos del conjunto. Este número también se conoce como el número cardinal.
Los conjuntos difusos pueden ser considerados una extensión de los conjuntos clásicos.
En lógica difusa un elemento puede ser parcialmente miembro de un conjunto.
La función de membresia para un conjunto difuso se representa por $\mu_A(x)$
Complemento $A'= \{x|x\notin A, x\in X\}$
Diferencia $A|B = \{x|x\in A \;\text{y}\; x\notin B\}$
union = ctrl.Antecedent(np.arange(0, 10.05, 0.05), 'Universe')
MFA = fuzz.trapmf(union.universe, [0, 4, 6, 10])
MFB = fuzz.trimf(union.universe, [6, 8, 10])
union['A'] = MFA
union['B'] = MFB
_,union['A∪B'] = fuzz.fuzzymath.fuzzy_or(union.universe,MFA,union.universe,MFB)
union.view()
C:\Python39\lib\site-packages\skfuzzy\control\fuzzyvariable.py:122: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure. fig.show()
interseccion = ctrl.Antecedent(np.arange(0, 10.05, 0.05), 'Universe')
interseccion['A'] = MFA
interseccion['B'] = MFB
_,interseccion['A∩B'] = fuzz.fuzzymath.fuzzy_and(interseccion.universe,MFA,interseccion.universe,MFB)
interseccion.view()
C:\Python39\lib\site-packages\skfuzzy\control\fuzzyvariable.py:122: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure. fig.show()
complemento = ctrl.Antecedent(np.arange(0, 10.05, 0.05), 'Universe')
complemento['A'] = MFA
complemento["A'"] = fuzz.fuzzymath.fuzzy_not(MFA)
complemento.view()
C:\Python39\lib\site-packages\skfuzzy\control\fuzzyvariable.py:122: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure. fig.show()
diferencia = ctrl.Antecedent(np.arange(0, 10.05, 0.05), 'Universe')
diferencia['A'] = MFA
diferencia['B'] = MFB
_,diferencia['A | B'] = fuzz.fuzzymath.fuzzy_and(diferencia.universe,MFA,diferencia.universe,fuzz.fuzzymath.fuzzy_not(MFB))
diferencia.view()
C:\Python39\lib\site-packages\skfuzzy\control\fuzzyvariable.py:122: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure. fig.show()
Donde $R$ es la relación de universos $X$ y $Y$ y $S$ es la relación de universos $Y$ y $Z$, luego $T$ es la relación de universos $X$ y $Z$.
Dos tipo de composiciones existen:
print("Ejemplo de Composición\n")
R = np.matrix([[0.5,0.1],[0.2,0.9],[0.8,0.6]])
S = np.matrix([[0.6,0.4,0.7],[0.5,0.8,0.9]])
print("R =\n",R)
print("S =\n",S)
T = MaxMinCompo(R,S)
print("T = {max-min}\n",T)
T = MaxProdCompo(R,S)
print("T = {max-prod}\n",T)
Ejemplo de Composición R = [[0.5 0.1] [0.2 0.9] [0.8 0.6]] S = [[0.6 0.4 0.7] [0.5 0.8 0.9]] T = {max-min} [[0.5 0.4 0.5] [0.5 0.8 0.9] [0.6 0.6 0.7]] T = {max-prod} [[0.3 0.2 0.35] [0.45 0.72 0.81] [0.48 0.48 0.56]]
print("Ejemplo de Composición\n")
R = np.matrix([[0.3,0.9,0.2],[0.6,0.5,0]])
S = np.matrix([[1,0.6],[0.4,0.1],[0.7,0]])
print("R =\n",R)
print("S =\n",S)
T = MaxMinCompo(R,S)
print("T = {max-min}\n",T)
T = MaxProdCompo(R,S)
print("T = {max-prod}\n",T)
Ejemplo de Composición R = [[0.3 0.9 0.2] [0.6 0.5 0. ]] S = [[1. 0.6] [0.4 0.1] [0.7 0. ]] T = {max-min} [[0.4 0.3] [0.6 0.6]] T = {max-prod} [[0.36 0.18] [0.6 0.36]]