始める無料で始める

支払い待ち行列の管理

衣料品店では、ピーク時に会計待ちの行列が発生してとても混雑します。現在、レジ係は1人だけです。利益を最大化するために待ち時間をできるだけ短くするには、何人のレジ係が必要かを費用対効果の観点から分析するよう依頼されました。

そこで、離散事象モデルを構築することにしました。次のことが分かっています。

  • ピーク時には平均して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()
コードを編集して実行