10.2: Simulación interactiva con PyCx
- Page ID
- 115908
Podemos construir un modelo de simulación dinámica interactiva en Python con relativa facilidad, utilizando el archivo “pycxsimulator.py” de PyCx, que está disponible en http://sourceforge.net/projects/ pycx/files/
(también está directamente vinculado desde el nombre del archivo anterior si estás leyendo esto electrónicamente). Este archivo implementa una interfaz gráfica de usuario (GUI) interactiva simple para su propio modelo de simulación dinámica, que todavía está estructurado en los tres componentes esenciales: inicialización, observación y actualización, tal como hicimos en los capítulos anteriores.
Para usar pycxsimulator.py, es necesario colocar ese archivo en el directorio donde se encuentra su código de simulación. Su código de simulación debe estar estructurado de la siguiente manera:
Las tres primeras líneas y las dos últimas líneas deben estar siempre en su lugar; no se necesita ninguna modificación.
Trabajemos en algún ejemplo sencillo para aprender a usar pycxsimulator.py. Aquí construimos un modelo de un montón de partículas que se mueven aleatoriamente en un espacio bidimensionales. Pasaremos paso a paso por el proceso de implementación de este modelo de simulación.
Primero, necesitamos importar los módulos necesarios y definir los parámetros. En este ejemplo particular, un generador de números aleatorios gaussianos es útil para simular el movimiento aleatorio de las partículas. Está disponible en el módulo aleatorio
de Python. Existen diversos parámetros que son concebibles para este ejemplo. Como ejemplo, consideremos el número de partículas y la desviación estándar del ruido gaussiano utilizado para el movimiento aleatorio de las partículas, como parámetros del modelo. Los escribimos al principio del código de la siguiente manera:
A continuación se encuentra la función de inicialización. En este modelo, las variables necesarias para describir el estado del sistema son las posiciones de las partículas. Podemos almacenar sus\(y-\) coordenadas\(x-\) y en dos listas separadas, de la siguiente manera:
Aquí generamos n
partículas cuyas posiciones iniciales se muestrean a partir de una distribución gaussiana con media 0 y desviación estándar 1.
Después la visualización. Esto es bastante fácil. Podemos simplemente trazar las posiciones de las partículas como un diagrama de dispersión. Aquí hay un ejemplo:
La última opción, '.', en la función plot
especifica que dibuja una gráfica de dispersión en lugar de una curva. Finalmente, necesitamos implementar la función de actualización que simule el movimiento aleatorio de las partículas. No hay interacción entre las partículas en este modelo de simulación en particular, por lo que podemos actualizar directamente xlist
e ylist
sin usar cosas como nextxlist
o nextylist
:
Aquí, se agrega un pequeño ruido gaussiano con media 0 y desviación estándar sd
a las\(y-\) coordenadas\(x-\) y de cada partícula en cada paso de tiempo. Combinando estos componentes, el código completado se ve así:
Ejecuta este código, y encontrarás dos ventanas apareciendo (Fig. 10.1.1; pueden aparecer superpuestas o pueden estar ocultas debajo de otras ventanas de tu escritorio) 12.
Esta interfaz es muy minimalista en comparación con otras herramientas de software, pero aún puedes hacer operaciones interactivas básicas. Bajo la pestaña “Ejecutar” de la ventana de control (que aparece por defecto), hay tres botones autoexplicativos para ejecutar/pausar la simulación, actualizar el sistema solo por un paso y restablecer el estado del sistema. Al ejecutar la simulación, el estado del sistema se actualizará de forma dinámica y continua en la otra ventana de visualización. Para cerrar el simulador, cierre la ventana de control.
Bajo la pestaña “Configuración” de la ventana de control, puede cambiar cuántas veces se actualiza el sistema antes de cada visualización (default = 1) y la duración del tiempo de espera entre las visualizaciones (default = 0 ms). Las otras dos pestañas (“Parámetros” e “Información”) están inicialmente en blanco. Puede incluir información que se mostrará bajo la pestaña “Info” como una “docstring” (cadena colocada como primera declaración) en la función de inicialización. Por ejemplo:
Esta cadena de documentos adicional aparece bajo la pestaña “Info” como se muestra en la Fig. 10.1.2.
La animación generada por Code 10.6 reajusta frecuentemente el rango de la trama para que el resultado sea bastante difícil de ver. Además, la relación de aspecto de la gráfica no es 1, lo que dificulta ver la forma real de la distribución de las partículas. Busque en la documentación en línea de matplotlib (http://matplotlib.org/
) para averiguar cómo solucionar estos problemas.
1 Si está utilizando Anaconda Spyder, asegúrese de ejecutar el código en una consola simple de Python (no en una consola IPython). Puede abrir una consola simple de Python desde el menú “Consolas”.
2 Si estás usando Enthought Canopy y no puedes ejecutar la simulación, prueba lo siguiente:
1. Ir a la pestaña “Editar” → “Preferencias” → “Python” en Enthought Canopy.
2. Desmarque la casilla de verificación “Usar PyLab” y haga clic en “Aceptar”.
3. Elija “Ejecutar” → “Reiniciar kernel”.
4. Ejecuta tu código.
Si aún no funciona, vuelva a marcar la casilla de verificación “Usar PyLab” e inténtelo de nuevo.