Gérer les files d’attente au paiement
Une boutique de vêtements est très fréquentée aux heures de pointe, lorsque les clients font souvent la queue pour payer. Actuellement, il n’y a qu’un seul caissier, et l’on vous a demandé de réaliser une analyse coûts-bénéfices pour déterminer combien de caissiers seraient nécessaires afin de réduire au maximum les temps d’attente et d’augmenter la rentabilité.
Vous avez décidé de construire un modèle à événements discrets. Vous savez que :
- En moyenne, un nouveau client rejoint la file toutes les 15 secondes pendant les heures de pointe ;
- Les clients viennent généralement avec plusieurs articles, typiquement entre 1 et 20 ;
- Scanner un article prend en moyenne 3 secondes, et le paiement prend généralement 20 secondes supplémentaires.
L’argument counter contient la ressource SimPy, et l’argument customer_num suit le nombre de clients.
Exécutons le modèle et calculons le temps nécessaire pour servir 30 clients avec un nombre de caissiers différent.
Cet exercice fait partie du cours
<cours>Simulation d’événements discrets en Python</cours>Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
def customer(env, customer_num, counter):
num_items = random.randint(1, 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, 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()