Установка:
Чтобы установить SimPy, используйте следующую команду —
pip install simpy
Основные понятия:
Основная идея ‚Äã‚ÄãSimPy — это функция-генератор в Python. Разница между обычной функцией и генератором заключается в том, что обычная функция использует оператор возврата, а генератор — оператор yield.
Если функция имеет оператор return, то даже если будет сделано несколько вызовов функции, она вернет одно и то же значение. Например —
def
func():
return
1
return
2
Когда func() вызывается во время выполнения, она всегда будет возвращаться в первом экземпляре оператора return, то есть func() всегда возвращает 1 , а следующий оператор return никогда не выполняется.
Однако, когда моделируя дискретные события, нам может понадобиться найти состояние системы в данный момент времени T. Для этого нужно запомнить состояние интервала непосредственно перед T, а затем выполнить это моделирование и вернуться в состояние во время T.
Здесь функции генератора весьма ezny. Например, рассмотрим следующую функцию
Теперь при первом вызове этой функции она "дает" 1. Однако при следующем вызове она вернет 2. В каком-то смысле она запоминает, что она возвращается после последнего вызова и переходит к следующему оператору выхода. События в SimPy называются процессами , которые определяются своими собственными функциями-генераторами. Эти процессы происходят в окружающей среде . (Представьте себе, что среда — это большая коробка, внутри которой хранятся процессы.) Давайте рассмотрим простой пример, включающий моделирование светофора —
Выход: Светофор загорается ЗЕЛЕНЫМ на 0 Свет загорается ЖЕЛ на 25 Свет загорается КРАСНЫМ на 30 Свет загорается ЗЕЛЕНЫМ на 90 Свет становится ЖЕЛТЫМ на 115 Свет становится КРАСНЫМ на 120 В этом коде функция-генератор Traffic_Light (env) принимает переменную среды в качестве аргумента и имитирует светофор в течение периода времени, передаваемого как аргумент для env.run(). (На самом деле время в SimPy не имеет единиц измерения. Хотя для удобства его можно перевести в часы, минуты или секунды). env.now возвращает текущее прошедшее время. Функция env.timeout() является основой этой симуляции, поскольку она ожидает, что время, переданное в качестве аргумента, будет использоваться на часах симуляции компьютера ( это не часы реального времени), а затем запускает следующий оператор yield до тех пор, пока не истечет время, переданное в качестве аргумента в env.run(). env.run() запускает все процессы, связанные с окружением в то же время = 0 . |