Skip to content

Commit b112058

Browse files
committed
implement service discipline when customer arrives
1 parent dfa7345 commit b112058

3 files changed

Lines changed: 16 additions & 10 deletions

File tree

ciw/node.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,24 @@ def begin_service_if_possible_accept(self, next_individual):
140140
next_individual.reneging_date = self.get_reneging_date(next_individual)
141141
self.decide_class_change(next_individual)
142142

143-
free_server = self.find_free_server(next_individual)
143+
if isinf(self.c):
144+
ind = next_individual
145+
else:
146+
ind = self.choose_next_customer()
147+
148+
free_server = self.find_free_server(ind)
144149
if free_server is None and isinf(self.c) is False and self.c > 0:
145-
self.decide_preempt(next_individual)
150+
self.decide_preempt(ind)
146151
if free_server is not None or isinf(self.c):
147152
if isinf(self.c) is False:
148-
self.attach_server(free_server, next_individual)
149-
next_individual.service_start_date = self.now
150-
next_individual.service_time = self.get_service_time(next_individual)
151-
next_individual.service_end_date = self.now + next_individual.service_time
153+
self.attach_server(free_server, ind)
154+
ind.service_start_date = self.now
155+
ind.service_time = self.get_service_time(ind)
156+
ind.service_end_date = self.now + ind.service_time
152157
self.number_in_service += 1
153-
self.reset_class_change(next_individual)
158+
self.reset_class_change(ind)
154159
if not isinf(self.c):
155-
free_server.next_end_service_date = next_individual.service_end_date
160+
free_server.next_end_service_date = ind.service_end_date
156161

157162
def begin_interrupted_individuals_service(self, srvr):
158163
"""

ciw/tests/test_node.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,7 @@ def test_begin_service_if_possible_accept_method(self):
628628
self.assertEqual(ind.service_start_date, False)
629629
self.assertEqual(ind.service_end_date, False)
630630
Q.current_time = 300
631+
Q.transitive_nodes[0].individuals[0].append(ind)
631632
Q.transitive_nodes[0].begin_service_if_possible_accept(ind)
632633
self.assertEqual(ind.arrival_date, 300)
633634
self.assertEqual(round(ind.service_time, 5), 0.03382)

ciw/tests/test_simulation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,8 +1172,8 @@ def test_service_in_random_order(self):
11721172
Q = ciw.Simulation(N)
11731173
Q.simulate_until_max_time(14)
11741174
recs = sorted(Q.get_all_records(), key=lambda dr: dr.service_start_date)
1175-
self.assertEqual([r.id_number for r in recs], [1, 2, 5, 4, 8])
1176-
self.assertEqual([r.arrival_date for r in recs], [1.0, 2.0, 5.0, 4.0, 8.0])
1175+
self.assertEqual([r.id_number for r in recs], [1, 2, 5, 6, 4])
1176+
self.assertEqual([r.arrival_date for r in recs], [1.0, 2.0, 5.0, 6.0, 4.0])
11771177
self.assertEqual([r.service_time for r in recs], [2.5, 2.5, 2.5, 2.5, 2.5])
11781178
self.assertEqual(
11791179
[r.service_end_date for r in recs],

0 commit comments

Comments
 (0)