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