mirror of
https://github.com/ZGCA-Forge/Elevator.git
synced 2026-02-04 13:25:23 +00:00
Update ci
This commit is contained in:
77
elevator_saga/client_examples/bus_example.py
Normal file
77
elevator_saga/client_examples/bus_example.py
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
from typing import List
|
||||
|
||||
from elevator_saga.client.base_controller import ElevatorController
|
||||
from elevator_saga.client.proxy_models import ProxyElevator, ProxyFloor, ProxyPassenger
|
||||
from elevator_saga.core.models import Direction, SimulationEvent
|
||||
|
||||
|
||||
class ElevatorBusExampleController(ElevatorController):
|
||||
def __init__(self) -> None:
|
||||
super().__init__("http://127.0.0.1:8000", True)
|
||||
self.all_passengers: List[ProxyPassenger] = []
|
||||
self.max_floor = 0
|
||||
|
||||
def on_init(self, elevators: List[ProxyElevator], floors: List[ProxyFloor]) -> None:
|
||||
self.max_floor = floors[-1].floor
|
||||
self.floors = floors
|
||||
for i, elevator in enumerate(elevators):
|
||||
# 计算目标楼层 - 均匀分布在不同楼层
|
||||
target_floor = (i * (len(floors) - 1)) // len(elevators)
|
||||
# 立刻移动到目标位置并开始循环
|
||||
elevator.go_to_floor(target_floor, immediate=True)
|
||||
pass
|
||||
|
||||
def on_event_execute_start(
|
||||
self, tick: int, events: List[SimulationEvent], elevators: List[ProxyElevator], floors: List[ProxyFloor]
|
||||
) -> None:
|
||||
print(f"Tick {tick}: 即将处理 {len(events)} 个事件 {[e.type.value for e in events]}")
|
||||
for i in elevators:
|
||||
print(
|
||||
f"\t{i.id}[{i.target_floor_direction.value},{i.current_floor_float}/{i.target_floor}]"
|
||||
+ "👦" * len(i.passengers),
|
||||
end="",
|
||||
)
|
||||
print()
|
||||
|
||||
def on_event_execute_end(
|
||||
self, tick: int, events: List[SimulationEvent], elevators: List[ProxyElevator], floors: List[ProxyFloor]
|
||||
) -> None:
|
||||
pass
|
||||
|
||||
def on_passenger_call(self, passenger: ProxyPassenger, floor: ProxyFloor, direction: str) -> None:
|
||||
self.all_passengers.append(passenger)
|
||||
pass
|
||||
|
||||
def on_elevator_idle(self, elevator: ProxyElevator) -> None:
|
||||
elevator.go_to_floor(1)
|
||||
|
||||
def on_elevator_stopped(self, elevator: ProxyElevator, floor: ProxyFloor) -> None:
|
||||
print(f"🛑 电梯 E{elevator.id} 停靠在 F{floor.floor}")
|
||||
# BUS调度算法,电梯到达顶层后,立即下降一层
|
||||
if elevator.last_tick_direction == Direction.UP and elevator.current_floor == self.max_floor:
|
||||
elevator.go_to_floor(elevator.current_floor - 1)
|
||||
# 电梯到达底层后,立即上升一层
|
||||
elif elevator.last_tick_direction == Direction.DOWN and elevator.current_floor == 0:
|
||||
elevator.go_to_floor(elevator.current_floor + 1)
|
||||
elif elevator.last_tick_direction == Direction.UP:
|
||||
elevator.go_to_floor(elevator.current_floor + 1)
|
||||
elif elevator.last_tick_direction == Direction.DOWN:
|
||||
elevator.go_to_floor(elevator.current_floor - 1)
|
||||
|
||||
def on_passenger_board(self, elevator: ProxyElevator, passenger: ProxyPassenger) -> None:
|
||||
pass
|
||||
|
||||
def on_passenger_alight(self, elevator: ProxyElevator, passenger: ProxyPassenger, floor: ProxyFloor) -> None:
|
||||
pass
|
||||
|
||||
def on_elevator_passing_floor(self, elevator: ProxyElevator, floor: ProxyFloor, direction: str) -> None:
|
||||
pass
|
||||
|
||||
def on_elevator_approaching(self, elevator: ProxyElevator, floor: ProxyFloor, direction: str) -> None:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
algorithm = ElevatorBusExampleController()
|
||||
algorithm.start()
|
||||
Reference in New Issue
Block a user