Simulación con réplicas

Con la excepción del experimento de Simulation, todos los experimentos de AnyLogic se pueden simular con réplicas. La Simulation, que es el tipo seleccionado por default del programa debe usarse cuando desee ejecutar su modelo con la animación gráfica activa.

En esta sección, utilizaremos el experimento de Parameters Variation con réplicas y analizaremos la salida del modelo por muestreo. Si esta es su primera experiencia con la simulación, puede que no quede claro qué son las réplicas y para qué sirven, por lo que aquí hay una explicación muy básica: como hay aleatoriedad en el sistema (por ejemplo, el servicio al cliente no siempre tiene la misma duración - AnyLogic dibuja un valor para cada una de las operaciones, según la distribución que hemos definido), no sería apropiado sacar conclusiones sobre el desempeño de la sucursal bancaria después de una sola ejecución del modelo. En estos casos, se debe ejecutar el modelo repetidamente y analizar el conjunto de resultados obtenidos. Las réplicas son simplemente ejecuciones del mismo escenario, es decir, del mismo modelo con los mismos parámetros de entrada (y diferentes semillas para generar números aleatorios).

Por ejemplo, considere que desea estimar la ocupación promedio de los centros de llamadas y que ha estimado que 10 réplicas es una cantidad adecuada para sacar sus conclusiones. En este caso, utilizará los 10 valores de ocupación promedio (cada réplica genera un resultado) para calcular su promedio, interpretando este resultado como representativo de la operación real. En otras palabras, hará un análisis de muestra y su tamaño de muestra es n= 10.

Antes de ensuciarse las manos, una advertencia de algo interesante: AnyLogic ejecuta experimentos con replicaciones con procesamiento paralelo, de modo que desencadena una replicación por núcleo disponible en la CPU de su computadora.

Crear nuevos experimentos es intuitivo, solo use la secuencia de comandos del menú desplegable File> New> Experiment:

El primer paso es crear elementos de recopilación de datos (Dataset, Statistics, Histogram Data etc.), a partir de los cuales puede se pueden extraer las distribuciones de los parámetros de salida. Aunque ya hemos creado varias salidas para el modelo, todas se crearon en el experimento de Simulation. En el experimento ParametersVariation: Main, todavía no hay una sola salida.

Usaremos dos salidas en el análisis: el tiempo promedio en el sistema y el uso promedio de cajeros. Por lo general, cuando simulamos un modelo con réplicas, tenemos uno o más valores de salida del modelo y queremos estimar las estadísticas descriptivas de estos valores. AnyLogic ofrece varias opciones para esto, pero para este primer contacto con la herramienta, sugiero comenzar con el bloque Statistics en la paleta Analysis.

Después de un poco de práctica, un conjunto de pasos es simple:

  • Determinar la estadística de interés (en este caso, el uso de cajeros);

  • Cree un bloque de Statistics con la opción de actualizar los valores Data update en la opción Do not update data automatically;

  • Al final de cada réplica, agregue al bloque Statistics el valor de la estadística de interés y el resultado de la réplica, utilizando el campo After simulation run en ventana Properties del experimento.

Empecemos por crear un bloque Statistics con el nombre usoDeCajeros:

Deje la opción de actualizar datos en la opción Do not update data automatically:

Nuestro objetivo es agregar, al final de cada réplica realizada, los resultados de la respectiva réplica en el bloque usoDeCajeros. Vuelva a la pestaña Projects, seleccione ParametesVariation: Main y, en la ventana Properties, ubique la línea After simulation run, en el menú de Java actions:

Esta línea de comando (que actualmente está vacía) siempre se ejecuta cuando AnyLogic termina de simular una réplica.

El bloque Statistics tiene la función add() exactamente para esto, por lo que la expresión para agregar un valor al bloque usoDeCajeros sería algo como:

  • usoDeCajeros.add (... algunas estadísticas ...)

o (acostumbrarse al comando Crtl + espacio):

Nuestro modelo ya calcula la ocupación promedio de los cajeros, dentro del bloque Resource Pool (el que está en nuestro Main y la cajasDeAsistencia), mediante una función llamada utilization(). Por lo tanto, para acceder a él, simplemente escriba: cajasDeAsistencia.utilization().

Pero hay un detalle más: si apoya el ratón sobre la pequeña lámpara amarilla en la línea After simulation run, recibirá la pista de la palabra root.

Con el comando root, accede a cada réplica tan pronto como finaliza. Vea en la figura cómo se comandó completo (en cada punto escrito, Crtl + espacio, no olvide el punto y coma al final):

Un breve resumen de lo que hemos hecho hasta ahora:

  1. Hemos creado un bloque Statistics usoDeCajeros dentro de Parameters Variation;

  2. En las propiedades del experimento de Parameters Variation, colocamos en el campo After simulation run de la pestaña de Java actions, el comando:

usoDeCajeros.add (root.cajasDeAsistencia.utilization ())

Ahora debe dirigir su atención a la ventana de propiedades del experimento, en la barra Replications:

La opción Use Replications abre el resto de las opciones de la ventana:

  • Fixed number of replications para realizar un número fijo de replicaciones;

  • Varying number of… para realizar un número de repeticiones de modo que se asegure que el intervalo de confianza para un dado valor (parámetro of expression) sea un porcentaje (parámetro Error percent) de su valor promedio.

Otra cosa importante: el valor default de anylogic es mantener la semilla de números aleatorios fijos, asegurando que los resultados de las simulaciones con mismo valor semilla sean siempre iguales (incluso si se ejecutan en diferentes computadoras, por ejemplo). Esto se aplica incluso entre réplicas, lo que nos obliga a informar a AnyLogic que queremos una semilla diferente para cada simulación. Esto se hace en la pestaña Randomness, cambiando la opción semilla a Random seed:

Ahora simplemente simula y tendrá el resultado de la simulación para el número deseado de repeticiones.

Observaciones:

  • El bloque Statistics tiene varias funciones para extraer la media, el valor más pequeño, la varianza, etc. ¡Vea las opciones en Ayuda!

  • La secuencia de pasos anterior también se puede utilizar para el bloque Dataset. ¿Cuándo debería usar Dataset? Cuando desee almacenar la muestra, los resultados de cada replicación (por el contrario, el bloque Statistics no conserva la muestra utilizada en los cálculos);

  • El Experimento de Parameters Variation, permite simular con variación de parámetros. Por ejemplo, podríamos simular nuestra sucursal bancaria para valores del número de casillas abiertas iguales a 1, 2, 3, 4… En este caso hay que tener cuidado, ya que un solo bloque de Statistics no sería suficiente. Necesitaríamos un bloque de estadísticas para cada parámetro de entrada diferente. Se escapa del espíritu de este tutorial, pero una buena alternativa en este caso sería utilizar Colecciones.

Última actualización