SimPy - SimPy

SimPy, een gratis simulatiepakket voor discrete gebeurtenissen op basis van Python
SimPy logo.svg
Oorspronkelijke auteur (s) Klaus G. Müller, Tony Vignaux
Ontwikkelaar (s) Ontje Lünsdorf, Stefan Scherfke
Eerste uitgave 17 september 2002
Stabiele vrijlating
4.0.1 / 15 april 2020 ; 11 maanden geleden
Opslagplaats Bewerk dit op Wikidata
Geschreven in Python
Besturingssysteem Cross-platform
Type Discrete gebeurtenissimulatie
Licentie MIT
Website simpy .readthedocs .org

SimPy is een procesgebaseerd simulatiekader voor discrete gebeurtenissen op basis van standaard Python . De event dispatcher is gebaseerd op de generatoren van Python en kan ook worden gebruikt voor asynchrone netwerken of om multi-agentsystemen te implementeren (met zowel gesimuleerde als echte communicatie).

Processen in SimPy zijn eenvoudige Python-generatorfuncties en worden gebruikt om actieve componenten zoals klanten, voertuigen of agenten te modelleren. SimPy biedt ook verschillende soorten gedeelde bronnen om congestiepunten met beperkte capaciteit te modelleren (zoals servers, kassa's en tunnels). Vanaf versie 3.1 biedt het ook monitoringmogelijkheden om te helpen bij het verzamelen van statistieken over bronnen en processen.

Simpy 3.0 verandert van Python 2 naar 3.

Simulaties kunnen "zo snel mogelijk" worden uitgevoerd, in realtime (wandkloktijd) of door de gebeurtenissen handmatig te doorlopen.

Hoewel het theoretisch mogelijk is om continue simulaties uit te voeren met SimPy, heeft het geen functies om dat uit te voeren. SimPy is echter overdreven voor simulaties met een vaste stapgrootte waarbij uw processen geen interactie hebben met elkaar of met gedeelde bronnen - gebruik while in dit geval een eenvoudige lus.

De SimPy-distributie bevat tutorials, uitgebreide documentatie en een groot aantal voorbeelden.

Simpy 4.0 heeft Python 3.6+ nodig.

SimPy wordt vrijgegeven als open source software onder de MIT-licentie . De eerste versie werd uitgebracht in december 2002.

Voorbeeld

Een van de belangrijkste doelen van SimPy is om gebruiksvriendelijk te zijn. Hier is een voorbeeld van een eenvoudige simulatie simpy: een klok proces dat de lopende simulatietijd bij elke stap drukt:

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

Referenties