@@ -28,7 +28,8 @@ def __init__(self, id_, simulation):
28
28
self .schedule = [list (pair ) for pair in zip (boundaries , servers )]
29
29
self .c = self .schedule [0 ][1 ]
30
30
raw_schedule_boundaries = [row [0 ] for row in raw_schedule ]
31
- self .date_generator = self .date_from_schedule_generator (raw_schedule_boundaries )
31
+ self .date_generator = self .date_from_schedule_generator (
32
+ raw_schedule_boundaries )
32
33
self .next_shift_change = next (self .date_generator )
33
34
else :
34
35
self .c = node .number_of_servers
@@ -114,7 +115,7 @@ def begin_service_if_possible_accept(self,
114
115
"""
115
116
next_individual .arrival_date = self .get_now (current_time )
116
117
next_individual .service_time = self .get_service_time (
117
- next_individual .customer_class )
118
+ next_individual .customer_class , current_time )
118
119
if self .free_server ():
119
120
if self .c < float ('Inf' ):
120
121
self .attach_server (self .find_free_server (),
@@ -130,8 +131,10 @@ def begin_interrupted_individuals_service(self, current_time, srvr):
130
131
"""
131
132
ind = [i for i in self .interrupted_individuals ][0 ]
132
133
self .attach_server (srvr , ind )
133
- ind .service_time = self .get_service_time (ind .customer_class )
134
- ind .service_end_date = self .increment_time (self .get_now (current_time ), ind .service_time )
134
+ ind .service_time = self .get_service_time (ind .customer_class ,
135
+ current_time )
136
+ ind .service_end_date = self .increment_time (self .get_now (current_time ),
137
+ ind .service_time )
135
138
self .interrupted_individuals .remove (ind )
136
139
137
140
def begin_service_if_possible_change_shift (self , current_time ):
@@ -348,10 +351,13 @@ def release_blocked_individual(self, current_time):
348
351
node_to_receive_from .release (individual_to_receive_index ,
349
352
self , current_time )
350
353
351
- def get_service_time (self , cls ):
354
+ def get_service_time (self , cls , current_time ):
352
355
"""
353
356
Returns a service time for the given customer class
354
357
"""
358
+ if self .simulation .network .customer_classes [cls ].service_distributions [
359
+ self .id_number - 1 ][0 ] == 'TimeDependent' :
360
+ return self .simulation .service_times [self .id_number ][cls ](current_time )
355
361
return self .simulation .service_times [self .id_number ][cls ]()
356
362
357
363
def take_servers_off_duty (self ):
@@ -429,11 +435,15 @@ def write_individual_record(self, individual):
429
435
individual .destination = False
430
436
431
437
def date_from_schedule_generator (self , boundaries ):
432
- """A generator that yields the next time according to a given schedule"""
438
+ """
439
+ A generator that yields the next time according to a given schedule.
440
+ """
433
441
boundaries_len = len (boundaries )
434
442
index = 0
435
443
date = 0
436
444
while True :
437
- date = self .increment_time (boundaries [index % boundaries_len ], (index ) // boundaries_len * boundaries [- 1 ])
445
+ date = self .increment_time (
446
+ boundaries [index % boundaries_len ],
447
+ (index ) // boundaries_len * boundaries [- 1 ])
438
448
index += 1
439
449
yield date
0 commit comments