Kom igångKom igång gratis

Restaurangmodell: Hantera bord och väntetider

Tänk dig att du vill öppna en restaurang i ett populärt område i San Francisco. Antalet bord och kökets kapacitet är avgörande faktorer för att betjäna så många kunder som möjligt, samtidigt som du håller nere investeringskostnader och driftkostnader. En diskret händelsemodell kan vara ett stöd i det här investeringsbeslutet genom att simulera bordsutnyttjande, kundernas väntetider och antalet kunder som lämnar kön på grund av för lång väntan.

Låt oss börja med att definiera den generator som simulerar bordsförfrågningar och kundernas beslut att vänta eller lämna beroende på väntetiden. I nästa övning konfigurerar du modellen, kör den och analyserar resultaten. Tidsenheterna i modellen är minuter.

Den här övningen är en del av kursen

Diskret händelsesimulering i Python

Visa kurs

Övningsinstruktioner

  • Öppna en bordsförfrågan som req när en kund anländer till restaurangen.
  • Använd en bitvis-eller-operator för att vänta tills ett bord är ledigt (req) eller tills kundens tålamod tar slut (env.timeout(patience)).
  • Yield den tid som bordet är upptaget av kunden, vilket anges av variabeln time_at_tables.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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
Redigera och kör kod