CommencezCommencez gratuitement

Modèle de restaurant : gestion des tables et des temps d'attente

Imaginez que vous souhaitez ouvrir un restaurant dans un quartier très fréquenté de San Francisco. Le choix du nombre de tables et de la capacité de la cuisine est crucial pour servir un maximum de clients tout en minimisant l'investissement initial et les coûts d'exploitation. Un modèle à événements discrets peut vous aider à prendre cette décision en simulant le taux d'occupation des tables, les temps d'attente des clients et le nombre de clients qui quittent la file en raison d'une attente trop longue.

Commençons par définir le générateur qui simule les demandes de table et la décision des clients d'attendre ou de partir selon le temps d'attente. Dans le prochain exercice, vous mettrez le modèle en place, l'exécuterez et en analyserez les résultats. Le temps dans le modèle est exprimé en minutes.

Cette activité fait partie du cours

Simulation d'événements discrets en Python

Voir le cours

Instructions de l’exercice

  • Ouvrez une demande de table sous le nom req lorsqu'un client arrive au restaurant.
  • Utilisez un opérateur OU au niveau des bits pour attendre qu'une table se libère (req) ou que le client perde patience (env.timeout(patience)).
  • Produisez (yield) le temps pendant lequel la table est occupée par le client, donné par la variable time_at_tables.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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
Modifier et exécuter le code