Začněte nyníZačněte zdarma

Model restaurace: správa stolů a čekacích dob

Představ si, že chceš otevřít restauraci v populární čtvrti San Francisca. Správné nastavení počtu stolů a kapacity kuchyně je klíčové pro obsloužení co největšího počtu zákazníků při minimalizaci počátečních investic a provozních nákladů. Diskrétně-událostní model ti může při tomto rozhodování pomoci – simuluje obsazenost stolů, čekací doby zákazníků a počet těch, kteří frontu opustí kvůli příliš dlouhému čekání.

Nejprve definujeme generátor, který simuluje žádosti o stůl a rozhodování zákazníků – zda počkat, nebo odejít – na základě čekacích dob. V příštím cvičení model sestavíš, spustíš a analyzuješ výsledky. Čas v modelu je v minutách.

Toto cvičení je součástí kurzu

Diskrétní simulace událostí v Pythonu

Zobrazit kurz

Pokyny k cvičení

  • Při příchodu zákazníka do restaurace otevři žádost o stůl jako req.
  • Použij operátor bitwise-or k čekání, dokud se neuvolní stůl (req) nebo dokud zákazníkovi nevyprší trpělivost (env.timeout(patience)).
  • Yield dobu, po kterou zákazník stůl zabírá – tuto hodnotu udává proměnná time_at_tables.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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
Upravit a spustit kód