시작하기무료로 시작하기

결제 대기열 관리하기

피크 시간대에는 의류 매장이 매우 붐벼 결제를 위해 줄을 서는 경우가 많아요. 현재는 계산대가 하나뿐이며, 대기 시간을 최대한 줄여 수익성을 높이려면 계산대를 몇 대로 늘려야 하는지 비용-편익 분석을 해 달라는 요청을 받았어요.

이 문제를 해결하기 위해 이산 사건 모델을 만들기로 했어요. 다음 정보를 알고 있어요:

  • 피크 시간대에는 평균적으로 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()
코드 편집 및 실행