hola,
gracias, creo que va muy bien! pues si, ahora tendras que empezar a ver que pex con la simulacion, y tienes razon, la manera de empezar es con cage, baja el ultimo cage, hazle pruebas, y ve entendiendo el modelo de automatas celulares de cage, ya que es algo idiosincratico.
tambien debes ir estudiando algo de pyrex. es casi lo mismo que python en cuanto a como se escribe, pero ya que birdcage esta en pyrex, habra cosas que se veran extranyas si no lees una intro sobre pyrex. en cualquier caso, no tienes que aprender a programar pyrex ahora, solo es un minimo pa que no se vea raro.
un automata celular consta de tres cosas, una gradilla de celdas (hence cellular), una lista de estados, una platilla de vecindad (neighborhood) para cada tipo de punto (los puntos en las orillas podrian ser distintos, pero en el nuestro todos los puntos son iguales, es homogeneo, pues) y una funcion de cambio de estado. la funcion de cambio de estado toma como entrada los estados de los vecinos del punto y regresa un estado (no lo pienses ahora, sigue leyendo y regresa a esta definicion). la vecindad de un punto es una lista de vecinos que puede o no incluirlo a el (si lo incluye se le llama centrada (centered), creo que en el nuestro si), pero como la lista esta basada en una plantilla, pues es similar para cada punto, y se calcula.
por ejemplo, una vecindad en una gradilla de 2 dimensiones podria ser: el centro, el centro mas uno en la 1ra dim (centro + (1,0)), el centro mas dos en la 2a dim (centro + (0,2)). seria una vecindad horrible (generalmente se toman simetricas respecto a los ejes, o incluso del tipo: todos los puntos con distancia al centro menor a D), pero igual, supon que el centro es el (3,4), pues la vecindad seria [(3,4),(4,4),(3,6)]. es una vecindad horrible pero centrada, je.
ahora bien, el unico chiste es este: en un tiempo dado cada punto esta en un cierto estado de la lista, y para pasar al siguiente momento (el siguiente tiempo), se aplica la funcion de cambio de estado a los vecinos de cada punto para determinar el estado del punto en el nuevo instante.
un ultimo punto al respecto de la implementacion de cage: si tienes una estructura de datos que tiene los estados de los puntos, y la vas actualizando conforme calculas el nuevo estado de los puntos, pues es mas rapido y eficiente, pero matematicamente no queda claro que sea un automata celular, y si lo fuera no seria el que se tiene pensado. cage permite esto, supongo que porque se tiene de a gratis en la implementacion y es mas rapido, asi que seria tonto no permitirlo. pero si se quiere cumplir con el formalismo matematico, pues lo que se hace es duplicar la lista (por decir algo, puede usarse otra estructura) de estados de los puntos (no confundir con la lista o catalogo de estados mencionada arriba), y updatearlos alternadamente, de manera que al calcular el nuevo estado de un punto, no importe si ya calculaste el de sus vecinos.
finalmente, casi no usamos la implementacion de cage de los agentes (corrigeme si me equivoco, Panx), aunque probablemente la nuestra esta loosely based en esa. y hay otras partes que no usamos mucho, asi que quizas conviene que antes de estudiar todo cage, mas bien leas un intro y luego uses la documentacion y el codigo correspondiente de cage como intro a los modulos del Panx. y bueno, los agente ahora no hacen mucho, asi que puedes empezar por entender y musicalizar el automata, y preocuparte por los agentes despues, mientras te damos algo de comportamiento en los agentes que valga medianamente la pena sonorizar.
siguele dando duro! estoy muy emocionado.
Un Abrazo,
Jergas
Un
|