Simulazione a eventi discreti in Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Framework di simulazione a eventi discreti basato su Python standard
Usa funzioni generatrici per definire processi ed eventi (trattate nel corso prerequisito Toolbox)
Scalabile:
Funzione normale
def mygenerator():
return 10
return restituisce un valore e termina l’esecuzione della funzioneEseguire la funzione:
10
Funzione generatrice
def mygenerator():
yield 20
yield 12
yield restituisce un valore e mette in pausa l’esecuzione mantenendo lo stato interno.Eseguire il generatore:
20
12
1) Crea un Environment SimPy
env = simpy.Environment()
2) Aggiungi una funzione generatrice all’Environment
env.process()
3) Esegui il modello
env.run()
4) Far passare il tempo in simulazione
env.timeout()
5) Tempo corrente della simulazione
env.now
1) Importa il pacchetto SimPy
import simpy
2) Crea una funzione generatrice con processi
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) Creare un ambiente SimPy
env = simpy.Environment()
4) Aggiungere il generatore all’ambiente SimPy
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) Eseguire il modello
env.run(until=90)
Output console del modello:
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!
Simulazione a eventi discreti in Python