def __init__(self, rider_file): self._elevator_scheduler = Elevator_Scheduler(rider_file) self._iterations = 0 self.run_elevator_scheduler()
class Elevator_Times: def __init__(self, rider_file): self._elevator_scheduler = Elevator_Scheduler(rider_file) self._iterations = 0 self.run_elevator_scheduler() ''' function implements the programs strategy to determine how fast the elevator schedule can be completed ''' def run_elevator_scheduler(self): while len(self._elevator_scheduler.get_completed_rides()) < self._elevator_scheduler.get_total_riders(): while len([x for x in self._elevator_scheduler.get_cabs() if x.get_next_time() <= self._elevator_scheduler.get_time()]): first_cab = min(self._elevator_scheduler.get_cabs(), key=lambda p: (p.get_next_time())) last_time = first_cab.get_next_time() removed_riders = [x for x in first_cab.get_current_riders() if x[1].get_rider_list() != [] and x[1].get_rider_list()[0].get_end_point() == first_cab.get_current_floor()] first_cab.set_current_riders([x for x in first_cab.get_current_riders() if x[1].get_rider_list() != [] and x[1].get_rider_list()[0].get_end_point() != first_cab.get_current_floor()]) self._elevator_scheduler.let_riders_off(removed_riders) riders_to_add = self._elevator_scheduler.let_riders_on(first_cab) for rider in riders_to_add: self._elevator_scheduler.get_rider_queue()[rider[1].get_rider_list()[0].get_starting_point()].put((rider[1].get_rider_list()[0].get_time_point(), rider[1])) if self._elevator_scheduler.change_direction(first_cab): first_cab.change_direction() first_cab.move_car() first_cab.update_next_time() self._elevator_scheduler.update_time() self._iterations += 1 def get_completed_rides(self): return self._elevator_scheduler.get_completed_rides() def get_time(self): return self._elevator_scheduler.get_time()