Introduzione al pacchetto SimPy

Simulazione a eventi discreti in Python

Dr Diogo Costa

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

Cos’è SimPy?

Logo pacchetto SimPy: Simulazioni a eventi discreti per Python

  • Framework di simulazione a eventi discreti basato su Python standard

  • Usa funzioni generatrici per definire processi ed eventi (trattate nel corso prerequisito Toolbox)

  • Scalabile:

    • I modelli possono contenere più generatori
    • Ogni generatore può includere più processi
    • I processi possono essere in sequenza o in parallelo
Simulazione a eventi discreti in Python

Funzioni normali vs. funzioni generatrici

Funzione normale

def mygenerator():
    return 10
  • return restituisce un valore e termina l’esecuzione della funzione

Eseguire 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
Simulazione a eventi discreti in Python

Riepilogo dei metodi chiave di SimPy

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
Simulazione a eventi discreti in Python

Semafori: creare un modello SimPy

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!")
Simulazione a eventi discreti in Python

Semafori: creare un modello SimPy

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)
Simulazione a eventi discreti in Python

Semafori: output del modello

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

Passons à la pratique !

Simulazione a eventi discreti in Python

Preparing Video For Download...