Gérer les files d'attente au paiement
Une boutique de vêtements devient très achalandée aux heures de pointe, et les clients font souvent la file pour payer. À l'heure actuelle, il n'y a qu'un seul caissier, et on vous a demandé de faire une analyse coûts-avantages pour déterminer combien de caissiers seraient nécessaires afin de réduire le temps d'attente autant que possible et ainsi augmenter la rentabilité.
Vous avez décidé de bâtir un modèle à événements discrets. Vous savez que :
- En moyenne, un nouveau client se joint à la file toutes les 15 secondes pendant les heures de pointe;
- Les clients apportent généralement plusieurs articles, typiquement entre 1 et 20; et
- Il faut en moyenne 3 secondes pour numériser un article à la caisse, et le paiement prend généralement 20 secondes de plus.
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 variable de caissiers.
Cette activité fait partie du cours
Simulation d'événements discrets en Python
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()