Дискретно-событийное моделирование на Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Фреймворк дискретно-событийного моделирования на основе стандартного Python
Использует функции-генераторы для определения процессов и событий (рассматриваются в курсе Toolbox)
Масштабируемость:
Обычная функция
def mygenerator():
return 10
return возвращает значение и завершает выполнение функцииВызов функции:
10
Функция-генератор
def mygenerator():
yield 20
yield 12
yield возвращает значение и приостанавливает выполнение, сохраняя внутреннее состояние.Вызов генератора:
20
12
1) Создание среды SimPy
env = simpy.Environment()
2) Добавление функции-генератора в среду SimPy
env.process()
3) Запуск модели
env.run()
4) Пауза в симуляции
env.timeout()
5) Получение текущего времени симуляции
env.now
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!")
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)
Вывод модели в консоли:
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