CommencerCommencer gratuitement

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

Simulation d’événements discrets en Python

Afficher le cours

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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()
Modifier et exécuter le code