Discrete Event Simulation in Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Process-gebaseerd discrete-event-simulatieframework op standaard Python
Gebruikt generatorfuncties om processen en events te definiëren (behandeld in de Toolbox-voorwaarde)
Schaalbaar:
Normale functie
def mygenerator():
return 10
return geeft een waarde terug en beëindigt de uitvoering van de functieDe functie uitvoeren:
10
Generatorfunctie
def mygenerator():
yield 20
yield 12
yield geeft een waarde terug en pauzeert de uitvoering met behoud van interne status.De generator uitvoeren:
20
12
1) Maak een SimPy-omgeving
env = simpy.Environment()
2) Generatorfunctie toevoegen aan een SimPy-omgeving
env.process()
3) Voer het model uit
env.run()
4) Laat tijd verstrijken in een simulatie
env.timeout()
5) Huidige simulatietijd opvragen
env.now
1) Importeer het SimPy-pakket
import simpy
2) Maak een generatorfunctie met processen
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) Een SimPy-omgeving maken
env = simpy.Environment()
4) Voeg de generator toe aan de SimPy-omgeving
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) Voer het model uit
env.run(until=90)
Console-uitvoer van het model:
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!
Discrete Event Simulation in Python