Pythonで学ぶ離散事象シミュレーション
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPyは3種類のリソースを提供:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
リソースの作成
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)リソースのリクエスト
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
前述のリソースのバリエーション
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
一部のプロセスは他より優先度が高い場合がある
例:修理担当者
使用方法は simpy.Resource() に準ずる
DNT_CURLY_TAG_7
最高優先度でリソースをリクエスト
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
低優先度でリソースをリクエスト
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
均質な一括物質の生産・消費モデルに有効
連続的(水など)または離散的(リンゴなど)
例: ガソリンスタンドの燃料タンク
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
コンテナへの追加・取り出し
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
現在の残量を取得
tank_1.level
タンクの総容量を取得
tank_1.capacity
ストアの作成
store_1 = simpy.Store(
env, capacity=2)
simpy.Container() に似ているが、異なるオブジェクトを格納可能
コンテナの抽象的な「量」とは対照的
yield store_1.put("item_1")
yield store_1.get()
利用可能なアイテム一覧を取得
store_1.items
ストアの容量を取得
store_1.capacity
例
現状:レジ1台
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
シミュレーション:レジn台
simpy.Resource(env, capacity=2)...
time: 13.2 min | Customer 30 > Finished
simpy.Resource(env, capacity=3)...
time: 8.6 min | Customer 30 > Finished
simpy.Resource(env, capacity=4)...
time: 8.6 min | Customer 30 > Finished
Pythonで学ぶ離散事象シミュレーション