Introducción al paquete SimPy

Simulación de eventos discretos en Python

Dr Diogo Costa

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

¿Qué es SimPy?

Logotipo de SimPy: simulaciones de eventos discretos para Python

  • 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:

    • Los modelos pueden tener varias generadoras
    • Cada generadora puede incluir varios procesos
    • Los procesos pueden ejecutarse en secuencia o en paralelo
Simulación de eventos discretos en Python

Funciones normales vs. funciones generadoras

Función normal

def mygenerator():
    return 10
  • return devuelve un valor y termina la ejecución de la función

Ejecutar 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
Simulación de eventos discretos en Python

Resumen de métodos clave de SimPy

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
Simulación de eventos discretos en Python

Semáforos: crear un modelo en SimPy

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!")
Simulación de eventos discretos en Python

Semáforos: crear un modelo en SimPy

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)
Simulación de eventos discretos en Python

Semáforos: resultados del modelo

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

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...