Вступ до пакета SimPy

Дискретно-подієве моделювання в Python

Dr Diogo Costa

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

Що таке SimPy?

Логотип пакета SimPy: Дискретні подієві симуляції для Python

  • Процесно-орієнтований фреймворк дискретно-подієвого моделювання на стандартному Python

  • Використовує функції-генератори для визначення процесів і подій (розглянуто в підготовчому курсі Toolbox)

  • Масштабований:

    • Моделі можуть містити кілька генераторів
    • Кожен генератор може включати кілька процесів
    • Процеси можуть виконуватись послідовно або паралельно
Дискретно-подієве моделювання в Python

Звичайні функції vs. функції-генератори

Звичайна функція

def mygenerator():
    return 10
  • return повертає значення та завершує виконання функції

Виконання функції:

10

Функція-генератор

def mygenerator():
    yield 20
    yield 12
  • yield повертає значення й призупиняє виконання, зберігаючи внутрішні стани.

Виконання генератора:

20
12
Дискретно-подієве моделювання в Python

Ключові методи SimPy: підсумок

1) Створіть середовище SimPy

env = simpy.Environment()

2) Додайте функцію-генератор до середовища SimPy

env.process()

3) Запустіть модель

env.run()

4) Нехай у симуляції минає час

env.timeout()

5) Отримайте поточний симуляційний час

env.now
Дискретно-подієве моделювання в Python

Світлофори: створюємо модель SimPy

1) Імпортуйте пакет SimPy

import simpy

2) Створіть функцію-генератор із процесами

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!")
Дискретно-подієве моделювання в Python

Світлофори: створюємо модель SimPy

3) Створіть середовище для моделювання в SimPy

env = simpy.Environment()

4) Додайте генератор до середовища SimPy

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

5) Запустіть модель

env.run(until=90)
Дискретно-подієве моделювання в Python

Світлофори: результати моделі

Вивід у консолі моделі:

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!
Дискретно-подієве моделювання в Python

Давайте потренуємось!

Дискретно-подієве моделювання в Python

Preparing Video For Download...