SimPy
一款基於Python的離散事件模擬器 来自维基百科,自由的百科全书
SimPy是「Simulation in Python」的縮寫,意為「在Python中模擬」,是一個基於標準Python的過程型離散事件模擬框架[1]。它使用戶可以將活動組件(如客戶、車輛或代理)建模為簡單的Python 生成器函數。SimPy作為開源軟體在MIT許可證下,第一個版本於2002年12月發布[2]。
概述
SimPy的事件調度器是基於Python的生成器,這使得它可以應用於異步網絡或實現多代理系統(包括模擬和真實的通信)。模擬可以以「盡可能快」的方式進行,也可以實時進行(即按照實際時間),或者可以手動一步步地進行。儘管理論上SimPy可以進行連續模擬,但它並未提供足夠的支援。然而,對於那些具有固定步長、過程之間沒有互動或與共享資源交互的模擬,一個簡單的while
迴圈就足以應對[3]。
此外,SimPy提供了不同類型的共享資源,以模擬具有有限容量的擁塞點,如服務器、結帳櫃檯和隧道。在3.1版本及以上,SimPy提供了監控功能,以協助收集有關過程和資源的統計資訊。
有關於版本需求,SimPy 3.0需要Python 3[4],而SimPy 4.0需要Python 3.6+。SimPy發行版提供教程[5]、文件和範例供使用者學習。
範例
實作一個時鐘[6],該時鐘在每個步驟列印目前模擬時間:
>>> 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
參考資料
註解
Wikiwand - on
Seamless Wikipedia browsing. On steroids.