Add the unofficial RandomStreams package if needed
Pkg.clone("https://github.com/prsteele/RandomStreams.jl")
Pkg.update()
using Distributions
using RandomStreams # provides the MRG32K3a generator along with random streams
Pkg.update()
const SEED = 12345
seeds = Array[[SEED, SEED, SEED, SEED, SEED, SEED]]
gen = MRG32k3aGen(seeds[1])
arrival_gen = next_stream(gen)
service_gen = next_stream(gen)
rand_dist(rng::MRG32k3a, Dist::Distribution) = quantile(Dist, rand(rng))
Lindley recurrence: $$ W_1 = 0,\quad W_{i+1} = \max(0,\; W_i + S_i - A_{i+1}). $$
function mean_wait()
N = 1000000 # Number of clients
Waits = Array(Float64, N)
Waits[1] = 0.0 # The first client does not wait.
lambda = 1.9 # arrival rate
mu = 2.0 # service rate
arrival = Exponential(1.0/lambda)
service = Exponential(1.0/mu)
for i in 2:N
Waits[i] = max(0, Waits[i-1]-rand_dist(arrival_gen, arrival)+rand_dist(service_gen, service))
end
return Waits
end
Waits = mean_wait();
mean(Waits)
next_substream!(arrival_gen)
arrival_gen
next_substream!(service_gen)
service_gen
Waits = mean_wait()
mean(Waits)
arrival_gen
Waits