Lógica difusa, o cómo se programa el "más o menos"

Al final del episodio sobre sistemas expertos mencioné que existe una lógica que no es sólo cierto o falso, que tiene cosas intermedias. Ésa es la lógica difusa.

La reputación que tiene es peor que la que merece. Suena a matemáticas raras. Por dentro es, casi literalmente, una serie de multiplicaciones y sumas y se acabó.

Las piezas

Variables de entrada y de salida. Lo que mides y lo que quieres controlar.

Términos lingüísticos. Aquí está la idea buena. En vez de rangos numéricos, etiquetas habladas: muy frío, frío, temperatura normal, caliente, muy caliente. Palabras que usa una persona.

Funciones de membresía. Éstas convierten las etiquetas en números. ¿Qué tan "frío" son 5 grados? ¿Qué tan "frío" son 15? La respuesta no es sí o no, es un grado de verdad entre 0 y 1.

Y no las defines valor por valor. Pones un valor central —o dos— y de ahí dibujas una forma: una campana de Gauss, o un triángulo que sube hasta un pico y vuelve a bajar. La forma rellena todo lo demás. Nunca tienes que decidir a mano cuánto es 5.5 grados o 6.5.

Base de conocimiento. Las reglas de sí-entonces, que son las mismas de un sistema experto: si el agua está muy caliente, entonces gira la llave un poco hacia el lado frío.

Aquí una nota de honestidad. El ejemplo de la regadera lo encontré investigando, en un video, y el comentario más votado decía: "parece que este tipo nunca se ha bañado — apenas le giras un poco y ya empieza a estar bien fría, y luego le giras un poco hacia el otro lado y ya está hirviendo." Tenía razón. Supongamos que existen llaves bien reguladas.

El algoritmo completo

  1. Defines variables y rangos.
  2. Dibujas las funciones de membresía.
  3. Mides el estado actual del sistema.
  4. Fusificas: conviertes esa medición en porcentajes. Si tengo 5 grados, ¿qué porcentaje de "frío" es, qué porcentaje de "normal"? El mismo evento carga varios porcentajes a la vez.
  5. Aplicas las reglas, y como las entradas vienen en porcentajes, las acciones también salen en porcentajes. No es "haz esto", es "haz esto en un 70%".
  6. Defusificas: combinas todos esos resultados parciales en una sola acción, con un promedio ponderado de áreas. Un 20% de vuelta a la derecha, luego un 15% a la izquierda, y de ahí sale el número final.
  7. Aplicas esa acción al actuador.

Eso es todo. Suena complicado y las dos operaciones que dan miedo —fusificar y defusificar— son sumas y multiplicaciones.

Para qué sirve, con dos cosas que construí

En la universidad hice un carro autónomo en 2D con cuatro reglas, de esos juegos de carrito vistos desde arriba. Le simulé sensores, lo puse en una posición aleatoria, le di una sola instrucción manual —muévete hacia adelante— y lo dejé solo. Tomaba las curvas sin chocar.

La otra fue un controlador de posición para un motor de corriente directa con Arduino, con una plaquita de metal haciendo de puerta. Le decías la posición de salida que querías y las reglas de inferencia hacían el resto: si estás en esta posición y quieres llegar a esta otra, muévete hacia la derecha. Y como las funciones de membresía te dicen qué tan lejos estás, controlas también la velocidad: la puerta no se cierra de sopetón y se rompe, ni tarda mil horas.

Son prácticas de universidad, sí. Pero son pruebas de concepto que funcionan.

Ventajas y límites, sin adornos

A favor:

En contra:

Y una cosa que no tiene que ver

En este mismo episodio hablé de un podcast donde entrevistaban a una jugadora profesional de póker, y de una idea suya que me pareció mejor que todo lo demás: dejar de preguntar "¿estás seguro?" y empezar a preguntar "¿qué tan seguro estás?".

Es la misma idea que ésta, dicha sin matemáticas: casi nada es sí o no, y tratarlo como si lo fuera te hace perder información que sí tenías.


Este texto sale del episodio 013 del Podcast Algoritmos.

No se pudo guardar tu suscripción. Por favor, inténtalo de nuevo.
Tu suscripción ha sido exitosa.

Boletín

Recibe nuevos artículos por correo.