Úvod do balíčku SimPy

Diskrétní simulace událostí v Pythonu

Dr Diogo Costa

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

Co je SimPy?

Logo balíčku SimPy: Diskrétní simulace událostí pro Python

  • Procesně orientovaný framework pro diskrétní simulaci událostí postavený na standardním Pythonu

  • Využívá funkce generátoru k definici procesů a událostí (probráno v předchozím kurzu Toolbox)

  • Škálovatelný:

    • Modely mohou obsahovat více generátorů
    • Každý generátor může zahrnovat více procesů
    • Procesy mohou běžet postupně nebo paralelně
Diskrétní simulace událostí v Pythonu

Běžné funkce vs. funkce generátoru

Běžná funkce

def mygenerator():
    return 10
  • return vrátí hodnotu a ukončí provádění funkce

Spuštění funkce:

10

Funkce generátoru

def mygenerator():
    yield 20
    yield 12
  • yield vrátí hodnotu a pozastaví provádění při zachování vnitřního stavu.

Spuštění generátoru:

20
12
Diskrétní simulace událostí v Pythonu

Přehled klíčových metod SimPy

1) Vytvoření prostředí SimPy

env = simpy.Environment()

2) Přidání funkce generátoru do prostředí SimPy

env.process()

3) Spuštění modelu

env.run()

4) Posun času v simulaci

env.timeout()

5) Získání aktuálního simulačního času

env.now
Diskrétní simulace událostí v Pythonu

Semafory: Tvorba modelu v SimPy

1) Import balíčku SimPy

import simpy

2) Vytvoření funkce generátoru obsahující procesy

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!")
Diskrétní simulace událostí v Pythonu

Semafory: Tvorba modelu v SimPy

3) Vytvoření prostředí SimPy

env = simpy.Environment()

4) Přidání generátoru do prostředí SimPy

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

5) Spuštění modelu

env.run(until=90)
Diskrétní simulace událostí v Pythonu

Semafory: Výstupy modelu

Výstup modelu v konzoli:

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!
Diskrétní simulace událostí v Pythonu

Pojďme si procvičit!

Diskrétní simulace událostí v Pythonu

Preparing Video For Download...