ÎncepețiÎncepe gratuit

Modelul restaurantului: gestionarea meselor și a timpilor de așteptare

Imaginează-ți că vrei să deschizi un restaurant într-o zonă populară din San Francisco. Numărul de mese și capacitatea bucătăriei sunt factori esențiali pentru a servi cât mai mulți clienți, minimizând în același timp investiția inițială și costurile de funcționare. Un model de simulare a evenimentelor discrete te poate ajuta în această decizie, simulând gradul de ocupare a meselor, timpii de așteptare ai clienților și numărul celor care părăsesc coada din cauza timpilor prea mari de așteptare.

Să definim mai întâi generatorul care simulează cererile de mese și deciziile clienților de a aștepta sau a pleca în funcție de timpul de așteptare. În exercițiul următor, vei configura modelul, îl vei rula și vei analiza rezultatele. Timpul din model este exprimat în minute.

Acest exercițiu face parte din cursul

Simulare de evenimente discrete în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Deschide o cerere de masă ca req atunci când un client ajunge la restaurant.
  • Folosește un operator bitwise-or pentru a aștepta până când o masă devine liberă (req) sau până când clientul rămâne fără răbdare (env.timeout(patience)).
  • Yield-uiește timpul cât masa este ocupată de client, dat de variabila time_at_tables.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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
Editează și rulează codul