**Introducción a la Lógica Difusa** La forma en que la gente piensa es, inherentemente, difusa. La forma en que percibimos el mundo está cambiando continuamente y no siempre se puede definir en términos de sentencias completamente verdaderas o falsas. Consideremos como ejemplo el conjunto de vasos del mundo, que pueden estar vacíos o llenos de agua. Ahora tomemos un vaso vacío y comencemos a echar agua poco a poco, ¿en qué momento decidimos que el vaso pasa de estar vacío a estar lleno? Evidentemente, hay dos situaciones extremas que reconocemos sin ninguna duda, la primera cuando el vaso está completamente vacío, sin una sola gota de agua en su interior, y la segunda cuando está completamente lleno, cuando no cabe ni una sola gota más en él, pero una gota antes de estar completamente lleno, ¿diríamos que es falso que el vaso está lleno?, observa que para afirmar su condición, en la frase anterior no solo he usado el término **lleno**, sino que he añadido un modificador diciendo **completamente lleno**. Si a un vaso lleno de agua le quito una gota de agua... ¿dejo de considerarlo lleno y automáticamente pertenece para mí a otra clasificación? Las definiciones de **vaso completamente vacío** y **vaso completamente lleno** son demasiado estrictas como para que resulten interesantes en un razonamiento en el que se consideran operaciones de llenado y vaciado de vasos, y entre los términos de **lleno** y **vacío** hay un área que no está claramente definida de pertenencia absoluta a ninguno de esos extremos. En el lenguaje natural que usamos en el mundo real hemos cubierto esta imprecisión por medio de una jerarquía de términos intermedios junto con modificadores que permiten cubrir un espectro más grande de áreas usando un número limitado de ellos, y podemos hablar de lleno, medio lleno, completamente lleno, casi lleno, etc. !!!side:1 Si consideramos el conjunto de los vasos llenos, un nuevo vaso estará lleno si pertenece o no a este conjunto. Matemáticamente, los conceptos de **sí/no**, **verdadero/falso** están representados por medio del concepto clásico de conjunto [1], pero necesitamos extenderlo para poder representar este tipo de información más difusa. Frente al concepto tradicional de conjunto, en el que un elemento está o no está, no hay términos intermedios, un **conjunto difuso** permite a sus elementos tener un grado de pertenencia. Si el valor 1 se asigna a los elementos que están completamente en el conjunto, y 0 a los que están completamente fuera, entonces los objetos que están parcialmente en el conjunto tendrán un valor de pertenencia estrictamente entre 0 y 1. Por tanto, si un vaso completamente lleno tiene un grado de pertenencia a **los vasos llenos** de valor 1, y un vaso completamente vacío un grado de pertenencia a **los vasos llenos** de valor 0, entonces al añadir una gota a este último, su grado de pertenencia **a los vasos llenos** sería ligeramente superior a 0. # Conjuntos Difusos Matemáticamente, un conjunto es una colección de objetos que verifican alguna propiedad, de forma que un objeto o bien pertenece al conjunto, o no pertenece. Por ejemplo, supongamos que decimos que una persona es alta si su altura está por encima de 180cm, algo que puede ser representado gráficamente de la siguiente forma:  La función anterior describe la pertenencia al **conjunto de los altos**, o estás dentro o estás fuera. Estas funciones **nítidas** funcionan muy bien con las operaciones matemáticas clásicas, pero no funcionan tan bien describiendo el mundo real. Por una parte, no hace distinción entre individuos que midan 181cm y los que miden 215cm, aunque hay una clara distinción entre ellos. El otro problema es la diferencia entre una persona que mida 180cm y otra de 181cm, apenas 1cm de diferencia entre ellos y el primero de ellos no está en el conjunto de los altos, y el segundo sí. La aproximación de los conjuntos difusos al conjunto de los altos proporciona una representación mucho mejor sobre la propiedad **ser alto** de una persona. El conjunto se define por medio de una función continua que puede tomar valores intermedios entre los extremos 0 y 1.  La función de pertenencia define el conjunto difuso para los posibles valores de altura (mostrados en el eje horizontal) y proporciona el grado de pertenencia de la altura al conjunto difuso (mostrado en el eje vertical con valores entre 0 y 1). De esta forma, siguiendo la figura anterior, el grado de pertenencia de la primera persona es 0.3 y, por tanto, no es muy alto, mientras que el segundo tiene un grado de pertenencia de 0.95 y, definitivamente, es alto. !!!side:2 L.A. Zadeh, *Fuzzy sets*, Information and Control, Volume 8, Issue 3, 1965, Pages 338-353, ISSN 0019-9958, [https://doi.org/10.1016/S0019-9958(65)90241-X](https://www.sciencedirect.com/science/article/pii/S001999586590241X) **Abstract**: A fuzzy set is a class of objects with a continuum of grades of membership. Such a set is characterized by a membership (characteristic) function which assigns to each object a grade of membership ranging between zero and one. The notions of inclusion, union, intersection, complement, relation, convexity, etc., are extended to such sets, and various properties of these notions in the context of fuzzy sets are established. In particular, a separation theorem for convex fuzzy sets is proved without requiring that the fuzzy sets be disjoint. Los **conjuntos difusos** fueron propuestos inicialmente por Lofti A. Zadeh en su artículo de 1965 titulado _Fuzzy Sets_ [2]. Este artículo establece los fundamentos de la Lógica Difusa que se deduce de la definición de conjunto difuso y sus propiedades. Esta definición es: !!!def:Conjuntos Difusos Sea $X$ un conjunto clásico. Un conjunto difuso, $A$, en $X$ viene caracterizado por la función de pertenencia $f_A(x)$, que asocia a cada punto $x \in X$ un número real del intervalo $[0,1]$, donde los valores de $f_A(x)$ representan el *grado de pertenencia* de $x$ en $A$, de forma que, cuanto más cerca esté el valor de $f_A(x)$ a $1$, mayor es el grado de pertenencia de $x$ a $A$. !!!side:3 Obsérvese que no indicamos cómo ha de ser la función de pertenencia, ya que eso dependerá de las características propias del conjunto real que se quiere representar, pero suelen usarse algunas funciones clásicas comunes como las que se muestran a continuación:  Esta definición de conjunto difuso extiende de alguna forma la definición clásica de conjunto, que sería el caso particular en el que $f_A(x)\in \{0,1\}$. Pero para trabajar con ellos también tendremos que extender las operaciones clásicas entre conjuntos (unión, intersección, etc.), lo que nos llevará a extender las operaciones lógicas binarias habituales (conjunción, disyunción, etc.) [3]. # Matizadores Lingüísticos Antes de pasar a las definiciones formales de las operaciones binarias habituales, veamos cómo esta aproximación también permite dar una representación matemática de los modificadores lingüísticos a los que hacíamos mención en la introducción. El primer paso para convertir el lenguaje difuso en una función de pertenencia de la Lógica Difusa consiste en tomar los términos (normalmente adjetivos o expresiones que indican propiedades) y asociarles una función de pertenencia adecuada a nuestra experiencia del mundo real. Aquí no hay reglas fijas, salvo las restricciones propias de la lógica. El siguente paso es elegir cómo actúan los matizadores lingüísticos sobre el lenguaje. Estos matizadores deben modificar la función de pertenencia de la propiedad sobre la que actúan, de forma que podamos reflejar adecuadamente las acciones de términos como *mucho*, *muy*, *casi*, *ligeramente*, *extremadamente*, *muchísimo*, etc... Normalmente, lo que se hace es tomar la familia de funciones de la forma: $$h_\alpha(x)=x^\alpha$$ y se asocian valores concretos de $\alpha$ a los distintos matizadores. Por ejemplo: $$\alpha(muy)=2$$ $$\alpha(extremadamente)=6$$ $$\alpha(ligeramente)=\frac{1}{2}$$ Así, si queremos modificar el comportamiento de la función de pertenencia *alto* para obtener *muy alto*, basta considerar: $$f_{muy\ alto}(x)=h_{muy}(f_{alto}(x))$$ # Operaciones Lógicas Difusas !!!side:4 Por ejemplo: $$A \cup B =\{x:\ x\in A \vee x\in B\}$$ $$A \cap B =\{x:\ x\in A \wedge x\in B\}$$ $$A^c =\{x:\ \neg(x\in A) \}$$ La lógica tradicional bivaluada usa los operadores booleanos $\wedge$ (AND), $\vee$ (OR), y $\neg$ (NOT) para convertir las operaciones de conjuntos de intersección, unión y complementario en operadores sobre los predicados de pertenencia [4]. Estos operadores funcionan bien con conjuntos nítidos, clásicos, y se pueden definir sencillamente a partir de las funciones de verdad asociadas a cada operador (normalmente, estas funciones se representan por medio de lo que se conoce como Tablas de Verdad). Estas tablas de verdad funcionan bien para la lógica bivaluada pero, debido a que los conjuntos difusos no tienen por qué tomar una cantidad finita de valores, no es fácil extender las tablas para su uso en este caso. Estos operadores necesitan ser redefinidos como funciones para todos los posibles valores difusos de los grados de pertenencia, es decir, para todo el intervalo $[0,1]$, y no solo para los valores extremos. La Lógica Difusa es realmente un superconjuto de la lógica clásica ya que incluye los valores extremos (donde se espera que funcione igual que la clásica) junto a todos los valores intermedios, por lo que conseguir una forma generalizada de estos operadores que extiendan a los operadores clásicos puede ser de mucha utilidad. Una posible generalización vendría dada por: $$x\ \wedge \ y = min(x,y)$$ $$x\ \vee \ y = max(x,y)$$ $$\neg \ x = 1 - x$$ Estas definiciones se pueden usar tanto para aplicar los operadores clásicos como para obtener combinaciones difusas. Las siguientes gráficas representan el resultado obtenido con las definiciones anteriores sobre todos los posibles valores de entrada:  Existen muchas otras definiciones alternativas para estos operadores, pero todas ellas suelen compartir propiedades similares (que extienden el funcionamiento y significado clásico): 1. La definición matemática más general del operador AND se llama **norma triangular** (o **t-norma**) y es, por definición, un operador binario, definido de $[0,1]^2 \mapsto [0,1]$, conmutativo, asociativo, que lleva el par $(1,1)$ al valor $1$, y es creciente en cada variable. 2. Para el operador OR las propiedades son las mismas, salvo que lleva el par $(0,0)$ al valor $0$, y se llama **t-conorma**. 3. El operador NOT puede ser redefinido siempre y cuando sea continuo y estrictamente decreciente. La siguiente figura muestra algunos ejemplos alternativos de definición:  # Reglas Difusas La mayoría de las decisiones que la gente toma son decisiones lógicas, miran la situación, la valoran, y toman una decisión basándose en ella. La forma generalizada de una decisión de este tipo se llama **Modus Ponens Generalizado**, que tiene la forma:  Esta forma de razonamiento lógico es bastante estricto, y pocas veces en la vida real podemos afirmar que las condiciones expresadas son totalmente ciertas o totalmente falsas. La Lógica Difusa pierde esta forma estricta diciendo que B se dará con más opciones si la veracidad de A es más alta, donde ahora A y B toman valores difusos. El razonamiento anterior requiere que se defina un conjunto de reglas que lo lleven a cabo. Estas reglas son reglas lingüísticas que relacionan diferentes conjuntos y valores difusos. La forma general de estas reglas es: *si $x$ está en $A$, entonces $y$ está en $B$*, donde $x$ e $y$ son valores difusos en los conjuntos difusos $A$ y $B$, respectivamente (y que vendrán definidos por medio de sus funciones de pertenencia). !!!side:5 Sabri, N., Aljunid, S. A., Salim, M. S., Badlishah, R. B., Kamaruddin, R., & Malek, M. A. (2013). Fuzzy inference system: Short review and design. Int. Rev. Autom. Control, 6(4), 441-449. Las reglas lingüísticas se usan para relacionar las entradas con las salidas, pero hemos de ver cómo se puede hacer una valoración correcta de ellas siguiendo un cálculo fiable y verificado. Ha habido varias propuestas para determinar la ejecución de estas reglas, las más importantes han sido los métodos de inferencia y agregación de Mamdani, Larsen, Takagi-Sugeno-Kang, y Tsukamoto [5]. Desde un punto de vista práctico se usan fundamentalmente dos métodos para modelar la implicación, uno de ellas es por medio del **mínimo** (que **trunca** la función de pertenencia del consecuente con el valor del antecedente), y el otro por medio del **producto** (que **escala** la función del consecuente de acuerdo al antecedente). Las figuras siguientes muestran la aplicación de estos métodos sobre las mismas reglas con los mismos valores, donde la gráfica verde muestra el resultado de la implicación superpuesta al conjunto borroso de la consecuencia, para que se vea claramente el efecto obtenido: