jueves, noviembre 25, 2021

Lenia: ampliando el universo de Conway creando nuevas criaturas artificiales

En este artículo voy a hablaros de un mundo que realmente me apasiona desde hace ya mucho tiempo: la vida artificial. Además, si te interesa la Inteligencia Artificial es lógico que también te interese la vida artificial, ya que ambos mundos están estrechamente interconectados. Todo comenzó con el genial y maravilloso Juego de la Vida de Conway, el cual apareció en una sección del número de octubre de 1970 de la revista Scientific American

Figura 1: Lenia: ampliando el universo de Conway
creando nuevas criaturas artificiales 

Si no lo conocéis, antes de continuar os aconsejo que le echéis un vistazo a este artículo que publicamos en el blog Think Big de Telefónica, donde hablamos en profundidad de él. Por cierto, además de la trascendencia técnica del Juego de la Vida de Conway, su historia y también la de los autómatas celulares (en los cuales se basa) se mezclan Alan Turing o el Proyecto Manhattan entre otros. 

Figura 2: Libro de "Microhistorias: anécdotas y curiosiades de la historia
de la informática (y los hackers)" de Fran Ramírez y Rafel Troncoso 0xWord.

Y si te gustan estas historias de hackers, recuerda que puedes encontrar muchas más como esta en nuestro libro “Microhistorias: anécdotas y curiosidades de la Informática (y los hackers)”.

Primera evolución del Juego de la Vida de Conway: Smooth Life

El Juego de la Vida de Conway, como ya hemos comentado, data de 1970. Por aquella época no existían los ordenadores personales y la única forma de acceder a ellos era a través de universidades o grandes empresas. Hoy día, más de medio siglo después, el escenario ha cambiado “un poco”. Viendo la trascendencia del trabajo de Conway es lógico que este haya evolucionado hacia niveles realmente increíbles como habéis comprobado en el artículo que os mencionaba antes.

De hecho, con el Juego de la Vida de Conway logra el máximo logro, convertirse en una Máquina de Turing. Y por lo tanto, en una máquina Turing completo. Esto, explicado rápidamente, implica que una arquitectura que es capaz de cumplir el hecho de ser una Máquina de Turing Universal y emularse a sí misma.


Stephan Rafler publicó en 2011 un artículo científico llamado “Generalization of Conway's "Game of Life" to a continuous domain – SmoothLife”, cuya mayor diferencia respecto al Juego de la Vida de Conway está en una retícula o espacio no discreto, es decir, un espacio continuo. Las celdas infinitas del juego original son reemplazadas por otras llamadas celdas efectivas o effective grid y también los valores pueden ser ahora números reales en vez de únicamente enteros. 



Dicho de otra forma, se utilizan celdas las cuales forman a su alrededor en su zona de interacción, nuevas figuras geométricas como por ejemplo circulares. Por lo tanto, las reglas ahora son más complejas, aplicando nuevas ecuaciones a la hora de decidir el valor de una nueva celda después de una interacción. Esto genera entre otras maravillas, que el famoso “glider” o planeador pueda moverse en todas direcciones, rotar, etcétera. En el fantástico vídeo que podéis arriba, se habla desde su origen hasta su funcionamiento. Pero en este artículo vamos a hablar de un paso más allá dentro del universo de Conway.

Y llegó Lenia

En 2015 aparece Lenia, una variante nueva creada por Bert Wang-Chak Chan la cual mejora tanto el original como Smooth Life llegando a tener, de momento, hasta 400 especies nuevas y 18 familias. También utiliza un espacio-tiempo continuo además de otras reglas locales, similares a los anteriores proyectos, pero con algunos detalles que luego veremos. Además, hay nuevas características las cuales permiten organizarse, auto repararse, comunicarse, nuevos medios de crear movimiento, etc. Y los resultados son realmente espectaculares, dando una sensación de estar visualizando criaturas realmente biológicas y su comportamiento con el entorno.


La principal diferencia de Lenia con otros modelos de autómatas celulares es que son geométricos, “difusos” (fuzzy), resistentes y "resilientes". También se muestran nuevas formas de autopropulsión, autoorganización, polimorfismo, plasticidad, etc. Y quizás el punto más importante, más allá de su aplicación en la biología, esta nueva aproximación abre nuevas vías dentro de la Inteligencia Artificial.

Las nuevas reglas de Lenia

Las reglas del universo o del mundo (grid o retícula) en general son las mismas en su base respecto al resto de implementaciones. Es decir, existe un espacio donde cada elemento de la rejilla o píxel es una célula y además existe una evolución en el tiempo definida con fotogramas o frames. Si durante ese periodo de tiempo existe alguna relación con alguna celda vecina, tendrá lugar algún tipo de cambio determinando el valor de dicha celda en el siguiente avance del universo. Pero vamos a adentrarnos un poco en más en Lenia.

Voy a intentar explicar brevemente y a un nivel muy básico su funcionamiento, dejándome muchos conceptos atrás pero que nos puede servir como punto de partida. Si quieres más detalle te aconsejo echar un vistazo al artículo original o a este vídeo del cual he sacado la idea para el la explicación. Vamos a fijarnos en la siguiente fórmula la cual no es más que una evolución de la utilizada en el Juego de la Vida de Conway:


Antes de avanzar en su explicación debemos tener en cuenta el elemento que cambia totalmente las reglas y ofrece un nuevo enfoque de esta implementación: el kernel (K) y sus nuevas implementaciones. Un kernel (también llamado a veces máscara) se utiliza en una convolución para extraer características de, por ejemplo, una imagen. Es una matriz la cual sirve para conseguir una especie de filtro y obtener unos resultados nuevos de salida. De hecho, en procesamiento de imágenes y redes convolucionales se aplica este mismo concepto. 

Es más, el kernel es el “motor” principal de esta implementación para poder obtener nuevas interacciones con las otras células del mundo, abriendo un gran abanico de posibilidades y resultados asombrosos. Pues bien, ahora supongamos que tenemos una serie de celdas dentro de este nuevo universo con la siguiente estructura:

Figura 7: Estado inicial de las celdas en un universo Lenia

Y también este kernel simple:

Figura 8: Kernel a aplicar sobre las celdas

Si ahora centramos y superponemos el kernel sobre una de las celdas (en concreto la central de valor “1”), tendríamos el siguiente resultado:

Figura 9: Kernel aplicado sobre las celdas

Ahora comprobamos qué valores de nuestro kernel coinciden con los valores de las celdas. Es decir, observar qué valores de las celdas en el universo coinciden con los valores de las celdas en el kernel.

Figura 10: Kernel aplicado a las celdas y sus valores correspondientes
(kernel/celda)

Comprobamos que la única celda que coincide su valor con el kernel es la que hemos marcado en verde oscuro en la imagen anterior. Vamos a ver ahora cómo se traduce esta operación a la fórmula. El valor total del kernel se calcula multiplicando el valor de la celda del universo por el del kernel. El valor obtenido se suma valor obtenido con la misma operación de la siguiente celda y así sucesivamente hasta completar todas las celdas del kernel. En nuestro caso obtenemos el valor 1:

Figura 11: Valor total del kernel resultante.

Sustituimos el valor de la convolución en la ecuación:

Figura 12: Sustitución del valor del kernel en la fórmula
dentro de ese periodo de tiempo

El siguiente paso será determinar la función del mapeo de crecimiento. En el Juego de la Vida original esta función se calcula en función de los 8 puntos que rodean a la celda aplicando las reglas básicas originales. Es decir, nos fijamos en el número de celdas que tiene alrededor. Si la celda está muerta (0 en el caso del Juego de la Vida) vuelve a la vida (1) sólo si tiene tres celdas vivas. Y si la celda está viva, se mantiene viva sólo si tiene 2 o 3 vecinos vivos. 

Al aplicar una función de crecimiento (G) obtendremos los correspondientes valores: 0 sobrevive (se queda en valor 1), 1 nacimiento (de 0 a 1) y finalmente -1 lo cual supone su muerte (0). El caso de Lenia es similar, pero con algunas variaciones, esta vez utilizando valores con números reales. En el siguiente gráfico se muestra un ejemplo con un kernel tipo anillo en el apartado b) usando una función gaussiana:


Volviendo a la fórmula anterior y usando la función de mapeo de crecimiento sencilla, vamos a calcular los valores que nos devuelve la función de crecimiento siguiente. Vemos marcado en amarillo el valor obtenido del kernel, el cual corresponde al valor -1:

Figura 14: Valor obtenido de la función de crecimiento

Ya sólo nos quedaría sustituir los valores de incremento de tiempo y estado del universo. Suponiendo que son 1 (esto irá variando dentro del dominio de los números reales también), obtendremos finalmente un valor como, por ejemplo:

Figura 15: Sustitución de los valores obtenidos y resultado final

Vemos que el valor final es 0 pero debemos tener en cuenta que es posible que los valores acaben por encima de 1 o por debajo de 0, por eso los acotamos entre 0 y 1. A partir de este momento podemos variar los valores del kernel cambiando la forma de la máscara, la función de crecimiento, etcétera. La siguiente imagen nos puede servir para entender mejor los valores que hemos calculado comparando una función básica del Juego de la Vida con una de Lenia, en concreto comparando los parámetros de un “glider” (o planeador) cada uno con una máscara diferente. Podemos observar perfectamente su evolución e interacción con el universo:

Podemos observar las diferencias de cómo interactúan con el entorno.

Como ya hemos comentado, el kernel es el elemento fundamental que da forma y características a las nuevas criaturas de Lenia. Ya no estamos en un mundo binario, donde los valores de la celda eran 0 o 1. Ahora tenemos los números reales que podamos encontrar entre 0 y 1, así que este es el nuevo espacio donde viven estas nuevas entidades digitales. A partir de este momento ya sólo nos queda experimentar utilizando más de un universo, mezclarlos entre ellos, crear nuevas criaturas con diferentes kernels e incluso, utilizar matrices multidimensionales en vez de 2D (este tema se trata con detalle en el artículo de Lenia).

Figura 17: Walkthrough Lenia

En este pequeño vídeo podemos ver algunas de estas criaturas utilizando la implementación Python que podéis encontrar en este enlace de GitHub y también en detalle los diferentes ámbitos en acción como world, kernel, potential y field que hemos visto en la Figura 16.

La clave, los autómatas celulares y la IA

Esto es sólo una pequeña aproximación al fantástico mundo de Lenia y lo tremendamente importante que son los autómatas celulares para interconectar Biología e Inteligencia Artificial. Y si el objetivo de todo esto es simular vida, la combinación de ambos mundos es fundamental. Con el Juego de la Vida, Smooth Life y Lenia tenemos la base digital biológica para estudiar el comportamiento de criaturas artificiales. Su evolución y comportamiento en estos universos son una excelente herramienta para aplicar Inteligencia Artificial emulando estos patrones de evolución lo que nos permitirá simular escenarios muchos complejos. 

Algunas aplicaciones pueden ser desde la ya obvia simulación y aprendizaje del funcionamiento de las células biológicas, comportamiento de las partículas en Física, gestionar los atascos de tráfico o incluso nuevas vías de computación utilizando autómatas celulares. La Inteligencia Artificial y los autómatas celulares permiten ampliar y mejorar el mundo del reconocimiento de patrones y sobre optimización de todo tipo de problemas. En definitiva, con los autómatas celulares podemos básicamente hacer cosas como:
  • Experimentar con la evolución de la vida artificial en entornos simulados y adaptados a nuestras exigencias (vida artificial), con una aplicación directa con la robótica.
  • Crear nuevas vías o motores de computación
  • Modelar todo tipo de fenómenos y características asociados a la Biología, Física, Naturaleza.
  • ¿Alguien a dicho jugar a ser un dios 2.0? 😉
Happy Hacking!

Autor: Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

No hay comentarios:

Publicar un comentario