4.4. Lógica difusa (Fuzzy Logic).

 Hasta el siglo XX la lógica clásica se trabajaba con dos valores: Verdadero (1) o Falso (0). Pero durante el último siglo se comenzaron a crear nuevas lógicas que incorporaban más valores de certeza, por ejemplo la lógica de Lukasiewicz incorpora un nuevo valor, el de Medio Verdadero o Medio Falso según se vea. De esta forma ya tenemos tres valores (Estas lógicas se suelen llamar trivalentes) : Verdadero (1), Medio Verdadero (0.5) o Falso (0). Lo primera primera idea que nos viene a la cabeza es la seguir creando nuevos valores de verdad como vemos en la imagen donde ya tenemos 5 valores de verdad. Por ejemplo si una cosa sabemos casi seguro que es verdadera le asignaríamos el valor de verdad 0.75.

Si extendemos la idea a infinitos valores entre el 0 y el 1 hemos descubierto la Lógica Difusa. ¿Y para que coño sirve esta paranoia mental? Eso mismo pensaba la comunidad científica a mediados del siglo pasado, nadie apostaba un duro por la la Lógica Difursa. Pero llegaron los japoneses (Años 70) y le dieron utilidades prácticas que se usan hoy en día en todo el mundo. La primera aplicación práctica que le dieron fue la de frenar electrónicamente y con suavidad el Shinkansen (Tren bala) japonés.

Para frenar un coche normalmente vamos soltando el acelerador suavemente mientras frenamos suavemente calculando nosotros intuitivamente los que tardaremos en frenar etc, pero no solemos apretar el freno a fondo para frenar. Para hacer un programa que frenara un coche o un tren de forma automática lo primero que podríamos hacer sería: if(quieroParar) frenar(); . Esto haría que se frenara a lo bestia. Una mejora sería if(quieroParar & Velocidad_Alta) frenar_hasta_la_mitad(); else if(quieroParar & !VelocidadAlta) frenar_a_tope(). Si siguieramos introduciendo ifs hasta el infinito creando nuevos valores de Velocidad (Al igual que hacíamos al principio del artículo con los valores de Verdadero,MedioVerdadero, Falso etc) conseguiríamos un sistema fuzzy pero sería una chapuza. El ejemplo anterior es simplemente para que veais que frenar suavemente un tren de forma programada no es tan sencillo como podamos pensar a primera vista.

Veamos como hay que proceder para implementar un buen sistema fuzzy. Tener en cuenta que a partir de ahora trabajamos con números reales, es decir, entre el 100 y el 75 hay más valores, etc…


El eje vertical indica el valor de verdad de cada velocidad. El eje horizontal la velocidad.

En vez de explicar este esquema detenidamente, lo vamos a ver con un ejemplo práctico. Imaginaros que el tren viaja a 77km/h, operaríamos de la siguiente forma:

Buscamos en el eje horizontal la velocidad a la que vamos (77) y trazamos una vertical marcando las intersecciones con los triángulos. A partir de las intersecciones tomamos su valor de verdad mirando el eje vertical. En este caso tenemos dos intersecciones, la primera intersecta con el triángulo de Velocidad Media a una altura de 0.20 (Lo vemos en el eje vertical), la segunda intersección corta con el triángulo de Velocidad Alta a una altura de 0.45. Por lo tanto la consideración del sistema es que si vamos a 77 Km/h nuestra velocidad es 0.2 Media y 0.45 Alta. Es decir, hemos conseguido que el sistema tenga una estimación ‘difusa’ de la velocidad actual. Probad a sustituir otros valores de velocidad y veréis como lo que se obtiene tiene bastante sentido, si ponemos por ejemplo 98km/h saldrá un valor de 0.90 Alta etc.

Veis como hemos conseguido que el sistema pueda saber en cada momento una consideración sobre la velocidad que llevamos. A partir de los valores obtenidos se puede tomar ya una decisión sobre cuanto hay que pulsar el freno (Para explicar esto necesitaría unos cuantos posts ya que habría que crear otro esquema como el anterior para los valores del freno y combinarlo todo). Lo importante se que os quedéis con la idea de que al tener muchos valores entre Verdadero(Velocidad Alta) y Falso (Velocidad Lenta) podemos conseguir frenar de forma suave.

Si quisieramos tener un sistema más preciso (que frenara más suavemente) podríamos crear más triángulos que indicarna Velocidad Muy Alta, Velocidad Muy baja etc. Veamos un ejemplo para el diseño de un sistema de aire acondicionado. Con un aire acondicionado si queremos ahorrar energía y que los cambios de temperatura no sean muy bruscos se puede usar un sistema fuzzy para regular de forma automática su funcionamiento. Si programamos el aire acondicionado con if(temperatura>18) enfriar(); else calentar(); gastaremos mucha energía ya que estaremos continuamente pasando a más de 18 grados y después a menos de 18 grados, necesitamos un sistema fuzzy  Veamos como sería el esquema fuzzy de un sistema de aire acondicionado:


Supongo que con este esquema ya habréis pillado la idea, o quizás os he liado más.

Finalmente os muestro algunas aplicaciones prácticas además de las ya comentadas. Entre paréntesis pongo una pregunta para que veáis el porqué se usa un sistema fuzzy en estros aparatos.

Hoy en día los sistemas de lógica difusa están en las camaras de fotos para calcular si llega mucha o poca luz al diafragma (¿Poca, bastante, mucha luz?), en robots para que se muevan con suavidad (¿Velocidad del brazo Alta, Baja?), en sistemas de piloto automático y ontrol de aviones (¿Altura del avión Baja, Alta, Muy Alta?) o por ejemplo el sistema que acaba de sacar Toyota para aparcar automáticamente el coche (¿Cerca, Lejos, Muy Cerca, Muy Lejos del bordillo?.

Después de este artículo tan duro si algo no está bien explicado, hay alguna inconsistencia o no os habéis enterado de nada avisad.

Video:



Comentarios