Einführung in das SimPy-Paket

Diskrete-Ereignis-Simulation mit Python

Dr Diogo Costa

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

Was ist SimPy?

SimPy-Logo: Diskrete Ereignissimulationen für Python

  • Prozessorientiertes Framework für diskrete Ereignissimulation auf Basis von Python

  • Nutzt Generatorfunktionen für Prozesse und Ereignisse (behandelt im Toolbox-Vorkurs)

  • Skalierbar:

    • Modelle können mehrere Generatoren enthalten
    • Jeder Generator kann mehrere Prozesse haben
    • Prozesse können sequenziell oder parallel laufen
Diskrete-Ereignis-Simulation mit Python

Normale Funktionen vs. Generatorfunktionen

Normale Funktion

def mygenerator():
    return 10
  • return gibt einen Wert zurück und beendet die Funktion

Funktion ausführen:

10

Generatorfunktion

def mygenerator():
    yield 20
    yield 12
  • yield gibt einen Wert zurück und pausiert die Ausführung, interne Zustände bleiben erhalten.

Generator ausführen:

20
12
Diskrete-Ereignis-Simulation mit Python

Wichtige SimPy-Methoden zusammengefasst

1) SimPy-Umgebung erstellen

env = simpy.Environment()

2) Generatorfunktion zur SimPy-Umgebung hinzufügen

env.process()

3) Modell ausführen

env.run()

4) Zeit in der Simulation vergehen lassen

env.timeout()

5) Aktuelle Simulationszeit abrufen

env.now
Diskrete-Ereignis-Simulation mit Python

Ampeln: Ein SimPy-Modell erstellen

1) SimPy-Paket importieren

import simpy

2) Generatorfunktion mit Prozessen erstellen

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!")
Diskrete-Ereignis-Simulation mit Python

Ampeln: Ein SimPy-Modell erstellen

3) SimPy-Umgebung erstellen

env = simpy.Environment()

4) Generator zur SimPy-Umgebung hinzufügen

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

5) Modell ausführen

env.run(until=90)
Diskrete-Ereignis-Simulation mit Python

Ampeln: Modellausgaben

Konsolenausgabe des Modells:

Zeit 15 s  |  Ampel an Leslie St.     |  Rot!
Zeit 30 s  |  Ampel an Arlington Av.  |  Rot!
Zeit 30 s  |  Ampel an Leslie St.     |  Gelb!
Zeit 45 s  |  Ampel an Leslie St.     |  Grün!
Zeit 60 s  |  Ampel an Arlington Av.  |  Gelb!
Zeit 60 s  |  Ampel an Leslie St.     |  Rot!
Zeit 75 s  |  Ampel an Leslie St.     |  Gelb!
Diskrete-Ereignis-Simulation mit Python

Lass uns üben!

Diskrete-Ereignis-Simulation mit Python

Preparing Video For Download...