주유소 모델링: Python 제너레이터
한 고객이 주유소를 건설하려고 하며, 최적의 주유기 수와 공용 연료 탱크의 크기를 결정하는 데 도움이 될 이산 이벤트 모델을 만들어 달라고 요청했다고 가정해 보세요. 이 모델은 주유소에 도착하는 차량과 주유소의 자원(주유기와 연료 탱크)을 시뮬레이션해야 합니다. 이 연습 문제에서는 다음 두 단계에 집중합니다:
1단계: 주유소에 차량이 도착해 주유기를 요청하고, 차량 탱크를 채우는 과정을 시뮬레이션하는 제너레이터를 만듭니다.
2단계: 탱크의 잔량을 확인하고 필요 시 보급 탱크를 호출하는 제너레이터를 만듭니다. 또한 보급 탱크의 동작도 모델링해야 합니다.
다음 연습 문제에서는 SimPy 환경을 만들고, 프로세스와 자원을 추가하며, 시뮬레이션을 실행합니다.
주유기 수는 제한되어 있으며, 변수 gas_station_pumps에 저장된 SimPy 리소스로 시뮬레이션합니다.
이 연습은 강의의 일부입니다
Python으로 배우는 이산 사건 시뮬레이션
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
def car(name, env, gas_station_pumps, gas_station_tank):
fuel_tank_level = random.randint(*FUEL_TANK_LEVEL)
print(f"{name} arriving at gas station at {env.now}")
# Request pump
with gas_station_pumps.____() as req:
start_time = env.now
# Yield the pump request
____ req
liters_required = FUEL_TANK_SIZE - fuel_tank_level
# Remove liters_required from the tank
yield gas_station_tank.___(liters_required)
yield env.timeout(liters_required / REFUELING_SPEED)
print(f"{name} finished refueling in {env.now - start_time} seconds.")