Wprowadzenie do pakietu SimPy

Symulacja zdarzeń dyskretnych w Pythonie

Dr Diogo Costa

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

Czym jest SimPy?

Logo pakietu SimPy: symulacje zdarzeń dyskretnych dla Pythona

  • Framework symulacji zdarzeń dyskretnych oparty na standardowym Pythonie

  • Używa funkcji generatorów do definiowania procesów i zdarzeń (omówione w kursie wstępnym Toolbox)

  • Skalowalny:

    • Modele mogą zawierać wiele generatorów
    • Każdy generator może zawierać wiele procesów
    • Procesy mogą działać sekwencyjnie lub równolegle
Symulacja zdarzeń dyskretnych w Pythonie

Zwykłe funkcje a funkcje generatorów

Zwykła funkcja

def mygenerator():
    return 10
  • return zwraca wartość i kończy wykonanie funkcji

Wykonanie funkcji:

10

Funkcja generatora

def mygenerator():
    yield 20
    yield 12
  • yield zwraca wartość i wstrzymuje wykonanie, zachowując stan wewnętrzny.

Wykonanie generatora:

20
12
Symulacja zdarzeń dyskretnych w Pythonie

Podsumowanie kluczowych metod SimPy

1) Tworzenie środowiska SimPy

env = simpy.Environment()

2) Dodanie funkcji generatora do środowiska SimPy

env.process()

3) Uruchomienie modelu

env.run()

4) Upływ czasu w symulacji

env.timeout()

5) Pobranie bieżącego czasu symulacji

env.now
Symulacja zdarzeń dyskretnych w Pythonie

Sygnalizacja świetlna: budowanie modelu SimPy

1) Importowanie pakietu SimPy

import simpy

2) Tworzenie funkcji generatora zawierającej 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!")
Symulacja zdarzeń dyskretnych w Pythonie

Sygnalizacja świetlna: budowanie modelu SimPy

3) Tworzenie środowiska SimPy

env = simpy.Environment()

4) Dodanie generatora do środowiska SimPy

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

5) Uruchomienie modelu

env.run(until=90)
Symulacja zdarzeń dyskretnych w Pythonie

Sygnalizacja świetlna: wyniki modelu

Wynik działania modelu:

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!
Symulacja zdarzeń dyskretnych w Pythonie

Czas na ćwiczenia!

Symulacja zdarzeń dyskretnych w Pythonie

Preparing Video For Download...