Saltar al contenido principal
LibreTexts Español

11.3: Simulación de autómatas celulares

  • Page ID
    115735
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    A pesar de su capacidad para representar diversos fenómenos complejos no lineales, los CA son relativamente fáciles de implementar y simular debido a su discreción y homogeneidad.

    Fig. 11.6.PNG
    Figura\(\PageIndex{1}\):: Comportamiento típico de la CA binaria más conocida, el Juego de la Vida.

    Existen herramientas de software 2 y demostraciones interactivas en línea 3 ya disponibles para la simulación de autómatas celulares, pero no obstante es útil aprender a desarrollar un simulador de CA por ti mismo. Hagámoslo en Python, trabajando a través del siguiente ejemplo paso a paso. El modelo de CA que planeamos implementar aquí es un modelo de CA binario con la regla de gotitas [4]. Su función de transición de estado puede entenderse como un modelo de propagación de pánico entre individuos sentados en un gimnasio después de que se dispara una alarma de incendio. Aquí está la regla (que usa los barrios de Moore):

    • Un individuo normal se pondrá en pánico si está rodeado de cuatro o más individuos con pánico.
    • Un individuo con pánico seguirá siendo aterrorizado si está rodeado de tres o más individuos con pánico. De lo contrario, volverá a la normalidad.

    Tenga en cuenta que esta regla puede simplificarse aún más a la siguiente regla única:

    • Si hay cuatro o más individuos aterrorizados dentro del vecindario, la célula central se pondrá en pánico; de lo contrario se volverá normal.

    Aquí hay otras suposiciones modelo:

    • Espacio: 2-D,\(n×n\) (\(n = 100\)por el momento)
    • Condición límite: periódica
    • Condición inicial: Aleatorio (individuos con pánico con probabilidad\(p\); normales con probabilidad\(1−p\))

    Utilizaremos pycxsimulator.py para simulaciones de CA dinámicas. Al igual que antes, necesitamos diseñar e implementar los tres componentes esenciales: inicialización, observación y actualización.

    Para implementar la parte de inicialización, tenemos que decidir cómo vamos a representar a los estados del sistema. Dado que la configuración de este modelo de CA es una cuadrícula bidimensional regular, es natural usar la estructura de datos de matriz de Python. Podemos inicializarlo con estados asignados aleatoriamente con probabilidad\(p\). Además, en realidad deberíamos preparar dos matrices de este tipo, una para el paso de tiempo actual y la otra para el siguiente paso de tiempo, para evitar cualquier conflicto no deseado durante el proceso de actualización del estado. Entonces aquí hay un ejemplo de cómo implementar la parte de inicialización:

    Código 11.1.PNG

    Aquí, ceros ([a, b]) es una función que genera una matriz todo cero con a filas y b columnas. Mientras que config se inicializa con estados asignados aleatoriamente (1 para individuos con pánico, 0 para normal), nextconfig no lo es, porque se rellenará con los siguientes estados en el momento de la actualización del estado.

    Lo siguiente es la observación. Afortunadamente, pylab tiene una función incorporada imshow que es perfecta para nuestro propósito de visualizar el contenido de una matriz:

    Código 11.2.PNG
    Tenga en cuenta que la opción cmap en imshow es especificar el esquema de color utilizado en la gráfica. Sin él, pylab usa azul oscuro y rojo para valores binarios por defecto, que son bastante difíciles de ver.

    La parte de actualización requiere de algún pensamiento algorítmico. La función de transición de estado necesita contar el número de individuos con pánico dentro de un vecindario. ¿Cómo podemos hacer esto? Las posiciones de las celdas vecinas dentro del vecindario Moore alrededor de una posición\((x,y)\) pueden escribirse como

    \[{(x',y')|x-1 \leq x'\leq x+1, y-1 \leq y' \leq y+1}.\label{(11.3)} \]

    Esto sugiere que las celdas vecinas pueden ser barridas usando bucles anidados for para variables de coordenadas relativas, por ejemplo,\(dx\) y\(dy\), cada una que va de −1 a +1. Contar individuos con pánico (1's) usando esta idea se puede implementar en Python de la siguiente manera:

    Código 11.3.PNG
    Aquí, dx y dy son coordenadas relativas alrededor\((x,y)\), cada una variando de −1 a +1. Se agregan a x e y, respectivamente, para buscar el estado actual de la celda ubicada en\((x + dx,y + dy)\) en config. La expresión (...)% n significa que el valor dentro de los paréntesis está contenido dentro del rango [0, n − 1] por el operador mod (%). Esta es una técnica de codificación útil para implementar condiciones de límite periódicas de una manera muy simple.

    El código de conteo dado anteriormente necesita ser aplicado a todas las celdas del espacio, por lo que debe incluirse en otro conjunto de bucles anidados para que x e y barren sobre todo el espacio. Para cada ubicación espacial, se ejecutará el conteo, y se determinará el siguiente estado de la celda con base en el resultado. Aquí está el código completo para la actualización:
    Código 11.4 pt1.PNG

    Código 11.4 pt2.PNG

    Observe el intercambio de config y nextconfig al final. Esta es precisamente la misma técnica que hicimos para la simulación de sistemas dinámicos multivariables en los capítulos anteriores.

    Al juntar todos los códigos anteriores, el código del simulador completado en su totalidad se ve así:

    Código 11.5 pt1.PNG

    Código 11.5 pt2.PNG

    Código 11.5 pt3.PNG

    Código 11.5 pt4.PNG

    Cuando ejecuta este código, ve los resultados como los que se muestran en la Fig. 11.3.2. Como puede ver, con la configuración inicial con\(p = 0.1\), la mayoría de los estados de pánico desaparecen rápidamente, dejando solo unos cuantos grupos autosuficientes de personas con pánico. Pueden parecer gotitas de agua condensada, de ahí el nombre del modelo (regla de gotitas).

    Fig. 11.7.PNG
    Figura\(\PageIndex{2}\): Salida visual de Código 11.5. Izquierda: Configuración inicial con\(p = 0.1\). Derecha: Configuración final después de 20 pasos de tiempo.
    Ejercicio\(\PageIndex{1}\):

    Modificar Código 11.5 para implementar un simulador de Game of Life CA. Simular la dinámica a partir de una configuración inicial aleatoria. Mida la densidad del estado 1 en la configuración en cada paso de tiempo, y grafique cómo cambia la densidad a lo largo del tiempo. Esto se puede hacer creando una lista vacía en la función initialize, y luego haciendo la medición y agregando el resultado a la lista en la función observe. Los resultados almacenados en la lista se pueden trazar manualmente después de la simulación, o se pueden trazar junto a la visualización usando la función de subplot de pylab durante la simulación.

    Ejercicio\(\PageIndex{2}\):

    Modificar Código 11.5 para implementar un simulador de la regla mayoritaria CA en un espacio bidimensional. Luego conteste las siguientes preguntas realizando simulaciones:

    • ¿Qué sucede si cambias la proporción de estados binarios en la condición inicial?

    • ¿Qué pasa si aumentas el radio de los barrios?

    • ¿Qué pasa si aumentas el número de estados?

    La segunda revisión del modelo en el ejercicio anterior (aumentando el radio de los barrios) para la regla mayoritaria CA produce dinámicas espaciales bastante interesantes. Específicamente, los límites entre los dos estados tienden a enderezarse, y la escala característica de los rasgos espaciales se vuelve cada vez más grande con el tiempo (Fig. 11.3.3). Este comportamiento se denomina engrosamiento (para ser más específico, engrosamiento no conservado). Se puede ver en muchos contextos del mundo real, como distribuciones geográficas de distintos estados culturales/políticos/lingüísticos en poblaciones humanas, o tipos genéticos incompatibles en poblaciones animales/vegetales.

    Fig. 11.8.PNG
    Figura\(\PageIndex{3}\): Comportamiento de engrosamiento observado en una CA binaria con regla mayoritaria en una cuadrícula espacial bidimensional de 100 × 100 con condiciones de límite periódicas. El radio de los barrios se fijó en 5. El tiempo pasa de izquierda a derecha.

    Lo más interesante de este comportamiento de engrosamiento es que, una vez que se establecen límites claros entre dominios de diferentes estados, el comportamiento macroscópico del sistema puede describirse utilizando propiedades emergentes de esos límites, como sus tensiones superficiales y dirección de movimiento [41,42]. El destino final del sistema está determinado no por las frecuencias relativas de los dos estados en el espacio, sino por las características topológicas de los límites. Por ejemplo, si una gran “isla” de estados blancos está rodeada por un delgado “anillo” de estados negros, esta última minoría finalmente dominará, por pequeña que sea su proporción inicial (¡aunque esto todavía esté impulsado por la regla de la mayoría!). Este es un ejemplo ilustrativo que muestra lo importante que es considerar las propiedades macroscópicas emergentes de sistemas complejos, y cuán contra-intuitivos pueden ser sus comportamientos a veces.

    Aquí hay un dato más interesante sobre la dinámica de CA. El modelo de gotas/pánico discutido anteriormente tiene una propiedad interesante: Cuando se aumenta la densidad inicial de personas con pánico (e.g.,\(p = 0.3\)), el resultado cambia drásticamente. Como se ve en la Fig. 11.3.4, los racimos inicialmente formados tienden a unirse entre sí, lo que hace que su crecimiento sea imparable. Todo el espacio eventualmente se llenará con toda la gente asustada, lo que podría ser un desastre si se tratara de una situación real.

    Fig. 11.9.PNG
    Figura\(\PageIndex{4}\): Otra salida visual de Código 11.5. Izquierda: Configuración inicial con\(p = 0.3\). Derecha: Configuración después de 40 pasos de tiempo.

    Puede explorar el valor de\(p\) para descubrir que la transición entre estos dos comportamientos distintos tiene lugar en un rango bastante estrecho de\(p\). Este es un ejemplo de una transición de fase, que se define informalmente de la siguiente manera:

    Una transición de fase es una transición de propiedades macroscópicas de un sistema colectivo que ocurre cuando se varían sus condiciones ambientales o internas

    Un ejemplo familiar de transiciones de fase es la transición entre diferentes fases de la materia, es decir, sólida, líquida y gaseosa, que ocurre cuando se varían la temperatura y/o la presión. Las transiciones de fase se pueden caracterizar midiendo lo que los físicos llaman parámetros de orden 4 que representan cuán ordenado es un estado macroscópico del sistema. Una transición de fase puede entenderse como una bifurcación observada en las propiedades macroscópicas (es decir, parámetros de orden) de un sistema colectivo.

    Ejercicio\(\PageIndex{3}\):

    Implementar un setter de parámetros interactivo para\(p\) en Código 11.5. Luego realizar simulaciones sistemáticas con variables\(p\), e identificar su valor crítico por debajo del cual se forman clústeres aislados pero por encima del cual todo el espacio se llena de pánico.

    2 Lo más notable es Golly (http://golly.sourceforge.net/).

    3 Por ejemplo, echa un vistazo a las actividades interactivas de Wolfram Demostrations Project (demonstrations.wolfram.com/) y Shodor.org (http://www.shodor.org/interactivate/activities/).

    4 Tenga en cuenta que la palabra “parámetro” en este contexto significa un resultado de una medición, y no una condición o entrada como en “parámetros del modelo”.


    This page titled 11.3: Simulación de autómatas celulares is shared under a CC BY-NC-SA 3.0 license and was authored, remixed, and/or curated by Hiroki Sayama (OpenSUNY) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.