In order to predict the outcome of processes we usually model them, that is we construct some ideal representation that concentrates on the important details and neglects the others. For example, to figure out when a body in free-fall will hit the ground we construct a model that describes the behaviour of gravity, air resistance, and other important factors but neglect the (probably small) effect that the body's choice of clothing might have on their descent.
Sometimes we can apply analytical solutions, for example an equation or system of equations that can be solved in a few steps, to make predictions. To get information from a system where we lack an analytic solution we need to simulate or model the system's components: the entities in the system, the relationships between them, and events that change the state of the system.
Simulations come in a few varieties. Discrete simulations have entities that take on finitely many states, continuous simulations allow their entities to range over infinitely many values. Static simulations don't have time as a variable, dynamic simulations do have time as a variable. Deterministic simulations apply rules in the same way each time, stochastic simulations have a random component to their application of some rules. Here are some examples:
For this course we'll concentrate on dynamic, discrete, probablistic simulations. We'll need some way of keeping track of the simulation time, and generating events at various times. There are a couple of ways of doing this.