Buenas a todos, tengo que implementar un autómata celular en java, para, con ayuda de algoritmos genéticos, solucionar el problema de la mayoría.
Lo voy a hacer en java porque es lo que más entiende el que me va a corregir... el caso es que me han aparecido algunas dudas.
Para el autómata he pensado en una clase "Organismo" con los siguientes atributos y operadores:
- Una lista de células
- Una array con los distintos estados que puede tomar una célula en nuestro organismo.
- Una tabla de reglas, que són las que marcan el cambio de estado de una célula en concreto.
+ evolucionar() provoca una evolución de un paso en el organismo, tomando la tabla de reglas
+ evolucionaCelula(celula) provoca la evolución de una célula enconcreto
Para la célula:
- Estado , representa el estado en que se encuentra mi célula
+ cambiaEstado(nuevo_estado) cambia el estado de la célula
Ademas de todas las operaciones get, set, y add que me puedan ser útiles.
Vamos con el problema... la tabla de reglas:
La tabla de reglas tiene esta pinta.
(para un ejemplo sencillo)
El valor del centro representa mi célula, y el de los extremos los de las células adyascentes. Por ejemplo en la primera columna si mi célula está muerta (vale 0) y las dos adyascentes también pues permanece muerta. y en la última columna, si mi célula está viva (vale 1) y las de los extremos tambien (valen 1) entonces mi célula muere.
Se me han ocurrido algunas formas de diseñar en java una tabla de reglas, pero todas me parecen bastante chapuceras, y para una tabla de reglas sencilla puede funcionar, pero también tengo que trabajar sobre modelos de autómatas multidimensionales y eso ya se me podría ir de las manos.
Alguna sugerencia sobre los tipos de datos que me puede ser mas correctos?
He pensado en crear mi propio tipo abstracto de datos, Tabla de Reglas, con las operaciones comunes de una tabla de reglas, pero no se yo...
En fin, a ver si alguno puede echarme una mano. El tema de usar el algoritmo genético una vez que tengo el autómata celular mas o menos lo tengo controlado.
Saludos.