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 próximo evento, también existe un enfoque alternativo, llamado progresión del tiempo de incremento fijo , en el que 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 el tiempo. rodaja. [2] Debido a que no es necesario simular todos los segmentos de tiempo, una simulación de tiempo del siguiente evento normalmente puede ejecutarse mucho más rápido que la correspondiente simulación de tiempo de incremento fijo.
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 una cola , como los clientes que llegan a un banco para ser atendidos por un cajero. En este ejemplo, las entidades del sistema son Cola de clientes y Cajeros . Los eventos del sistema son Cliente-Llegada y Cliente-Salida . (El evento Teller-Begins-Service puede ser parte de la lógica de los eventos de llegada y salida). Los estados del sistema, que son modificados por estos eventos, son Número de clientes en la cola (un número entero de 0 an) y estado del cajero (ocupado o inactivo). Las variables aleatorias que deben caracterizarse para modelar este sistemaestocásticamente son cliente-Interarrival en tiempo y Teller-servicio a tiempo . Un marco basado en agentes para el modelado de rendimiento de un simulador de eventos discretos paralelos optimista es otro ejemplo de simulación de eventos discretos. [3]
Además de la lógica de lo que sucede cuando ocurren eventos del sistema, las simulaciones de eventos discretos incluyen lo siguiente:
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 en el tiempo S (t) se puede representar matemáticamente mediante una función escalonada cuyo valor puede cambiar siempre que ocurre un evento.
La simulación debe realizar un seguimiento del tiempo de simulación actual, en las unidades de medida adecuadas 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 pasa 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 la hora en que ocurre y un tipo, indicando 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.
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 que la hora de un evento se especifique como un intervalo, dando la hora de inicio y la hora de finalización de cada evento.
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 subprocesos múltiples 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.
El conjunto de eventos pendientes generalmente se organiza como una cola de prioridad , ordenada por hora del evento. [4] Es decir, independientemente del orden en 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; [5] Las alternativas estudiadas incluyen árboles de distribución , listas de omisión , colas de calendario , [6] y colas de escalera. [7] [8] En máquinas masivamente paralelas , como multi-core o multi -coreEn las CPU, el conjunto de eventos pendientes se puede implementar confiando en algoritmos sin bloqueo , para reducir el costo de sincronización entre los subprocesos concurrentes. [9] [10]
Normalmente, los eventos se programan dinámicamente a medida que avanza la simulación. Por ejemplo, en el ejemplo de banco mencionado anteriormente, el evento CLIENTE-LLEGADA en el momento t, si el CLIENTE_QUEUE estuviera vacío y el TELLER estuviera inactivo, incluiría la creación del evento posterior CLIENTE-SALIDA que ocurrirá en el momento t + s, donde s es un número generado a partir de la distribución SERVICE-TIME.
La simulación necesita 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 contraposición a números aleatorios verdaderos es un beneficio si una simulación necesita una repetición con exactamente el mismo comportamiento.
Uno de los problemas con las distribuciones de números aleatorios que se utilizan 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 normalmente se resuelve arrancando el 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 los tiempos de los eventos se acerca a su estado estable. Esto se llama bootstrappingel 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 se vea abrumado por el comportamiento del estado estable. (Este uso del término bootstrapping puede contrastarse con su uso tanto en estadística como en computación ).
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, es interesante realizar un seguimiento de los tiempos de espera medios. 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 las 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 denominan eventos B). La tercera fase es 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 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. La identificación y eliminación de 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 el exceso de inventario, la sobreproducción , la variabilidad en los procesos y la 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 panorámica de todo el sistema.
Un modelo funcional de un sistema permite a la administración comprender los impulsores del rendimiento. Se puede crear una simulación para incluir cualquier número de indicadores de rendimiento , como la utilización de los trabajadores, la tasa de entrega a tiempo, la tasa de desechos, los ciclos de efectivo, etc.
Generalmente, un quirófano se comparte entre varias disciplinas quirúrgicas. A través de una mejor comprensión de la naturaleza de estos procedimientos, puede ser posible aumentar el rendimiento del paciente. Ejemplo: si una cirugía cardíaca toma un promedio de cuatro horas, cambiar el horario de la sala de operaciones de ocho horas disponibles a nueve no aumentará el número de pacientes. Por otro lado, si un procedimiento de hernia dura un promedio de veinte minutos, es posible que proporcionar una hora adicional tampoco produzca un aumento del rendimiento si no se considera la capacidad y el tiempo promedio de permanencia en la sala de recuperación.
Muchas ideas de mejora de sistemas se basan en principios sólidos, 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 en general.
El modelado de simulación se usa comúnmente para modelar inversiones potenciales. Mediante el modelado de inversiones, los responsables de la toma de decisiones pueden tomar decisiones informadas y evaluar alternativas potenciales.
La simulación de eventos discretos se utiliza en la red informática para simular nuevos protocolos, 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: