SimPyは「Simulation in Python」の略で、標準Pythonに基づいたプロセスベースの離散イベントシミュレーションフレームワークです。[ 1 ]顧客、車両、エージェントなどのアクティブなコンポーネントをシンプルなPythonジェネレーター関数としてモデル化できます。SimPyはMITライセンスの下でオープンソースソフトウェアとしてリリースされています。最初のバージョンは2002年12月にリリースされました。[ 2 ]
そのイベントディスパッチャはPythonのジェネレータに基づいており、非同期ネットワークやマルチエージェントシステム(シミュレーションと実際の通信の両方を含む)の実装に使用できます。シミュレーションは「可能な限り高速に」、リアルタイム(実時間)で、またはイベントを手動でステップ実行することで実行できます。理論的にはSimPyで連続シミュレーションを実行することは可能ですが、それをサポートする機能が不足しています。ただし、プロセス同士や共有リソースとの相互作用がない固定ステップサイズのシミュレーションでは、単純なwhileループで十分です。[ 3 ]
さらに、SimPyは、サーバー、レジカウンター、トンネルなど、容量が限られた混雑箇所をシミュレートするための様々な種類の共有リソースを提供します。バージョン3.1以降では、プロセスやリソースに関する統計情報を収集するのに役立つ監視機能が提供されています。
SimPy 3.0 は Python 3 を必要としますが、[ 4 ] SimPy 4.0 は Python 3.6 以降を必要とします。SimPy ディストリビューションにはチュートリアル、[ 5 ]ドキュメント、およびサンプルが含まれています。
以下は、各ステップで現在のシミュレーション時間を表示するクロックプロセスを示すSimPy シミュレーション[ 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