SimPy — Python фреймворк процессо-ориентированной дискретно-событийной системы моделирования. Его диспетчеры событий основаны на функциях-генераторах Python.
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 генераторы, которые используются для моделирования активных компонентов, например, таких как покупатели, транспортные средства или агенты. 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
Ссылки
править- ↑ Scherfke, Стефан (25 Июля 2014).