Open SeanMcOwen opened 3 days ago
Relevant Code:
def initialize_event_queue(ride_requests) -> List[Event]:
initial_events = []
start_time_counter = Counter()
for ride_id in ride_requests:
start_time = random.randint(1, len(ride_requests))
start_time_counter[start_time] += 1
initial_events.append(Event(t=start_time, action="Request Ride", spaces={"ride_id": ride_id}))
for _, count in list(start_time_counter.items()):
if count > 10:
start_time_counter[start_time] = 10
heapq.heapify(initial_events)
return initial_events
def process_events(event_queue, simulation): current_time = 0 retry_queue = deque()
while event_queue or retry_queue:
while event_queue and event_queue[0].t == current_time:
current_event = heapq.heappop(event_queue)
handle_event(current_event, event_queue, simulation, retry_queue, current_time)
while retry_queue and retry_queue[0].t <= current_time:
current_event = retry_queue.popleft()
handle_event(current_event, event_queue, simulation, retry_queue, current_time)
# Record the state at each time step
simulation.record_state(current_time)
print("State recorded")
current_time += 1
simulation.grid.update_priorities()
print(f"The event queue is now empty. Simulation complete! Time: {current_time}")
simulation.state_map.print_state_map()
def handle_event(event, event_queue, simulation, retry_queue, current_time): print(f"Processing event: {event} at time {current_time}")
if event.action == "Request Ride":
simulation.handle_ride_request_event(event, event_queue, current_time, retry_queue)
elif event.action == "Driver Assigned":
simulation.handle_driver_assigned_event(event, event_queue, current_time)
elif event.action == "Complete Ride":
simulation.handle_complete_ride_event(event, event_queue, current_time)
else:
print(f"Unknown event action: {event.action}")
This should be done after some of the other wirings are first complete, but eventually we need a controller wiring that does the routing of an event to the wiring that it should take on. When we get here I can help out a bunch because there are a LOT of design considerations to work through first