Русская Википедия:SimPy

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Карточка программы

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).