Simulare de evenimente discrete în Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

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:
Funcție normală
def mygenerator():
return 10
return returnează o valoare și termină execuția funcțieiExecuț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
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
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!")
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)
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