This package provides tools for simulation of birth and death based Markovian Queueing Models / Networks.

This package exports a core `simulate`

function which takes a `SimulationArgs`

type as input which is defined as follows:

```
type SimulationArgs
max_time::Float64
max_customers::Float64
topology::AbstractArray{QueueNode}
end
```

It also exports an `aggregate_simulate`

function which aggregates the results of N simulations run in parallel.

`QueueNode`

contains two intermediary types, one which holds the properties of the queueing system
and another which contains an array of edges that dictates what other queueing systems items that exit this queue should be sent to. The weights are values from `0 <= x <= 1`

and if the item is not sent to another queueing system, it is assumed that it exits the system. The `is_entering`

flag indicates whether or not external items can enter into this system.

```
type QueueProperties
interarrival::Distribution
service::Distribution
num_servers::Integer
max_capacity::Integer
end
type QueueEdge
to::QueueProperties
weight::Float64
end
type QueueNode
queue_id::Integer
props::QueueProperties
is_entering::Bool # Optional - defaults to true
edges::AbstractArray{QueueEdge} # Optional
end
```

The `Distribution`

type here refers to a Distribution type from Distributions.jl.

The simulate function returns an object of `QueueStats`

which contain the statistics collected during simulation

```
type QueueStats
num_in_system::Integer
total_num_waiting::Integer
total_departures::Integer
total_wait_time::Float64
total_system_time::Float64
num_monitors::Integer
average_wait_time::Float64
average_system_time::Float64
end
```

As well, there are a few convenience functions for common queueing systems that are provided:

- MM1
- MMN

License: MIT

12/08/2015

about 4 years ago

24 commits