ComeçarComece de graça

Modelo de restaurante: gerenciando mesas e tempos de espera

Imagine que você quer abrir um restaurante em uma área popular de San Francisco. Decidir o número de mesas e a capacidade da cozinha é extremamente importante para garantir o máximo de clientes atendidos, minimizando o investimento inicial e os custos operacionais. Um modelo de eventos discretos pode ajudar nessa decisão de investimento ao simular o nível de ocupação das mesas, os tempos de espera dos clientes e o número de clientes que abandonam a fila por causa de espera excessiva.

Vamos primeiro definir o gerador que simula as solicitações de mesa e as decisões dos clientes de esperar ou ir embora com base nos tempos de espera. No próximo exercício, você vai configurar o modelo, executá-lo e analisar os resultados. O tempo no modelo está em minutos.

Este exercício faz parte do curso

Simulação de Eventos Discretos em Python

Ver curso

Instruções do exercício

  • Abra uma solicitação de mesa como req quando um cliente chegar ao restaurante.
  • Use um operador bitwise-or para esperar até que haja uma mesa livre (req) ou até que o cliente perca a paciência (env.timeout(patience)).
  • Faça yield do tempo em que a mesa fica ocupada pelo cliente, dado pela variável time_at_tables.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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 e executar o código