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, no se supone que ocurra ningún cambio en el sistema; por lo tanto, el tiempo de simulación puede saltar directamente al tiempo de ocurrencia del siguiente evento, lo que se denomina progresión del tiempo del siguiente evento .
Además de la progresión del tiempo del siguiente evento, también existe un enfoque alternativo, llamado progresión del tiempo incremental , donde el tiempo se divide en pequeños intervalos de tiempo y el estado del sistema se actualiza de acuerdo con el conjunto de eventos/actividades que suceden en el intervalo de tiempo. [2] Debido a que no es necesario simular todos los intervalos de tiempo, una simulación de tiempo del siguiente evento generalmente puede ejecutarse más rápido que una simulación de tiempo 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.
Un ejercicio común para aprender a construir simulaciones de eventos discretos es modelar un sistema de colas , como clientes que llegan a un cajero de banco para ser atendidos por un empleado. En este ejemplo, los objetos del sistema son Cliente y Cajero , mientras que los eventos del sistema son Llegada del cliente , Inicio del servicio y Fin del servicio . Cada uno de estos eventos viene con su propia dinámica definida por las siguientes rutinas de eventos:
Las variables aleatorias que deben caracterizarse para modelar este sistema estocásticamente son el tiempo entre llegadas para eventos recurrentes de llegada del cliente y el tiempo de servicio para los retrasos de eventos de fin de servicio .
El estado de un 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 ocurre 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 a la hora de inicio del siguiente evento a medida que avanza la simulación.
La simulación mantiene al menos una lista de eventos de simulación. Esto a veces se denomina 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 que ocurre y un tipo, indicando el código que se utilizará para simular ese evento. Es común que el código de evento esté parametrizado, en cuyo caso, la descripción del evento también contiene parámetros para el código de evento. [ cita necesaria ] 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, dando la hora de inicio y la hora de finalización de cada evento. [ cita necesaria ]
Los motores de simulación de un solo subproceso basados en eventos instantáneos tienen un solo evento actual. Por el contrario, los motores de simulación multiproceso y los motores de simulación que soportan un modelo de eventos basado en intervalos pueden tener múltiples eventos actuales. En ambos casos, existen importantes problemas de sincronización entre los acontecimientos actuales. [ cita necesaria ]
El conjunto de eventos pendientes normalmente se organiza como una cola de prioridad , ordenada por hora del evento. [7] Es decir, independientemente del orden en que se agregan 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 distribució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 confiando en algoritmos sin bloqueo , para reducir el costo de sincronización entre los subprocesos concurrentes. . [12] [13]
Normalmente, los eventos se programan dinámicamente a medida que avanza la simulación. Por ejemplo, en el ejemplo del banco mencionado anteriormente, el evento LLEGADA-CLIENTE en el momento t, si la COLA_CLIENTE estuviera vacía y el CAJERO estuviera inactivo, incluiría la creación del evento subsiguiente SALIDA-CLIENTE que ocurriría en el momento t+s, donde s es un número generado a partir de la distribución TIEMPO DE SERVICIO. [ cita necesaria ]
La simulación necesita generar variables aleatorias de varios tipos, dependiendo del 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 aleatorios verdaderos 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 en estado estacionario 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 en estado estacionario. Este problema normalmente se resuelve arrancando el modelo de simulación. Sólo se hace un esfuerzo limitado para asignar tiempos realistas al conjunto inicial de eventos pendientes. Estos eventos, sin embargo, programan eventos adicionales y, con el tiempo, la distribución de los tiempos de los eventos se acerca a su estado estable. A esto se le llama arrancar el 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 arranque sea superado por el comportamiento de estado estable. (Este uso del término bootstrapping puede contrastarse con su uso tanto en estadística como en informática ).
La simulación normalmente realiza 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 medios de espera. En un modelo de simulación, las métricas de desempeño no se derivan analíticamente de distribuciones de probabilidad , sino más bien como promedios sobre replicaciones , es decir, diferentes ejecuciones del modelo. Los intervalos de confianza generalmente se construyen para ayudar a evaluar la calidad del resultado.
Debido a que los eventos se inician, en teoría una simulación de eventos discretos podría ejecutarse para siempre. Por tanto, el diseñador de la simulación debe decidir cuándo finalizará la simulación. Las opciones típicas son "en el momento t" o "después de procesar n número de eventos" o, más generalmente, "cuando la medida estadística X alcanza 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 es saltar al siguiente evento cronológico. La segunda fase es ejecutar todos los eventos que ocurren incondicionalmente en ese momento (estos se llaman eventos B). La tercera fase es ejecutar todos los eventos que ocurren condicionalmente en ese momento (estos se llaman eventos C). El enfoque de tres fases es un refinamiento del enfoque basado en eventos en el que los eventos simultáneos se ordenan para hacer el uso más eficiente de los recursos informáticos. El enfoque de tres fases es utilizado por 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 enfoques de simulación están particularmente 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 cuellos de botella permite mejorar los procesos y el sistema en general. Por ejemplo, en las empresas manufactureras, los cuellos de botella pueden ser creados por exceso de inventario, sobreproducción , variabilidad en los procesos y variabilidad en las rutas o secuencias. Al documentar con precisión el sistema con la ayuda de un modelo de simulación, es posible obtener una vista panorámica de todo el sistema.
Un modelo funcional de un sistema permite a la gerencia comprender los factores que impulsan el desempeño. Se puede crear una simulación para incluir cualquier número de indicadores de desempeño , como utilización de trabajadores, tasa de entrega a tiempo, tasa de desperdicio, ciclos de efectivo, etc.
Un quirófano generalmente es compartido entre varias disciplinas quirúrgicas. Al comprender mejor la naturaleza de estos procedimientos, es posible aumentar el número de pacientes. [14] Ejemplo: si una cirugía cardíaca dura un promedio de cuatro horas, cambiar el horario del quirófano de ocho horas disponibles a nueve no aumentará el rendimiento de los pacientes. Por otro lado, si un procedimiento de hernia dura un promedio de veinte minutos, es posible que proporcionar una hora adicional tampoco genere un mayor rendimiento si no se consideran la capacidad y el tiempo promedio que se pasa en la sala de recuperación.
Muchas ideas de mejora de sistemas se basan en principios sólidos y metodologías probadas ( Lean , Six Sigma , TQM , etc.) pero no logran mejorar el sistema en general. Un modelo de simulación permite al usuario comprender y probar una idea de mejora del rendimiento en el contexto del sistema general.
El modelado de simulación se utiliza comúnmente para modelar inversiones potenciales. A través del modelado de inversiones, los tomadores de decisiones pueden tomar decisiones informadas y evaluar alternativas potenciales.
La simulación de eventos discretos se utiliza en redes informáticas para simular nuevos protocolos y diferentes arquitecturas de sistemas (distribuidas, jerárquicas, centralizadas, 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}}
: Mantenimiento CS1: varios nombres: lista de autores ( enlace )