Diskrete-Ereignis-Simulation mit Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Prozessorientiertes Framework für diskrete Ereignissimulation auf Basis von Python
Nutzt Generatorfunktionen für Prozesse und Ereignisse (behandelt im Toolbox-Vorkurs)
Skalierbar:
Normale Funktion
def mygenerator():
return 10
return gibt einen Wert zurück und beendet die FunktionFunktion 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
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
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!")
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)
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