Introduction au progiciel 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 progiciel SimPy : simulations à événements discrets pour Python

  • Cadre de simulation à événements discrets basé sur le Python standard

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

  • Évolutif :

    • 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 met fin à 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 les états internes.

Exécution du générateur :

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

Résumé 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 simulation

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

Feux de circulation : construire un modèle SimPy

1) Importer le progiciel 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 de circulation : construire un modèle SimPy

3) Créer un environnement de simulation 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 de circulation : résultats 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...