Introductie tot het SimPy-pakket

Discrete Event Simulation in Python

Dr Diogo Costa

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

Wat is SimPy?

SimPy-pakketlogo: Discrete-event-simulaties voor Python

  • Process-gebaseerd discrete-event-simulatieframework op standaard Python

  • Gebruikt generatorfuncties om processen en events te definiëren (behandeld in de Toolbox-voorwaarde)

  • Schaalbaar:

    • Modellen kunnen meerdere generators bevatten
    • Elke generator kan meerdere processen hebben
    • Processen kunnen sequentieel of parallel lopen
Discrete Event Simulation in Python

Normale functies vs. generatorfuncties

Normale functie

def mygenerator():
    return 10
  • return geeft een waarde terug en beëindigt de uitvoering van de functie

De functie uitvoeren:

10

Generatorfunctie

def mygenerator():
    yield 20
    yield 12
  • yield geeft een waarde terug en pauzeert de uitvoering met behoud van interne status.

De generator uitvoeren:

20
12
Discrete Event Simulation in Python

Belangrijke SimPy-methoden samengevat

1) Maak een SimPy-omgeving

env = simpy.Environment()

2) Generatorfunctie toevoegen aan een SimPy-omgeving

env.process()

3) Voer het model uit

env.run()

4) Laat tijd verstrijken in een simulatie

env.timeout()

5) Huidige simulatie­tijd opvragen

env.now
Discrete Event Simulation in Python

Verkeerslichten: een SimPy-model bouwen

1) Importeer het SimPy-pakket

import simpy

2) Maak een generatorfunctie met processen

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!")
Discrete Event Simulation in Python

Verkeerslichten: een SimPy-model bouwen

3) Een SimPy-omgeving maken

env = simpy.Environment()

4) Voeg de generator toe aan de SimPy-omgeving

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

5) Voer het model uit

env.run(until=90)
Discrete Event Simulation in Python

Verkeerslichten: modeluitvoer

Console-uitvoer van het model:

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!
Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...