결제 대기열 관리하기
피크 시간대에는 의류 매장이 매우 붐벼 결제를 위해 줄을 서는 경우가 많아요. 현재는 계산대가 하나뿐이며, 대기 시간을 최대한 줄여 수익성을 높이려면 계산대를 몇 대로 늘려야 하는지 비용-편익 분석을 해 달라는 요청을 받았어요.
이 문제를 해결하기 위해 이산 사건 모델을 만들기로 했어요. 다음 정보를 알고 있어요:
- 피크 시간대에는 평균적으로 15초마다 새 고객이 대기열에 합류해요.
- 고객은 보통 1개에서 20개 사이의 여러 상품을 가지고 와요.
- 계산대에서 상품을 스캔하는 데는 상품 1개당 평균 3초가 걸리고, 결제에는 보통 추가로 20초가 걸려요.
인자 counter에는 SimPy 리소스가 저장되고, 인자 customer_num은 고객 수를 추적해요.
이제 모델을 실행해 보면서, 계산대 수를 달리했을 때 고객 30명을 응대하는 데 걸리는 시간을 계산해 볼게요.
이 연습은 강의의 일부입니다
Python으로 배우는 이산 사건 시뮬레이션
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
def customer(env, customer_num, counter):
num_items = random.randint(1, 20)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Joining the queue with {num_items:02d} items!")
# Open the resource counter request
with counter.____() as request:
yield request
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Got to cashier!")
time_counter = TIME_PAY + random.randint(1, 20) * TIME_SCAN_PER_ITEM
# Yield the processing time
yield env.____(time_counter)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Finished ")
env = simpy.Environment()
# Create resource
counter = simpy.Resource(env, capacity=____)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, counter))
env.run()