Introduction au package SimPy

Simulation d’événements discrets en Python

Dr Diogo Costa

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Qu’est-ce que SimPy ?

Logo du package SimPy : simulations d’événements discrets pour Python

  • Cadre de simulation d’événements discrets basé sur Python standard

  • Utilise des fonctions génératrices pour définir processus et événements (vu dans le cours préalable Toolbox)

  • Scalable :

    • Les modèles peuvent contenir plusieurs générateurs
    • Chaque générateur peut inclure plusieurs processus
    • Les processus peuvent s’exécuter en séquence ou en parallèle
Simulation d’événements discrets en Python

Fonctions normales vs. fonctions génératrices

Fonction normale

def mygenerator():
    return 10
  • return renvoie une valeur et termine l’exécution de la fonction

Exécution de la fonction :

10

Fonction génératrice

def mygenerator():
    yield 20
    yield 12
  • yield renvoie une valeur et met l’exécution en pause tout en conservant l’état interne.

Exécution du générateur :

20
12
Simulation d’événements discrets en Python

Récapitulatif des méthodes clés de SimPy

1) Créer un environnement SimPy

env = simpy.Environment()

2) Ajouter une fonction génératrice à un environnement SimPy

env.process()

3) Exécuter le modèle

env.run()

4) Laisser le temps s’écouler dans une simulation

env.timeout()

5) Obtenir l’heure courante de la simulation

env.now
Simulation d’événements discrets en Python

Feux tricolores : construire un modèle SimPy

1) Importer le package SimPy

import simpy

2) Créer une fonction génératrice contenant des processus

def traffic_light(env, name, timestep):
     while True:
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Red light!")
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Yellow Light!")
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Green Light!")
Simulation d’événements discrets en Python

Feux tricolores : construire un modèle SimPy

3) Créer un environnement SimPy

env = simpy.Environment()

4) Ajouter le générateur à l’environnement SimPy

env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))

5) Exécuter le modèle

env.run(until=90)
Simulation d’événements discrets en Python

Feux tricolores : sorties du modèle

Sortie console du modèle :

Time 15 sec  |  Traffic light at Leslie St.     |  Red light!
Time 30 sec  |  Traffic light at Arlington Av.  |  Red light!
Time 30 sec  |  Traffic light at Leslie St.     |  Yellow Light!
Time 45 sec  |  Traffic light at Leslie St.     |  Green Light!
Time 60 sec  |  Traffic light at Arlington Av.  |  Yellow Light!
Time 60 sec  |  Traffic light at Leslie St.     |  Red light!
Time 75 sec  |  Traffic light at Leslie St.     |  Yellow Light!
Simulation d’événements discrets en Python

Passons à la pratique !

Simulation d’événements discrets en Python

Preparing Video For Download...