SimPy - SimPy

SimPy, ett gratis diskret-händelsessimuleringspaket baserat på Python
SimPy logo.svg
Originalförfattare Klaus G. Müller, Tony Vignaux
Utvecklare Ontje Lünsdorf, Stefan Scherfke
Första utgåvan 17 september 2002  ( 2002-09-17 )
Stabil frisättning
4.0.1 / 15 april 2020 ; För 11 månader sedan  ( 2020-04-15 )
Förvar Redigera detta på Wikidata
Skrivet i Pytonorm
Operativ system Tvärplattform
Typ Diskret händelsimulering
Licens MIT
Hemsida simpy .readthedocs .org

SimPy är ett processbaserat ramverk för diskret händelsimulering baserat på standard Python . Dess evenemangssändare är baserad på Pythons generatorer och kan också användas för asynkront nätverk eller för att implementera multi-agent-system (med både, simulerad och verklig kommunikation).

Processer i SimPy är enkla Python-generatorfunktioner och används för att modellera aktiva komponenter som kunder, fordon eller agenter. SimPy tillhandahåller också olika typer av delade resurser för att modellera trängselpunkter med begränsad kapacitet (som servrar, kassadiskar och tunnlar). Från version 3.1 kommer den också att tillhandahålla övervakningsfunktioner som hjälper till att samla in statistik om resurser och processer.

Simpy 3.0 ändras från Python 2 till 3.

Simuleringar kan utföras "så snabbt som möjligt", i realtid (väggklocktid) eller genom att manuellt gå igenom händelserna.

Även om det teoretiskt är möjligt att göra kontinuerliga simuleringar med SimPy, har det inga funktioner för att utföra det. SimPy är dock överdrivet för simuleringar med en fast stegstorlek där dina processer inte interagerar med varandra eller med delade resurser - använd en enkel while slinga i det här fallet.

SimPy-distributionen innehåller handledning, djupgående dokumentation och ett stort antal exempel.

Simpy 4.0 behöver Python 3.6+.

SimPy släpps som programvara med öppen källkod under MIT-licensen . Den första versionen släpptes i december 2002.

Exempel

Ett av SimPys huvudmål är att vara enkel att använda. Här är ett exempel på en enkel SimPy-simulering: en klockprocess som skriver ut aktuell simuleringstid vid varje steg:

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

Referenser