Skip to content

Instantly share code, notes, and snippets.

@siddhant3s
Created May 28, 2013 20:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save siddhant3s/5665696 to your computer and use it in GitHub Desktop.
Save siddhant3s/5665696 to your computer and use it in GitHub Desktop.
Models M/M/1 Queue. Return some userful results, can be (should be) used as a module. simple_mm1 is an example of using QueuingTheory.
from scipy.stats import expon
from scipy import cumsum,maximum,empty,insert
def getRandomArrivalServiceTimes(n_process, arrival_rate, service_rate):
time_intervals = expon.rvs(scale = 1/arrival_rate, size = n_process - 1)
arrival_times = insert(cumsum(time_intervals), 0, 0)
service_times = expon.rvs(scale = 1/service_rate, size = n_process)
return arrival_times, service_times
def mm1(arrival_times, service_times):
n_process = arrival_times.size
completion_times = empty(n_process)
enter_service_times = empty(n_process)
completion_times[0] = arrival_times[0] + service_times[0]
enter_service_times[0] = arrival_times[0]
for k in xrange(1, n_process):
enter_service_times[k] = maximum(completion_times[k-1], arrival_times[k])
completion_times[k] = enter_service_times[k] + service_times[k]
system_size = empty(n_process)
queue_size = empty(n_process)
for k in xrange(n_process):
system_size[k] = (completion_times[:k][completion_times[:k] > arrival_times[k]]).size
queue_size[k] = (enter_service_times[:k][enter_service_times[:k] > arrival_times[k]]).size
return {
'system_size' : system_size,
'queue_size' : queue_size,
'turnaround_time' : completion_times[-1],
'wait_times' : enter_service_times - arrival_times
}
from scipy import mean
from QueueingTheory import mm1, getRandomArrivalServiceTimes
arrival_rate = 1
service_rate = 4/3.0
n_process = 10000
arrival_times, service_times = getRandomArrivalServiceTimes(n_process, arrival_rate, service_rate)
result = mm1(arrival_times, service_times)
rho = arrival_rate/service_rate
formulated_mean_service_size = rho
formulated_mean_system_size = rho/(1 - rho)
formulated_mean_queue_size = formulated_mean_system_size - formulated_mean_service_size
print "Formulated Mean System Size:", formulated_mean_system_size
print "Calculated System Size:", mean(result['system_size'])
print "Formulated Queue Size:", formulated_mean_queue_size
print "Calculated Queue Size", mean(result['queue_size'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment