stringtranslate.com

Simulación de eventos discretos

Una simulación de eventos discretos ( DES ) modela el funcionamiento de un sistema como una secuencia ( discreta ) de eventos en el tiempo. Cada evento ocurre en un instante particular en el tiempo y marca un cambio de estado en el sistema. [1] Entre eventos consecutivos, se supone que no ocurre ningún cambio en el sistema; por lo tanto, el tiempo de simulación puede saltar directamente al tiempo de ocurrencia del próximo evento, lo que se denomina progresión temporal del próximo evento .

Además de la progresión temporal del próximo evento, también existe un enfoque alternativo, llamado progresión temporal incremental , donde el tiempo se divide en pequeñas porciones de tiempo y el estado del sistema se actualiza de acuerdo con el conjunto de eventos/actividades que suceden en la porción de tiempo. [2] Debido a que no es necesario simular cada porción de tiempo, una simulación temporal del próximo evento generalmente puede ejecutarse más rápido que una simulación temporal incremental correspondiente.

Ambas formas de DES contrastan con la simulación continua en la que el estado del sistema cambia continuamente a lo largo del tiempo sobre la base de un conjunto de ecuaciones diferenciales que definen las tasas de cambio de las variables de estado.

En el pasado, estos tres tipos de simulación también se denominaban, respectivamente, simulación de programación de eventos, simulación de escaneo de actividades y simulación de interacción de procesos. También se puede observar que existen similitudes entre la implementación de la cola de eventos en la programación de eventos y la cola de programación utilizada en los sistemas operativos.

Ejemplo

Un ejercicio común para aprender a crear simulaciones de eventos discretos es modelar un sistema de colas , como clientes que llegan a la ventanilla de un banco para que un empleado los atienda. En este ejemplo, los objetos del sistema son Customer y Teller , mientras que los eventos del sistema son Customer-Arrival , Service-Start y Service-End . Cada uno de estos eventos tiene su propia dinámica definida por las siguientes rutinas de eventos:

  1. Cuando ocurre un evento de Llegada de Cliente , la variable de estado queue-length se incrementa en 1, y si la variable de estado teller-status tiene el valor "disponible", se programa un evento de seguimiento de Inicio de Servicio para que ocurra sin demora, de modo que el cliente recién llegado será atendido inmediatamente.
  2. Cuando ocurre un evento de inicio de servicio , la variable de estado teller-status se establece en "ocupado" y se programa un evento de seguimiento de fin de servicio con un retraso (obtenido al muestrear una variable aleatoria de tiempo de servicio ).
  3. Cuando se produce un evento de fin de servicio , la variable de estado queue-length se reduce en 1 (lo que representa la salida del cliente). Si la variable de estado queue-length sigue siendo mayor que cero, se programa un evento de seguimiento de inicio de servicio para que se produzca sin demora. De lo contrario, la variable de estado teller-status se establece en "disponible".

Las variables aleatorias que necesitan ser caracterizadas para modelar este sistema estocásticamente son el tiempo entre llegadas para eventos recurrentes de llegada de clientes y el tiempo de servicio para los retrasos de los eventos de fin de servicio .

Componentes

Estado

Un estado del sistema es un conjunto de variables que captura las propiedades más destacadas del sistema que se va a estudiar. La trayectoria del estado a lo largo del tiempo S(t) se puede representar matemáticamente mediante una función escalonada cuyo valor puede cambiar cada vez que se produce un evento.

Reloj

La simulación debe realizar un seguimiento del tiempo de simulación actual, en cualquier unidad de medida que sea adecuada para el sistema que se está modelando. En las simulaciones de eventos discretos, a diferencia de las simulaciones continuas, el tiempo "salta" porque los eventos son instantáneos: el reloj salta al siguiente momento de inicio del evento a medida que avanza la simulación.

Lista de eventos

La simulación mantiene al menos una lista de eventos de simulación. A esto a veces se le llama el conjunto de eventos pendientes porque enumera los eventos que están pendientes como resultado de un evento simulado previamente pero que aún no se han simulado. Un evento se describe por el momento en el que ocurre y un tipo, que indica el código que se utilizará para simular ese evento. Es común que el código del evento esté parametrizado, en cuyo caso, la descripción del evento también contiene parámetros para el código del evento. [ cita requerida ] La lista de eventos también se conoce como lista de eventos futuros (FEL) o conjunto de eventos futuros (FES). [3] [4] [5] [6]

Cuando los eventos son instantáneos, las actividades que se extienden en el tiempo se modelan como secuencias de eventos. Algunos marcos de simulación permiten especificar el tiempo de un evento como un intervalo, lo que indica la hora de inicio y la hora de finalización de cada evento. [ cita requerida ]

Los motores de simulación de un solo subproceso basados ​​en eventos instantáneos tienen solo un evento actual. Por el contrario, los motores de simulación de múltiples subprocesos y los motores de simulación que admiten un modelo de eventos basado en intervalos pueden tener múltiples eventos actuales. En ambos casos, existen problemas importantes con la sincronización entre eventos actuales. [ cita requerida ]

El conjunto de eventos pendientes se organiza típicamente como una cola de prioridad , ordenada por tiempo de evento. [7] Es decir, independientemente del orden en el que se agreguen los eventos al conjunto de eventos, se eliminan en orden estrictamente cronológico. Se han estudiado varias implementaciones de colas de prioridad en el contexto de la simulación de eventos discretos; [8] las alternativas estudiadas han incluido árboles de dispersión , listas de omisión , colas de calendario , [9] y colas de escalera. [10] [11] En máquinas masivamente paralelas , como CPU de múltiples núcleos o de muchos núcleos , el conjunto de eventos pendientes se puede implementar basándose en algoritmos no bloqueantes , para reducir el costo de sincronización entre los subprocesos concurrentes. [12] [13]

Por lo general, los eventos se programan de forma dinámica a medida que avanza la simulación. Por ejemplo, en el ejemplo del banco mencionado anteriormente, el evento LLEGADA DEL CLIENTE en el momento t incluiría, si la COLA DEL CLIENTE estuviera vacía y el CAJERO estuviera inactivo, la creación del evento posterior SALIDA DEL CLIENTE que se produciría en el momento t+s, donde s es un número generado a partir de la distribución TIEMPO DE SERVICIO. [ cita requerida ]

Generadores de números aleatorios

La simulación debe generar variables aleatorias de varios tipos, según el modelo del sistema. Esto se logra mediante uno o más generadores de números pseudoaleatorios . El uso de números pseudoaleatorios en lugar de números verdaderamente aleatorios es una ventaja en caso de que sea necesario volver a ejecutar una simulación con exactamente el mismo comportamiento.

Uno de los problemas con las distribuciones de números aleatorios utilizadas en la simulación de eventos discretos es que las distribuciones de estado estable de los tiempos de los eventos pueden no conocerse de antemano. Como resultado, el conjunto inicial de eventos colocados en el conjunto de eventos pendientes no tendrá tiempos de llegada representativos de la distribución de estado estable. Este problema se resuelve típicamente mediante el arranque del modelo de simulación. Solo se hace un esfuerzo limitado para asignar tiempos realistas al conjunto inicial de eventos pendientes. Sin embargo, estos eventos programan eventos adicionales y, con el tiempo, la distribución de tiempos de eventos se acerca a su estado estable. Esto se llama arranque del modelo de simulación. Al recopilar estadísticas del modelo en ejecución, es importante ignorar los eventos que ocurren antes de que se alcance el estado estable o ejecutar la simulación durante el tiempo suficiente para que el comportamiento de estado estable abrume el comportamiento de arranque. (Este uso del término arranque se puede contrastar con su uso tanto en estadística como en computación ).

Estadística

La simulación suele realizar un seguimiento de las estadísticas del sistema , que cuantifican los aspectos de interés. En el ejemplo del banco, resulta interesante realizar un seguimiento de los tiempos de espera medios. En un modelo de simulación, las métricas de rendimiento no se derivan analíticamente de distribuciones de probabilidad , sino como promedios de réplicas , es decir, de diferentes ejecuciones del modelo. Por lo general, se construyen intervalos de confianza para ayudar a evaluar la calidad del resultado.

Condición final

Como los eventos se basan en el proceso de arranque, en teoría una simulación de eventos discretos podría durar indefinidamente. Por lo tanto, el diseñador de la simulación debe decidir cuándo terminará la simulación. Las opciones típicas son "en el momento t" o "después de procesar n cantidad de eventos" o, de manera más general, "cuando la medida estadística X alcance el valor x".

Enfoque de tres fases

Pidd (1998) ha propuesto el enfoque de tres fases para la simulación de eventos discretos. En este enfoque, la primera fase consiste en saltar al siguiente evento cronológico. La segunda fase consiste en ejecutar todos los eventos que ocurren incondicionalmente en ese momento (estos se denominan eventos B). La tercera fase consiste en ejecutar todos los eventos que ocurren condicionalmente en ese momento (estos se denominan eventos C). El enfoque de tres fases es un refinamiento del enfoque basado en eventos en el que los eventos simultáneos se ordenan de manera de hacer el uso más eficiente de los recursos informáticos. El enfoque de tres fases se utiliza en varios paquetes de software de simulación comerciales, pero desde el punto de vista del usuario, los detalles del método de simulación subyacente generalmente están ocultos.

Usos comunes

Diagnóstico de problemas de proceso

Los métodos de simulación están especialmente bien equipados para ayudar a los usuarios a diagnosticar problemas en entornos complejos. La teoría de las restricciones ilustra la importancia de comprender los cuellos de botella de un sistema. Identificar y eliminar los cuellos de botella permite mejorar los procesos y el sistema en general. Por ejemplo, en las empresas manufactureras, los cuellos de botella pueden crearse por exceso de inventario, sobreproducción , variabilidad en los procesos y variabilidad en el enrutamiento o la secuenciación. Al documentar con precisión el sistema con la ayuda de un modelo de simulación, es posible obtener una vista aérea de todo el sistema.

Un modelo funcional de un sistema permite a la dirección comprender los factores que impulsan el rendimiento. Se puede crear una simulación que incluya cualquier cantidad de indicadores de rendimiento , como la utilización de los trabajadores, la tasa de entregas a tiempo, la tasa de desperdicios, los ciclos de efectivo, etc.

Aplicaciones hospitalarias

Por lo general, varias disciplinas quirúrgicas comparten un quirófano. Si se comprende mejor la naturaleza de estos procedimientos, es posible aumentar la cantidad de pacientes atendidos. [14] Ejemplo: si una cirugía cardíaca dura una media de cuatro horas, cambiar el horario de un quirófano de ocho horas disponibles a nueve no aumentará la cantidad de pacientes atendidos. Por otro lado, si una intervención de hernia dura una media de veinte minutos, es posible que añadir una hora adicional tampoco aumente la cantidad de pacientes atendidos si no se tiene en cuenta la capacidad y el tiempo medio que se pasa en la sala de recuperación.

Ideas para mejorar el rendimiento de las pruebas de laboratorio

Muchas ideas de mejora de sistemas se basan en principios sólidos y metodologías comprobadas ( Lean , Six Sigma , TQM , etc.), pero no logran mejorar el sistema en su conjunto. Un modelo de simulación permite al usuario comprender y probar una idea de mejora del rendimiento en el contexto del sistema en su conjunto.

Evaluación de decisiones de inversión de capital

El modelado de simulación se utiliza habitualmente para modelar posibles inversiones. Mediante el modelado de inversiones, los encargados de tomar decisiones pueden tomar decisiones informadas y evaluar posibles alternativas.

Simuladores de red

La simulación de eventos discretos se utiliza en redes informáticas para simular nuevos protocolos y diferentes arquitecturas de sistemas (distribuidos, jerárquicos, centralizados, P2P) antes de la implementación real. Es posible definir diferentes métricas de evaluación, como tiempo de servicio, ancho de banda, paquetes descartados, consumo de recursos, etc.

Véase también

Enfoques de modelado de sistemas:

Técnicas computacionales:

Software:

Disciplinas:

Referencias

  1. ^ Stewart Robinson (2004).Simulación: la práctica del desarrollo y uso de modelos.Wiley.
  2. ^ Matloff, Norm. "Introducción a la simulación de eventos discretos y al lenguaje SimPy" (PDF) . Consultado el 24 de enero de 2013 .
  3. ^ Park, Hyungwook; Fishwick, Paul A. (2010). "Un marco de aplicación basado en GPU que admite simulación rápida de eventos discretos". Simulación . 86 (10): 613–628. doi :10.1177/0037549709340781. ISSN  0037-5497. S2CID  9731021.
  4. ^ Dannenberg, Roger. "Introducción a la simulación de eventos discretos". Facultad de Informática Carnegie Mellon . Consultado el 11 de marzo de 2022 .
  5. ^ Güneş, Mesut. "Capítulo 3: Principios generales" (PDF) . Universidad Libre de Berlín . Consultado el 11 de marzo de 2022 .
  6. ^ Damerdji, Halim; Glynn, Peter W. (1998). "Teoría del límite para el modelado del rendimiento de algoritmos de conjuntos de eventos futuros". Management Science . 44 (12): 1709–1722. doi :10.1287/mnsc.44.12.1709. ISSN  0025-1909. JSTOR  2634704.
  7. ^ Douglas W. Jones , ed. Implementaciones del tiempo, Actas de la 18.ª Conferencia de simulación de invierno, 1986.
  8. ^ Douglas W. Jones , Comparación empírica de implementaciones de colas de prioridad y conjuntos de eventos, Communications of the ACM, 29, abril de 1986, páginas 300–311.
  9. ^ Kah Leong Tan y Li-Jin Thng, SNOOPy Calendar Queue, Actas de la 32.ª Conferencia de simulación de invierno, 2000
  10. ^ Dickman, Tom; Gupta, Sounak; Wilsey, Philip A. (2013). "Estructuras de grupos de eventos para PDES en clústeres Beowulf de múltiples núcleos". Actas de la conferencia ACM SIGSIM de 2013 sobre Principios de simulación discreta avanzada - SIGSIM-PADS '13 . p. 103. doi :10.1145/2486092.2486106. ISBN 9781450319201. Número de identificación del sujeto  17572839.
  11. ^ Furfaro, Angelo; Sacco, Ludovica (2018). "Cola de escalera adaptativa". Actas de la Conferencia ACM SIGSIM de 2018 sobre principios de simulación discreta avanzada - SIGSIM-PADS '18 . págs. 101–104. doi :10.1145/3200921.3200925. ISBN 9781450350921.S2CID21699926  .​
  12. ^ Marotta, Romolo; Ianni, Mauro; Pellegrini, Alessandro; Quaglia, Francesco (2017). "Una cola de calendario resistente a conflictos y libre de bloqueos para plataformas PDES escalables de uso compartido". Actas de la Conferencia ACM SIGSIM de 2017 sobre principios de simulación discreta avanzada - SIGSIM-PADS '17 . págs. 15–26. doi :10.1145/3064911.3064926. hdl :11573/974295. ISBN . 9781450344890.S2CID30460497  .​
  13. ^ Lindén, Jonatan; Jonsson, Bengt (2013). "Una cola de prioridad concurrente basada en listas de saltos con contención mínima de memoria". Actas de la Conferencia de 2013 sobre principios de sistemas distribuidos - OPODIS 2013 . págs. 206–220. doi :10.1007/978-3-319-03850-6_15. ISBN 9783319038490.
  14. ^ John J. Forbus; Daniel Berleant (2022). "Simulación de eventos discretos en entornos sanitarios: una revisión". Modelado . 3 (4): 417–433. arXiv : 2211.00061 . doi : 10.3390/modelling3040027 .

Lectura adicional