Simulación de eventos discretos en Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Marco de simulación de eventos discretos basado en Python estándar
Usa funciones generadoras para definir procesos y eventos (visto en el curso previo de Toolbox)
Escalable:
Función normal
def mygenerator():
return 10
return devuelve un valor y termina la ejecución de la funciónEjecutar la función:
10
Función generadora
def mygenerator():
yield 20
yield 12
yield devuelve un valor y pausa la ejecución manteniendo los estados internos.Ejecutar la generadora:
20
12
1) Crear un entorno de SimPy
env = simpy.Environment()
2) Añadir una función generadora a un entorno SimPy
env.process()
3) Ejecutar el modelo
env.run()
4) Dejar pasar el tiempo en una simulación
env.timeout()
5) Obtener el tiempo actual de simulación
env.now
1) Importar el paquete SimPy
import simpy
2) Crear una función generadora con procesos
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) Crear un entorno de SimPy
env = simpy.Environment()
4) Añadir la generadora al entorno SimPy
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) Ejecutar el modelo
env.run(until=90)
Salida del modelo en consola:
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!
Simulación de eventos discretos en Python