インストール:
SimPyをインストールするには、次のコマンドを使用します—
pip install simpy
基本概念:
「SimPy」の主なアイデア—これはPythonのジェネレーター関数です。通常の関数とジェネレーターの違いは、通常の関数はreturnステートメントを使用するのに対し、ジェネレーターは—
関数にreturnステートメントがある場合、複数の関数呼び出しが行われた場合でも、同じ値が返されます。例:—
def
func():
< / p>
return
1
return
2
いつfunc()は実行時に呼び出され、returnステートメントの最初のインスタンスで常に返されます。つまり、func()は常に1を返し、次のreturnステートメントは実行されません。
ただし、個別のイベントをシミュレートするには、特定の時間Tでのシステムの状態を見つける必要がある場合があります。これを行うには、Tの直前の間隔の状態を記憶し、このシミュレーションを実行してT中の状態に戻ります。
ここでは、ジェネレーター関数は非常に単純です。たとえば、次の関数について考えてみます。
これで、この関数が最初に呼び出されたときに1が「与えられ」ますが、次に呼び出されたときに2が返されます。ある意味で、この関数はそれが何であるかを記憶しています。最後の呼び出しの後に返され、次の終了ステートメントに進みます。 SimPyのイベントは、プロセスと呼ばれ、独自のジェネレーター関数によって定義されます。これらのプロセスは、環境内で行われます。 (環境がプロセスを内部に格納する大きなボックスであると想像してください。) トラフィックライトのシミュレーションを含む簡単な例を見てみましょう&#8212;
終了: ライトは0でGRNに変わりますライトは25でYELに変わりますライトは30で赤に変わりますライトはGRNに変わりますat90LightがYELを115LightからREDat120に変える このコードでは、Traffic_Light(env)ジェネレーター関数が環境変数を引数として取り、次のように経過した期間の信号をシミュレートします。 env.run()への引数。 (実際、SimPyの時間には単位がありません。便宜上、時間、分、または秒に変換できます)。 env.nowは、現在の経過時間を返します。 env.timeout()関数は、引数として渡された時間がコンピューターのシミュレーションクロックで使用されることを想定しているため、このシミュレーションの基礎となります(リアルタイムではありません)、env.run()への引数として渡された時間が経過するまで、次のyieldステートメントをトリガーします。 env.run()は、環境に関連付けられたすべてのプロセスを開始します。同時に=0。 |