lunes, 26 de marzo de 2012

Práctica No.2

Práctica No. 2 : Autómatas Celulares


Introducción

Para este ejercicio realizamos una actividad con el Juego de la Vida involucrando el tema de Autómatas Celulares y la Regla 30,  algunos puntos acerca de autómatas celulares dada por Wikipedia.org : 

  • Un autómata celular es un modelo matemático para un sistema dinámico que evoluciona en pasos discretos. 
  • Los autómatas celulares pueden ser usados para modelar numerosos sistemas físicos que se caractericen por un gran número de componentes homogéneos y que interactúen localmente entre sí. 
  • El juego de la vida es el mejor ejemplo de un autómata celular, diseñado por el matemático británico John Horton Conway en 1970.
  • La Regla 30 es una regla unidimensional binaria para Autómatas Celulares introducido por Stephen Wolfram en 1983.

Objetivo

El objetivo que nos planteamos al elegir esta actividad es el de elaborar un programa que simule el Juego de la Vida implementando la Regla 30 para autómatas celulares y que se capaz de, tomando un conjunto de condiciones iniciales(vector inicial), evaluarlo y arrojar una respuesta correcta.



Justificación
La elección de esta opción fue motivada debido a los patrones que se mostraron en clase al ejecutar este tipo de programas, es decir, los "dibujitos" o las animaciones que se pueden elaborar  implementando esta técnica, en resumen, nos llamo mucho la atención todo este tipo de animaciones.

Desarrollo
Desde un principio decidimos que la regla que utilizaríamos sería la Regla 30, ya que anteriormente ya habíamos tenido la oportunidad de trabajar con ella, después de esto 
lo siguiente que hicimos para desarrollar esta actividad fue la de plantear como se analizarían los grupos de células o celdas para poder dar el resultado y tambien como iba a ser guardado ese dato. 
Al haber analizado con detalle lo anterior coincidimos que el tipo de estructura de datos mas acorde al proyecto es la utilización de vectores o listas y que para analizarlos tendríamos que ir recorriendo de 3 en 3 celdas, utilizando rangos para no tocar las demás celdas e insertando el resultado en el vector que almacenaría la respuesta) debido a que el manejo de vectores o listas resulta más fácil en el lenguaje de programación Python (o al menos para nosotros), lo adoptamos y  comenzamos a estudiar y a programar en dicho lenguaje (ya que no teníamos conocimientos acerca del uso de este lenguaje) para seguir el proceso.

La implementación y las pruebas al principio se realizaron solo en modo terminal, hasta que el  programa arrojó los resultados correctos(para comprobarlo, utilizamos el ejercicio de autómatas celulares que venía en la guía que nos proporciono la Dra. Sara para el examen de medio curso) fue cuando entonces comenzamos en su implementación gráfica y continuamos realizando pruebas para este paso(buscando la opción más adecuada para la representación visual de las celdas nos topamos con que podríamos utilizar Labels con su respectivo color para representar las celdas) y continuando con las pruebas, despues teniamos que trabajaren como íbamos a ubicar las celdas(los labels negros/blancos) correctamente, buscamos y encontramos una opción (una función o método) que se utiliza alternativamente al método "pack()" para añadir elementos a una ventana y establecer su ubicación, esta función conocida como "grid()" que recibe como parámetros una coordenada (x,y) para establecer su ubicación en la ventana.
Se realizaron la respectiva pruebas y verificaciones(para que todo estuviera correcto) para esta última modificación y se concluyo el desarrollo de esta actividad.

Código
Los fragmentos de código más importantes de nuestro programa son en los que se analiza el vector base y se arroja la solución en otro :




Resultados
Los resultados obtenidos fueron los esperados, ya que el objetivo era que aplicando la Regla 30 se pudiera validar un conjunto de condiciones iniciales y se obtuviera una respuesta correcta. 

Los resultados se pueden apreciar mejor en el siguiente video, donde en primera instancia se evalúa el problema que se planteó en la guía del examen de medio curso y posteriormente se evalúan un conjunto de condiciones ingresadas al azar(sin sentido):



Dibujito :P


Conclusiones
En general, el aprendizaje en esta práctica fué y es muy grande, ya que nos vimos en la necesidad de implementar y aprender el lenguaje Python, tal vez no en su totalidad, pero si de una manera un poco más adentrada que otros cursos.
En cuanto a experiencias y recomendaciones se puede mencionar que para la realización de esta práctica(y muy posiblemente aplicable en otros casos) era necesario que la demostración final tenía que ser visual(gráfica),  este punto no fue el centro durante el desarrollo, si no que nos enfocamos primero en que funcionara correctamente aún en modo terminal y al final se implemento la parte gráfica.

Sabemos que nuestro programa no esta perfeccionado del todo, pero realiza las funciones para las cuales fue desarrollado, mas sin embargo se puede añadir nuevas opciones, que tal vez fueron pasadas por alto debido a su poca funcionalidad o su alta complejidad, y que fueron evitadas para no involucrar más tiempo en el desarrollo y poder entregar a tiempo, como por ejemplo:
  • Analizar mas conjuntos de condiciones iniciales, para elaborar más patrones de diseño.
  • Validar que los elementos que se ingresan sean exclusivamente de tipo binario.
  • Realizar un mejor manejo del uso de memoria para las listas o vectores
  • Establecer una especie de "zoom-in/zoom-out" para tener una mejor visión del resultado cuando se realizan evaluaciones de vectores grandes y/o grandes cantidades de iteraciones/ciclos.
Referencias:
-Definición de Autómatas Celulares en Wikipedia.
-Graficos con Phytom. Tkinter.  
-Guia de aprendizaje Phytom.


1 comentario:

  1. Chequen la formula para juzgar las nuevas casilllas, mientras menos heuristíco más facil podrán ingresarle la regla que se les ocurra.

    ResponderEliminar