Skip to content

Commit 9f1ccf1

Browse files
committed
Overall node server utilisation given
1 parent bc68db9 commit 9f1ccf1

4 files changed

Lines changed: 37 additions & 1 deletion

File tree

ciw/node.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def __init__(self, id_, simulation):
5757
self.simulation.deadlock_detector.initialise_at_node(self)
5858
self.preempt = node.preempt
5959
self.interrupted_individuals = []
60+
self.all_servers_total = []
61+
self.all_servers_busy = []
6062

6163
@property
6264
def all_individuals(self):
@@ -271,6 +273,18 @@ def find_next_individual(self):
271273
next_individual_index = next_individual_indices[0]
272274
return self.all_individuals[next_individual_index], next_individual_index
273275

276+
def find_server_utilisation(self):
277+
"""
278+
Finds the overall server utilisation for the node
279+
"""
280+
if self.c == float('Inf') or self.c == 0:
281+
self.server_utilisation = None
282+
else:
283+
for server in self.servers:
284+
self.all_servers_total.append(server.total_time)
285+
self.all_servers_busy.append(server.busy_time)
286+
self.server_utilisation = sum(self.all_servers_busy) / sum(self.all_servers_total)
287+
274288
def finish_service(self):
275289
"""
276290
The next individual finishes service

ciw/simulation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,7 @@ def wrap_up_servers(self, current_time):
360360
srvr.total_time = current_time
361361
if srvr.busy:
362362
srvr.busy_time += (current_time - srvr.cust.arrival_date)
363+
nd.find_server_utilisation()
363364

364365
def source(self, c, n, kind):
365366
"""

ciw/tests/test_node.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,3 +579,24 @@ def test_if_putting_individuals_in_correct_priority_queue(self):
579579
self.assertEqual([str(obs) for obs in N1.all_individuals], ['Individual 1', 'Individual 2'])
580580
self.assertEqual([[str(obs) for obs in lst] for lst in N2.individuals], [['Individual 3'], ['Individual 4']])
581581
self.assertEqual([str(obs) for obs in N2.all_individuals], ['Individual 3', 'Individual 4'])
582+
583+
def test_server_utilisation(self):
584+
# Single server
585+
N = ciw.create_network(
586+
Arrival_distributions=[['Sequential', [2.0, 3.0, 100.0]]],
587+
Service_distributions=[['Sequential', [1.0, 6.0, 100.0]]],
588+
Number_of_servers=[1],
589+
)
590+
Q = ciw.Simulation(N)
591+
Q.simulate_until_max_time(14.0)
592+
self.assertEqual(Q.transitive_nodes[0].server_utilisation, 0.5)
593+
594+
# Multi server
595+
N = ciw.create_network(
596+
Arrival_distributions=[['Sequential', [2.0, 3.0, 100.0]]],
597+
Service_distributions=[['Sequential', [10.0, 6.0, 100.0]]],
598+
Number_of_servers=[3],
599+
)
600+
Q = ciw.Simulation(N)
601+
Q.simulate_until_max_time(20.0)
602+
self.assertEqual(Q.transitive_nodes[0].server_utilisation, 4.0/15.0)

ciw/tests/test_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_busy_total_times(self):
3838
self.assertEqual(s.busy_time, 7.0)
3939
self.assertEqual(s.utilisation, 0.5)
4040

41-
# Multi serve14
41+
# Multi server
4242
N = ciw.create_network(
4343
Arrival_distributions=[['Sequential', [2.0, 3.0, 100.0]]],
4444
Service_distributions=[['Sequential', [10.0, 6.0, 100.0]]],

0 commit comments

Comments
 (0)