-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueuing_model.py
More file actions
72 lines (60 loc) · 2.76 KB
/
Copy pathqueuing_model.py
File metadata and controls
72 lines (60 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import numpy as np
import matplotlib.pyplot as plt
def simulate_queue(arrival_rate, service_rate, num_servers, num_requests):
interarrival_times = np.random.exponential(1/arrival_rate, num_requests)
service_times = np.random.exponential(1/service_rate, num_requests)
arrival_times = [0]
departure_times = []
for i in range(num_requests):
arrival_times.append(arrival_times[-1] + interarrival_times[i])
if i < num_servers or departure_times[i-num_servers] < arrival_times[i]:
departure_times.append(arrival_times[i] + service_times[i])
else:
departure_times.append(departure_times[i-1] + service_times[i])
waiting_times = np.array(departure_times) - np.array(arrival_times[:-1])
return waiting_times
# Set parameters
arrival_rate = 10_000
service_rate_traditional = 100
service_rate_ndn = 500
num_servers = 20
num_requests_range = np.linspace(1_000, 10_000, 10)
avg_waiting_times_traditional = []
avg_waiting_times_ndn = []
# Simulate for each number of requests and compute average waiting times
for num_requests in num_requests_range:
waiting_times_traditional = simulate_queue(arrival_rate, service_rate_traditional, num_servers, int(num_requests))
waiting_times_ndn = simulate_queue(arrival_rate, service_rate_ndn, num_servers, int(num_requests))
avg_waiting_times_traditional.append(np.mean(waiting_times_traditional))
avg_waiting_times_ndn.append(np.mean(waiting_times_ndn))
# Plot average waiting times
plt.figure()
plt.plot(num_requests_range, avg_waiting_times_traditional, label='Traditional')
plt.plot(num_requests_range, avg_waiting_times_ndn, label='NDN')
plt.xlabel('Number of Requests')
plt.ylabel('Average Waiting Time (seconds)')
plt.title('Average Waiting Time')
plt.legend()
plt.grid(True)
plt.show()
# Histogram and CDF of Waiting Times for the maximum number of requests
waiting_times_traditional = simulate_queue(arrival_rate, service_rate_traditional, num_servers, int(num_requests_range[-1]))
waiting_times_ndn = simulate_queue(arrival_rate, service_rate_ndn, num_servers, int(num_requests_range[-1]))
plt.figure()
plt.hist(waiting_times_traditional, bins=500, alpha=0.5, label='Traditional', density=True)
plt.hist(waiting_times_ndn, bins=500, alpha=0.5, label='NDN', density=True)
plt.xlabel('Waiting Time (seconds)')
plt.ylabel('Probability Density')
plt.title('Histogram of Waiting Times')
plt.legend()
plt.grid(True)
plt.show()
plt.figure()
plt.hist(waiting_times_traditional, bins=1000, alpha=0.5, label='Traditional', density=True, cumulative=True)
plt.hist(waiting_times_ndn, bins=1000, alpha=0.5, label='NDN', density=True, cumulative=True)
plt.xlabel('Waiting Time (seconds)')
plt.ylabel('CDF')
plt.title('CDF of Waiting Times')
plt.legend()
plt.grid(True)
plt.show()