SimPy

SimPy, darmowy pakiet symulacji zdarzeń dyskretnych oparty na Pythonie
Oryginalni autorzy Klaus G. Müller, Tony Vignaux
Deweloperzy Ontje Lünsdorf, Stefan Scherfke
Pierwsze wydanie 17 września 2002 ( 17.09.2002 )
Wersja stabilna
4.0.1 / 15 kwietnia 2020 r . ; 2 lata temu ( 2020-04-15 )
Magazyn
Napisane w Pyton
System operacyjny Międzyplatformowe
Typ Symulacja zdarzeń dyskretnych
Licencja MIT
Strona internetowa prosty .readthedocs .org

SimPy to oparta na procesach struktura symulacji zdarzeń dyskretnych oparta na standardowym języku Python . SimPy jest udostępniany jako oprogramowanie typu open source na licencji MIT . Pierwsza wersja została wydana w grudniu 2002 roku.

generatorach Pythona i może być również używany do sieci asynchronicznych lub do implementacji systemów wieloagentowych (z komunikacją symulowaną i rzeczywistą). Symulacje można przeprowadzać „tak szybko, jak to możliwe”, w czasie rzeczywistym (czas zegara ściennego) lub ręcznie przechodząc przez zdarzenia. Chociaż teoretycznie możliwe jest przeprowadzanie ciągłych symulacji za pomocą SimPy, nie ma on żadnych funkcji, które by to umożliwiały. Jednak SimPy to przesada w przypadku symulacji ze stałym rozmiarem kroku, w których procesy nie wchodzą ze sobą w interakcje ani ze współdzielonymi zasobami — w tym przypadku użyj prostej pętli while .

Procesy w SimPy są prostymi funkcjami generatora Pythona i służą do modelowania aktywnych komponentów, takich jak klienci, pojazdy lub agenci. SimPy zapewnia również różne rodzaje współdzielonych zasobów do modelowania punktów zatoru o ograniczonej przepustowości (takich jak serwery, kasy i tunele). Od wersji 3.1 zapewni również funkcje monitorowania, które pomogą w gromadzeniu statystyk dotyczących zasobów i procesów.

Simpy 3.0 wymaga Pythona 3. , podczas gdy Simpy 4.0 wymaga Pythona 3.6+. Dystrybucja SimPy zawiera samouczki, dokumentację i przykłady.

Przykład

Poniżej znajduje się symulacja SimPy pokazująca proces zegara , który drukuje bieżący czas symulacji na każdym kroku:

 

   
     
         
         

   >>>  import  simpy  >>>  >>>  def  clock  (  env  ,  name  ,  tick  ):  ...  while  True  :  ...  print  (  name  ,  env  .  now  )  ...  yield  env  .  limit czasu  (  tik  )  ...  >>>  env  =  simpy  .  Środowisko  () 
  

  



 >>>  śr  .  process  (  clock  (  env  ,  'fast'  ,  0.5  ))  <Process(clock) obiekt w 0x...>  >>>  env  .  process  (  clock  (  env  ,  'slow'  ,  1  ))  <Process(clock) obiekt w 0x...>  >>>  env  .  biegnij  (  =  2  )  szybko 0  wolno 0 



 szybko 0,5  wolno 1  szybko 1,0  szybko 1,5