El Autómata Celular; es un desarrollo personal; existen tantos tipos de automatas celulares como seamos capaces de imaginar.

Yo voy a utilizar la base de la maquina de Turing y voy a añadir una maquina de Turing en cada una de las posiciones de memoria de la maquina principal.De momento no lo complicaré mucho.

Consiste en un conjunto de maquinas de Turing funcionando a la vez y compartiendo datos de una maquina a otra. Lo realizaré con una base binaria; también voy ha realizarlo con la base Genética de cuatro elementos; aunque se pueden utilizar con cualquier clase de figura, alfabeto, etc.

La idea es crear una superficie de memoria; en este caso voy a utilizar 1024 posiciones, como en la maquina de Turing, y en cada una de esas posiciones existirán otras maquinas de Turing secundarias.

Estas maquinas secundarias tendrán los mismos parámetros que la principal; pero, añadiré una variante que hace más interesante la herramienta. En las maquinas secundarias las posiciones de memoria no tienen por que ser de 1024 posiciones que serán una maquina de Turing como la que hemos construido anteriormente; sino que, le vamos a dar más posibilidades de posiciones; por ejemplo. 512 y 1024,

Para seleccionar cuantas posiciones de memoria tendrá cada elemento principal, realizaremos un calculo aleatorio, es decir no podemos seleccionar los elementos sino que el propio programa los seleccionará aleatoríamente.

Para calcular el valor de una de las posiciones de memoria del Autómata celular principal o primario; será necesario realizar el calculo de la maquina de Turing interior. En esta versión seguiremos las normas de la maquina de Turing; permitiendo ir hacia una dirección y realizando un calculo especifico sobre el elemento a operar. También podremos decir cuantos elementos operamos a la vez.

Existe una manera de incluir nuestros datos; si queremos realizar alguna prueba. Vamos a guardar los datos en archivos de texto;

- Los parámetros principales están en: “automata.txt”;

- Los datos de la maquinas están en: “automata_Datos.txt”;

- La posición actual se guarda en: “automata_Posicion.txt”.

Todos los datos están guardados en formato texto; por tanto; podremos recuperarlos cuando necesitemos hacerlo; o, modificarlos sobre los archivos.

Estos archivos se sobrescriben siempre; por tanto, debe realizar una copia si desea conservar los datos anteriores.

De momento en esta herramienta no vamos a incluir el tratamiento de tiempos; de manera que, en todas las maquinas se utilizarán los mismos parámetros.

La aplicación se compone de tres archivos .CPP de C++, con sus correspondientes archivos de cabecera .h. En esta aplicación ya voy incluyendo la estructura necesaria para la programación estructurada; aunque aun, no voy a comenzar a programar con clases, ni objetos complejos, aunque ya utilizo alguno.

La idea de las herramientas, en este proyecto, es comenzar a programar desde el inicio como se hacia en los comienzos de la informática e ir evolucionando; al mismo ritmo que evolucionan nuestra herramientas y sus funciones.

Si desea descargar los ficheros fuente; son los que estan a continuación:

El desarrollo esta hecho con Eclipse bajo Ubuntu; pero, funciona sobre cualquier plataforma; ya que no tiene añadidos particulares.

automata.h

automata.cpp

funciones.h

funciones.cpp

util.h

util.cpp

 

Si desea ejecutarla descargue el siguiente Link: Autómata Celular C++

Para ejecutarlo debe realizar estos pasos:

En Windows: seleccionelo y ejecutelo.

 

En linux: Despues de la descarga, deberá dar permisos de ejecución al archivo y ejecutarlo desde un terminal.

El Autómata Celular en C++ utiliza las entradas y salidas estandar; se utiliza menus de caracteres como entrada. Es la programación antigua, como se hacia antes de los sistemas graficos. 
Parametros
Tipo: nos permite elegir que tipo de maquina vamos a utilizar; Numerica(Binario) ó Genetica(A,T,C,G) Direccion: permite seleccionar la direccion que seguirá la maquina (Derecha) o (Izquierda)
Operación: permite seleccionar (Suma - OR -) o (Multiplicación - AND -)
 
SUMA:
Binario : 1+1=1 : 1+0=1 : 0+1=1 : 0+0=0
Genetico : A+A=A : A+T=C : A+C=G : A+G=C : T+T=T : T+A=G : T+C=G : T+G=T : C+C=T : C+A=G C+T=T : C+G=G : G+G=C : G+A=A : G+T=T : G+C=G
 
MULTIPLICACION:
Binario : 1*1=1 : 1*0=0 : 0*1=0 : 0*0=1
Genetico : A+A=T : A+T=G : A+C=A : A+G=A : T+T=A : T+A=C : T+C=G : T+G=T : C+C=G : C+A=G C+T=G : C+G=T : G+G=T : G+A=C : G+T=C : G+C=A
 
Unidades de Avance: Permite elegir cuantos elementos operarán en cada avance, dependiendo de los parametros se realizarán las operaciones selecionadas y sobre cuantas unidades, esto último es lo que esta seleccionando en este parametro
 
Archivos
Cuando selecciona guardar o recuperar siempre se realiza sobre un archivo fijo tenga en cuenta este detalle porque el archivo siempre se sobreescribe
Existen 2 archivos: -automata.txt- se guardan los parametros y en -automata-datos.txt- los datos aunque se pueden modificar, no es conveniente, utilice las herramientas del programa El calculo se realiza de forma secuencial; primero se calcula la tabla secundaria de cada elemento principal posteriormente se calcula el resultado con el elmento siguiente de la tabla principal esto puede variar dependiendo de los parametros que haya seleccionado
Tenga en cuenta: el valor de una posicion no es lo mismo que el indice que hace referencia a esa posicion ejemplo: el valor de una posicion puede ser -1- y para acceder a esa posicion el indice es: elemento: 4 ; posicion: 1001