Introducere în pachetul SimPy

Simulare de evenimente discrete în Python

Dr Diogo Costa

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

Ce este SimPy?

Sigla pachetului SimPy: Simulări cu evenimente discrete pentru Python

  • Cadru de simulare cu evenimente discrete bazat pe Python standard

  • Utilizează funcții generator pentru a defini procese și evenimente (explorat în cursul Toolbox)

  • Scalabil:

    • Modelele pot conține mai mulți generatori
    • Fiecare generator poate include mai multe procese
    • Procesele pot rula secvențial sau în paralel
Simulare de evenimente discrete în Python

Funcții normale vs. funcții generator

Funcție normală

def mygenerator():
    return 10
  • return returnează o valoare și termină execuția funcției

Execuția funcției:

10

Funcție generator

def mygenerator():
    yield 20
    yield 12
  • yield returnează o valoare și suspendă execuția, păstrând stările interne.

Execuția generatorului:

20
12
Simulare de evenimente discrete în Python

Rezumatul metodelor cheie SimPy

1) Crearea unui mediu SimPy

env = simpy.Environment()

2) Adăugarea unei funcții generator în mediul SimPy

env.process()

3) Rularea modelului

env.run()

4) Avansarea timpului în simulare

env.timeout()

5) Obținerea timpului curent al simulării

env.now
Simulare de evenimente discrete în Python

Semafoare: Construirea unui model SimPy

1) Importarea pachetului SimPy

import simpy

2) Crearea unei funcții generator cu procese

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!")
Simulare de evenimente discrete în Python

Semafoare: Construirea unui model SimPy

3) Crearea unui mediu SimPy

env = simpy.Environment()

4) Adăugarea generatorului în mediul SimPy

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

5) Rularea modelului

env.run(until=90)
Simulare de evenimente discrete în Python

Semafoare: Rezultatele modelului

Rezultatul consolei:

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!
Simulare de evenimente discrete în Python

Să exersăm!

Simulare de evenimente discrete în Python

Preparing Video For Download...