Mulai sekarangMulai gratis

Model restoran: Mengelola meja dan waktu tunggu

Bayangkan Anda ingin membuka restoran di area populer di San Francisco. Menentukan jumlah meja dan kapasitas dapur sangat penting untuk memastikan jumlah pelanggan yang dilayani maksimal sekaligus meminimalkan investasi awal dan biaya operasional. Model peristiwa-diskret dapat membantu keputusan investasi ini dengan mensimulasikan tingkat okupansi meja, waktu tunggu pelanggan, dan jumlah pelanggan yang meninggalkan antrean karena waktu tunggu yang terlalu lama.

Mari terlebih dahulu mendefinisikan generator yang mensimulasikan permintaan meja dan keputusan pelanggan untuk menunggu atau pergi berdasarkan waktu tunggu. Pada latihan berikutnya, Anda akan menyiapkan model, menjalankannya, dan menganalisis hasilnya. Waktu dalam model dinyatakan dalam menit.

Latihan ini merupakan bagian dari kursus

Simulasi Peristiwa Diskret dengan Python

Lihat Kursus

Instruksi latihan

  • Buka permintaan meja sebagai req saat seorang pelanggan tiba di restoran.
  • Gunakan operator bitwise-or untuk menunggu sampai ada meja yang kosong (req) atau sampai kesabaran pelanggan habis (env.timeout(patience)).
  • Yield waktu ketika meja ditempati oleh pelanggan, yang diberikan oleh variabel time_at_tables.

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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
Edit dan Jalankan Kode