A discrete-event simulation (DES) models the operation of a system as a (discrete) sequence of events in time. Each event occurs at a particular instant in time and marks a change of state in the system. Between consecutive events, no change in the system is assumed to occur; thus the simulation time can directly jump to the occurrence time of the next event, which is called next-event time progression. In addition to next-event time progression, there is also an alternative approach, called incremental time progression, where time is broken up into small time slices and the system state is updated according to the set of events/activities happening in the time slice. Because not every time slice has to be simulated, a next-event time simulation can typically run faster than a corresponding incremental time simulation. Both forms of DES contrast with continuous simulation in which the system state is changed continuously over time on the basis of a set of differential equations defining the rates of change of state variables. Example A common exercise in learning how to build discrete-event simulations is to model a queueing system, such as customers arriving at a bank teller to be served by a clerk. In this example, the system objects are Customer and Teller, while the system events are Customer-Arrival, Service-Start and Service-End. Each of these events comes with its own dynamics defined by the following event routines: When a Customer-Arrival event occurs, the state variable queue-length is incremented by 1, and if the state variable teller-status has the value "available", a Service-Start follow-up event is scheduled to happen without any delay, such that the newly arrived customer will be served immediately. When a Service-Start event occurs, the state variable teller-status is set to "busy" and a Service-End follow-up event is scheduled with a delay (obtained from sampling a service-time random variable). When a Service-End event occurs, the state variable queue-length is decremented by 1 (representing the customer's departure). If the state variable queue-length is still greater than zero, a Service-Start follow-up event is scheduled to happen without any delay. Otherwise, the state variable teller-status is set to "available". The random variables that need to be characterized to model this system stochastically are the interarrival-time for recurrent Customer-Arrival events and the service-time for the delays of Service-End events. Components In addition to the logic of what happens when system events occur, discrete event simulations