ComenzarEmpieza gratis

Modelo de restaurante: gestión de mesas y tiempos de espera

Imagina que quieres abrir un restaurante en una zona popular de San Francisco. Decidir el número de mesas y la capacidad de la cocina es clave para asegurar que se atiende al mayor número de clientes posible, minimizando a la vez la inversión inicial y los costes operativos. Un modelo de eventos discretos puede ayudarte en esta decisión de inversión simulando el nivel de ocupación de las mesas, los tiempos de espera de los clientes y el número de clientes que abandonan la cola por esperar demasiado.

Primero definamos el generador que simula las solicitudes de mesas y las decisiones de los clientes de esperar o irse en función del tiempo de espera. En el siguiente ejercicio, configurarás el modelo, lo ejecutarás y analizarás los resultados. El tiempo en el modelo está en minutos.

Este ejercicio forma parte del curso

Simulación de eventos discretos en Python

Ver curso

Instrucciones del ejercicio

  • Abre una solicitud de mesa como req cuando llegue un cliente al restaurante.
  • Usa un operador bitwise-or para esperar hasta que haya una mesa libre (req) o hasta que el cliente se quede sin paciencia (env.timeout(patience)).
  • Cede el tiempo durante el cual el cliente ocupa la mesa, indicado por la variable time_at_tables.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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
Editar y ejecutar código