Введение в пакет SimPy

Дискретно-событийное моделирование на Python

Dr Diogo Costa

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

Что такое SimPy?

Логотип пакета SimPy: дискретно-событийное моделирование для Python

  • Фреймворк дискретно-событийного моделирования на основе стандартного Python

  • Использует функции-генераторы для определения процессов и событий (рассматриваются в курсе Toolbox)

  • Масштабируемость:

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

Обычные функции и функции-генераторы

Обычная функция

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...