Ideas para un autómata celular basado en genes

A raíz de un buzz que publiqué sobre El Juego de la Vida, un colega hizo que me entrara el gusanillo de programar mi propio autómata celular. Lo más difícil de hacer algo así no es la propia programación, sino desarrollar un buen modelo que sea consistente y que pueda dar lugar a cosas interesantes. En los momentos de aburrimiento de alguna asignatura, esta semana he ido dando un poco de forma a este mundo que me gustaría crear.

A diferencia del de Conway, estos autómatas se podrán desplazar. El escenario, en un principio, sería una cuadrícula normal y corriente, en la que cada celda está conectada con sus ocho vecinas, lo cual quiere decir que una célula podría desplazarse como el rey en una partida de ajedrez.

Las acciones se sucederán por turnos, al final de los cuales cada célula tiene que satisfacer un mínimo de energía, por lo que su objetivo es desplazarse por el mapa en busca de comida (que aparecerá al azar al inicio de cada turno). Podrán ir almacenando los excedentes por si en algún momento no encuentra comida, y porque además de ese mínimo, si adquiere un determinado nivel de «reservas», podrá dividirse por mitosis en dos células iguales. En el momento de la división celular existirá un factor aleatorio de «malformaciones» que permitirá la variabilidad genética. Cada célula vivirá durante un número determinado de turnos, transcurridos los cuales morirá si no se ha reproducido.

Para localizar la comida utilizarán dos tipos de «sensores» a los que he llamado visión y olfato. La visión sólo funciona en la dirección hacia la que está mirando la célula, mientras que el olfato es omnidireccional. En la imagen superior, los puntos negros representan células, y línea blanca es la dirección en la que miran. A pesar de los colores, dudo que implemente una disminución en la calidad de la visión con la distancia, pero sí habrá algo como diferentes niveles permitiendo más alcance.

Otro de los genes determinará la velocidad, representando la cantidad de cuadrados que se puede desplazar en un tiempo dado. Sólo existirá el movimiento hacia delante (siendo delante cualquiera de los tres cuadrados adyacentes en su campo de visión) y el giro para mirar en otra dirección. Cada turno se dividirá en fases, probablemente cuatro, durante las cuales se sucederán las distintas acciones de las células. Si ven/huelen comida, se dirigirán a ella; en caso contrario girarán o se moverán aleatoriamente hasta encontrar algo. Para comer, basta con estar situados en la misma celda de la comida al finalizar cada fase.

En principio en cada fase la célula deberá decidir si moverse, girar, o quedarse a comer. Quizás en un futuro se podría implementar un sistema por puntos de movimiento en el que cada una de las acciones consuma distinto número y se puedan combinar. Al inicio de cada turno se descontará de la reserva la cantidad de comida que requiera la célula; si al final del turno la reserva es negativa, la célula morirá. Si es superior al umbral de reproducción, se dividirá. No hay problemas en que dos o más células se sitúen en la misma celda, pero si todas quieren comer, se dividiría el total equitativamente.

El juego básico de genes que he pensado son: visión, olfato, vida y velocidad, los cuales he explicado ya. Tengo alguno más en mente, que debería desarrollar más, como por ejemplo: reserva, capacidad de almacenar más recursos; hijos, pudiendo dividirse en más de dos células; ataque, quitando vida y evitando que una célula en la misma celda pueda se quede a comer.

Finalmente, cada tipo de genes tendrá varias versiones, siendo unos recesivos y otros dominantes. Esto implicará que las células tengan dos juegos distintos de genes, y sólo se hará efectivo uno de cada par. Aunque así se puedan complicar las cosas, esto permitirá que en los hijos de una célula determinada puedan reaparecer ciertas atributos  ocuridas en generaciones anteriores. Además, abre la puerta a una posible implementación futura en la que la reproducción se realice entre dos pares de células.

Los diferentes niveles de mejoría que proporcione cada gen, tendrán la contrapartida de que provocarán que la célula sufra un mayor consumo energético.

¿Alguna sugerencia, crítica o recomendación de mis lectores? Estoy abierto a cualquier idea puesto que para mí es todo un mundo que explorar.

Únete a la conversación

2 comentarios

  1. Bueno roldán, me alegra ver que la idea ha germinado en tí fructiferamente.
    Estaré atento a lo que vas desarrollando, en un principio mi idea era algo distinta, pero dudo que pueda llevarla a cabo con mi experiencia actual, así que esperaré un tiempo. De todas maneras lo que salga de aquí será muy beneficioso.

  2. Hola!

    No tengo ni idea de programacion, pero si un pokillo de celulas. Creo que tienes que incluir algo de comunicacion e intercambio. Muy pocas celulas viven solas, todas toman decisiones sobre como se relacionan con otras ( formar tejidos o no) y se comunican, mediante sustancias (hormonas y neurotransmisores). La forma en la que cooperan unas con otras es fundamental (tit for tat de Axelrod , etc).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *