SimPy - SimPy

SimPy, en gratis diskret hændelses simuleringspakke baseret på Python
SimPy logo.svg
Oprindelige forfatter (e) Klaus G. Müller, Tony Vignaux
Udvikler (r) Ontje Lünsdorf, Stefan Scherfke
Første udgivelse 17. september 2002  ( 2002-09-17 )
Stabil frigivelse
4.0.1 / 15. april 2020 ; 11 måneder siden  ( 2020-04-15 )
Datalager Rediger dette på Wikidata
Skrevet i Python
Operativ system Tværplatform
Type Diskret begivenhedssimulering
Licens MIT
Internet side simpy .readthedocs .org

SimPy er en procesbaseret diskret-event simuleringsramme baseret på standard Python . Dens begivenhedssender er baseret på Pythons generatorer og kan også bruges til asynkront netværk eller til at implementere multi-agent-systemer (med både simuleret og reel kommunikation).

Processer i SimPy er enkle Python-generatorfunktioner og bruges til at modellere aktive komponenter som kunder, køretøjer eller agenter. SimPy leverer også forskellige typer delte ressourcer til modellering af overbelastningspunkter med begrænset kapacitet (som servere, kassetællere og tunneler). Fra version 3.1 giver den også overvågningsfunktioner til at hjælpe med at indsamle statistik om ressourcer og processer.

Simpy 3.0 skifter fra Python 2 til 3.

Simuleringer kan udføres "så hurtigt som muligt", i realtid (vægurstid) eller ved manuelt at gå gennem begivenhederne.

Selvom det teoretisk er muligt at lave kontinuerlige simuleringer med SimPy, har det ingen funktioner til at udføre det. SimPy er dog overkill til simuleringer med en fast trinstørrelse, hvor dine processer ikke interagerer med hinanden eller med delte ressourcer - brug en simpel while sløjfe i dette tilfælde.

SimPy-distributionen indeholder tutorials, detaljeret dokumentation og et stort antal eksempler.

Simpy 4.0 har brug for Python 3.6+.

SimPy frigives som open source- software under MIT-licensen . Den første version blev udgivet i december 2002.

Eksempel

Et af SimPys hovedmål er at være nem at bruge. Her er et eksempel på en simpel simpy simulation: en ur proces, der udskriver det aktuelle simulering tid på hvert trin:

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

Referencer