LoslegenKostenlos loslegen

Restaurantmodell: Tische und Wartezeiten steuern

Stell dir vor, du möchtest in einer beliebten Gegend von San Francisco ein Restaurant eröffnen. Die Entscheidung über die Anzahl der Tische und die Küchenkapazität ist extrem wichtig, damit möglichst viele Gäste bedient werden, bei minimaler Anfangsinvestition und geringen Betriebskosten. Ein diskretes Ereignismodell kann bei dieser Investitionsentscheidung helfen, indem es die Auslastung der Tische, die Wartezeiten der Gäste und die Zahl der Gäste simuliert, die wegen zu langer Wartezeiten die Schlange verlassen.

Definieren wir zuerst den Generator, der Tischanfragen simuliert und die Entscheidung der Gäste abzuwarten oder zu gehen, basierend auf den Wartezeiten. In der nächsten Übung richtest du das Modell ein, führst es aus und analysierst die Ergebnisse. Die Zeit im Modell ist in Minuten.

Diese Übung ist Teil des Kurses

Diskrete-Ereignis-Simulation mit Python

Kurs anzeigen

Anleitung zur Übung

  • Öffne eine Tischanfrage als req, wenn ein Gast im Restaurant ankommt.
  • Verwende einen bitwise-or-Operator, um zu warten, bis entweder ein Tisch frei ist (req) oder bis dem Gast die Geduld ausgeht (env.timeout(patience)).
  • Yielde die Zeit, die der Tisch vom Gast belegt ist; diese ist in der Variablen time_at_tables gegeben.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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
Code bearbeiten und ausführen