Pythonで学ぶ離散事象シミュレーション
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

標準 Python ベースのプロセス駆動型の離散事象シミュレーションフレームワーク
プロセスやイベントを定義するためジェネレーター関数を使用(Toolbox 受講前提で解説)
スケーラブル:
通常の関数
def mygenerator():
return 10
return は値を返し、関数の実行を終了関数の実行:
10
ジェネレーター関数
def mygenerator():
yield 20
yield 12
yield は値を返し、内部状態を保持したまま実行を一時停止ジェネレーターの実行:
20
12
1) SimPy 環境を作成
env = simpy.Environment()
2) ジェネレーター関数を環境に追加
env.process()
3) モデルを実行
env.run()
4) シミュレーションで時間を進める
env.timeout()
5) 現在のシミュレーション時刻を取得
env.now
1) SimPy パッケージをインポート
import simpy
2) プロセスを含むジェネレーター関数を作成
def traffic_light(env, name, timestep):
while True:
yield env.timeout(timestep)
print(f"Time {env.now:02d} sec | Traffic light at {name} | Red light!")
yield env.timeout(timestep)
print(f"Time {env.now:02d} sec | Traffic light at {name} | Yellow Light!")
yield env.timeout(timestep)
print(f"Time {env.now:02d} sec | Traffic light at {name} | Green Light!")
3) SimPy の環境を作成
env = simpy.Environment()
4) 生成器を SimPy 環境に追加
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) モデルを実行
env.run(until=90)
コンソール出力:
Time 15 sec | Traffic light at Leslie St. | Red light!
Time 30 sec | Traffic light at Arlington Av. | Red light!
Time 30 sec | Traffic light at Leslie St. | Yellow Light!
Time 45 sec | Traffic light at Leslie St. | Green Light!
Time 60 sec | Traffic light at Arlington Av. | Yellow Light!
Time 60 sec | Traffic light at Leslie St. | Red light!
Time 75 sec | Traffic light at Leslie St. | Yellow Light!
Pythonで学ぶ離散事象シミュレーション