BaşlayınÜcretsiz Başlayın

Restoran modeli: Masaları ve bekleme sürelerini yönetme

San Francisco’nun popüler bir bölgesinde restoran açmak istediğini hayal et. Müşterilere en yüksek düzeyde hizmet verirken ilk yatırım ve işletme maliyetlerini en aza indirmek için masa sayısı ve mutfak kapasitesine karar vermek kritik öneme sahiptir. Ayrık olay simülasyonu, masa doluluk düzeyini, müşteri bekleme sürelerini ve aşırı bekleme nedeniyle kuyruktan ayrılan müşteri sayısını simüle ederek bu yatırım kararında yardımcı olabilir.

Önce, masa taleplerini ve müşterilerin bekleme süresine göre bekleme ya da ayrılma kararlarını simüle eden üreticiyi (generator) tanımlayalım. Sonraki egzersizde modeli kuracak, çalıştıracak ve sonuçları analiz edeceksin. Modelde zaman birimi dakikadır.

Bu egzersiz

Python ile Ayrık Olay Benzetimi

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Bir müşteri restorana geldiğinde bir masa talebini req olarak aç.
  • Bir bitwise-or operatörü kullanarak ya bir masa boşalana kadar (req) ya da müşterinin sabrı tükenene kadar (env.timeout(patience)) bekle.
  • Müşterinin masayı işgal ettiği süreyi teslim et (yield); bu süre time_at_tables değişkeni ile verilir.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

def customer(env, name, tables):

  global customers_served, customers_quiting_waiting
  arrive = env.now

  # Request a table
  with tables.request() as ____:
    patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)

    # Wait until a table is free or the customer runs out of patience
    results = yield ____ | ____
    wait = env.now - arrive

    if req in results:

      print(f"{env.now:7.4f} {name} > Waited {wait:6.3f} minutes for a table!")
      time_at_tables = random.uniform(MIN_SEATING_TIME, MAX_SEATING_TIME)

      # Yield the time the table is occupied by the customer
      ____ env.timeout(time_at_tables)
      print(f"{env.now:7.4f} {name} > Finished meal :)")
      costumers_served += 1

    else:
      print(f"{env.now:7.4f} {name} > Gave up waiting and left after waiting {wait:7.4f} minutes :(")
      customers_quiting_waiting += 1
Kodu Düzenle ve Çalıştır