Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでSimPyを使用した離散イベントシミュレーションの基本


PythonでSimPyを使用した離散イベントシミュレーションの基本

SimPy(「Blimpie」と韻を踏む)は、プロセス指向の離散イベントシミュレーション用のPythonパッケージです。

インストール

SimPyをインストールする最も簡単な方法は、pipを使用することです:

pip install simpy

そして、あなたが得るかもしれない出力は次のようになります、

PythonでSimPyを使用した離散イベントシミュレーションの基本

執筆時点では、simpy-3.0.11はSimPyの最新バージョンであり、以下のすべての例で使用します。

SimPyがすでにインストールされている場合は、pipの–Uオプションを使用してアップグレードします。

pip install –U simpy

:Python 2.7以降のバージョンが必要です。また、Linux / Unix / MacOSの場合、SimPyをインストールするにはroot権限が必要になる場合があります。

SimPyが正常にインストールされたかどうかを確認するには、Pythonシェルを開き、simpyをインポートします。

基本概念

SimPyは、離散イベントシミュレーションライブラリです。 simpyのアクティブなコンポーネント(メッセージ、車両、顧客など)は、プロセスでモデル化されます。 SimPyでは、アクティブなエンティティはプロセスと呼ばれます。プロセスは、離散イベントを生成するPythonジェネレーターです。注意してください、私は何も返しませんが、私はyield(ing)です。これは、通常の関数とジェネレーターの違いです。これにより、イベントを作成して生成し、トリガーされるのを待つことができます。

プロセスがイベントを生成すると、プロセスは一時停止されます。 SimPyを使用すると、イベントがトリガーされるたびに中断されたプロセスを再開できます。複数のプロセスが同じイベントを待機している場合、SimPyは、そのイベントを生成したのと同じ順序でプロセスを再開します。

def gen(x):
y = yield x+1
return y


>>> g = gen(1)
>>> next(g)
2
>>> next(g)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
next(g)
StopIteration

上記の反復は、変数xの最初のyieldの後に停止します。

タイムアウトタイプのイベントは、一定の(シミュレートされた)時間が経過した後にトリガーされます。タイムアウトイベントにより、プロセスは特定の時間保持またはスリープすることができます。タイムアウトを含むすべてのイベントは、プロセスが存在する環境の適切なメソッドを呼び出すことで作成できます。

#Import important library
from random import randint
import simpy
#Config
TALKS_PER_SESSION = 3
TALK_LENGTH = 30
BREAK_LENGTH = 15
ATTENDEES = 1
def attendee(env, name, knowledge=0, hunger=0):
   talks =0
   breaks =0
   #Repeat sessions
   while True:
      # Visit talks
      for i in range(TALKS_PER_SESSION):
      print('Talk {0} begins at {1}'.format(talks+1, env.now))
      knowledge += randint(0, 3) / (1 + hunger)
      hunger += randint(1, 4)
      talks += 1
      yield env.timeout(TALK_LENGTH)
      print(f'Talk {talks} ends at {env.now}')
   print('Attendee %s finished talks with knowledge %.2f and hunger ' '%.2f' %( name, knowledge, hunger))
   #Take a break, Go to buffet
   food = randint(3, 12)
   hunger -= min(food, hunger)
   yield env.timeout(BREAK_LENGTH)
   print('Attendee %s finished eating with hunger %.2f ' %(name, hunger))
# Run Simulation
env = simpy.Environment()
for i in range(ATTENDEES):
   env.process(attendee(env, i))
env.run(until=250)

上記のプログラムを実行すると、次のような出力が表示されます。

PythonでSimPyを使用した離散イベントシミュレーションの基本

上記では、会議ホールのシナリオを再現しようとしています。このシナリオでは、セッションごとにランダムな数のスピーカーが4人、トークの長さは40分、休憩の長さは30分です。

参加者のプロセスでは、新しいイベントを作成するために、環境(env)、名前、知識、および空腹への参照が必要です。セッションは、Falseになるまで無限ループになります。 Attendee()関数はジェネレーターであり、終了しませんが、yieldステートメントに到達すると制御フローをシミュレーションに戻します。

最後に、設定値250に達するまで、デモシミュレーション「会議出席者」を実行します(3トーク、1ブレーク、3トーク、1ブレーク、1トークを含む)。


  1. Pythonを使用しているWhatsapp?

    このセクションでは、Whatsappチャットボットを作成しますが、TwitterやFacebook用の他のいくつかのチャットボットとは異なり、whatsappのポリシーのため、whatsappチャットボットはプラットフォーム上で直接実行されません。 しかし、Pythonの非常にスマートなパッケージであるseleniumを使用して、開発者がブラウザのアクティビティを自動化できるようにする方法があります。これにより、ブラウザからwhatsapp-webを利用できます。 要件 物事を成し遂げるためには、3つの基本的なことが必要です。セレン。 ターミナルで以下のコマンドを実行するだけで、pipを

  2. PythonでのCX_Freezeの使用

    時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、