SimPy - SimPy
| 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
|
| Opslagplaats |
|
| Geschreven in | Python |
| Besturingssysteem | Cross-platform |
| Type | Discrete gebeurtenissimulatie |
| Licentie | MIT |
| Website | simpy |
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