Autómatas Celulares y el juego de la vida en Mathematica

Mathematica puede manejar autómatas celulares, la función Cellular Automaton permite hacer uso de los mismos e incluye un conjunto de reglas prefabricadas para un sistema unidimensional.

ArrayPlot[CellularAutomaton[150, {{1}, 0}, 200]]

Muestra el gráfico del resultado, con cada punto negro como un 1 y cada punto blanco es un 0. En este caso está usando la regla número 150 e iniciando el grid con una celda encendida. En este segundo argumento se pueden poner condiciones iniciales diversas como una lista de unos y ceros (e.g. {0,0,0,1,1,0,0}). El tercer argumento es el número de iteraciones que va a realizar.

rule150

En este caso se realizaron 200 iteraciones y se puede ver que la regla 150 tiene un patrón regular. Sin embargo los resultados son muy diversos y dependiendo de la regla que se utilice varían. En total hay 265 reglas, el número de la regla es una ingeniosa etiqueta establecida por cual de las 8 diferentes posiciones de la regla está activa, cada una tiene un número asignado y la suma de los números genera una etiqueta única. En el caso de la regla 110 se puede observar un patrón aleatorio:

Regla110Autómata
Regla110Autómata

 

Y también existen reglas como la 30 que generan patrones si bien regulares mas bien un tanto complejos:

Regla 30 de autómata celular con 70 iteraciones
Regla 30 de autómata celular con 70 iteraciones

 

Cuando realmente se puede poner interesante el asunto es en la realización de reglas propias. Aquí voy a recontruir el conocido “juego de la vida”. En este juego las reglas son muy sencillas, se tiene un plano de 2 dimensiones (un flatland) en el que cada célula muerta cobra vida si tiene como vecinos (dentro de sus ochos posibilidades) a exactamente 3 células vivas y una célula viva muere si tiene menos de 2 células vivas como vecinas. Con este conjunto sencillo de reglas binarias se pueden obtener resultados interestantísimos. La forma de visualizarlos en Mathematica sería:

GameofLife = {224, {2, {{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}}, {1, 1}};
 ArrayPlot[#, ImageSize -> 90, Mesh -> True] & /@ 
  CellularAutomaton[
   GameofLife, {{{0, 0, 0}, {0, 1, 1}, {1, 1, 0}, {0, 1, 0}}, 0}, 30]

Donde al inicio declaramos la variable GameofLife, que serán las reglas específicas para el juego de la vida. En seguida se usa un código similar al que usamos anteriormente, sólo que aquí las condiciones iniciales se establecen en una matriz. En este caso la matriz muestra una figurita con 5 puntos activos:

Juego de la vida con comportamiento creciente
Juego de la vida con comportamiento creciente

En este caso el resultado que muestra es fascinante, el objeto parece ir cobrando vida propia.

En verdad se necesitan reglas muy simples para dar explicaciones de fenómenos muy complejos.  Incluso la explicación de la vida misma puede ser entendida en términos de interacciones con reglas súper sencillas. Este tipo de modelos nos pueden ayudar a entender que la existencia de un diseñador no es requerida para dar explicación a la mayoría si no es que a cualquier fenómeno.

Juego de la vida. Marius.
Juego de la vida. Marius.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s