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.
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:
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 .
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.
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.
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 ]
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 ).
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.
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".
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.
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.
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.
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.
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.
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.
Enfoques de modelado de sistemas:
Técnicas computacionales:
Software:
Disciplinas:
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace )