Gerenciando filas de pagamento
Uma loja de roupas fica muito movimentada nos horários de pico, quando as pessoas costumam formar fila para pagar. No momento, há apenas um caixa, e você foi convidado a fazer uma análise de custo-benefício para determinar quantos caixas seriam necessários para reduzir ao máximo o tempo de espera e, assim, aumentar a lucratividade.
Você decidiu construir um modelo de eventos discretos. Você sabe que:
- Em média, um novo cliente entra na fila a cada 15 segundos durante o pico;
- Os clientes geralmente levam vários itens, normalmente entre 1 e 20; e
- Leva, em média, 3 segundos para registrar um item no caixa, e o pagamento costuma levar mais 20 segundos.
O argumento counter armazena o recurso do SimPy, e o argumento customer_num acompanha o número de clientes.
Vamos executar o modelo e calcular quanto tempo leva para atender 30 clientes com diferentes quantidades de caixas.
Este exercício faz parte do curso
Simulação de Eventos Discretos em Python
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
def customer(env, customer_num, counter):
num_items = random.randint(1.0, 20)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Joining the queue with {num_items:02d} items!")
# Open the resource counter request
with counter.____() as request:
yield request
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Got to cashier!")
time_counter = TIME_PAY + random.randint(1.0, 20) * TIME_SCAN_PER_ITEM
# Yield the processing time
yield env.____(time_counter)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Finished ")
env = simpy.Environment()
# Create resource
counter = simpy.Resource(env, capacity=____)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, counter))
env.run()