SimPy (SimPy)

Перейти к навигации Перейти к поиску
SymPy
Логотип программы SymPy
Тип фреймворк, процессо-ориентированная дискретно-событийная система моделирования
Авторы Klaus G. Müller, Tony Vignaux
Разработчики Ontje Lünsdorf, Stefan Scherfke
Написана на Python
Операционная система Кроссплатформенная
Первый выпуск 17 сентября 2002
Последняя версия 4.1.1 (12 ноября 2023)
Репозиторий gitlab.com/team-simpy/si…
Лицензия MIT
Сайт simpy.readthedocs.org
Логотип Викисклада Медиафайлы на Викискладе

SimPy — Python фреймворк процессо-ориентированной дискретно-событийной системы моделирования. Его диспетчеры событий основаны на функциях-генераторах Python.

Также они могут использоваться для создания асинхронных сетей или для реализации мультиагентных систем (с как моделируемым, так и реальным взаимодействием).

Процессы в SimPy — это просто Python генераторы, которые используются для моделирования активных компонентов, например, таких как покупатели, транспортные средства или агенты. SimPy также обеспечивает различные виды общих ресурсов для моделирования точек с ограниченной пропускной способностью (например, серверов, касс, тоннелей). Начиная с версии 3.1, SimPy также будет обеспечить возможности мониторинга для помощи в сборе статистических данных о ресурсах и процессах.

Моделирование может выполняться в режиме «as fast as possible», в режиме реального времени (wall clock time) или в режиме ручного выполнения событий.

Теоретически, в SimPy можно сделать непрерывную симуляцию, но фактически это не осуществимо. Однако, в случае моделирования с шагом фиксированного размера, где процессы не взаимодействуют с друг с другом или с общими ресурсами, может использоваться простой цикл while.

SimPy распространяется с руководством, подробной документацией и большим количеством примеров.

SimPy выпущен как open source проект под лицензией MIT. Первая версия была выпущена в декабре 2002 года.

Одна из главных целей SimPy — простота в использовании. Вот пример простого SimPy моделирования:[1] часовой процесс, который выводит текущее модельное время на каждом шаге:

>>> import simpy
>>>
>>> def clock(env, name, tick):
...     while True:
...         print(name, env.now)
...         yield env.timeout(tick)
...
>>> env = simpy.Environment()
>>> env.process(clock(env, 'fast', 0.5))
<Process(clock) object at 0x...>
>>> env.process(clock(env, 'slow', 1))
<Process(clock) object at 0x...>
>>> env.run(until=2)
fast 0
slow 0
fast 0.5
slow 1
fast 1.0
fast 1.5
  1. Scherfke, Стефан (25 Июля 2014).