SimPyによる離散イベントモデルの構築

Pythonで学ぶ離散事象シミュレーション

Dr Diogo Costa

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

モデル構築の前に

  • 動的システムを理解する

  • 離散イベントモデルの目的を定義する

  • プロセスを特定する:

    • 並列実行
    • 順次実行
  • 適切なSimPyリソースを特定する(resource、container、store)

  • モデルのアーキテクチャを定義する:

    • 状態変数の特定
    • モデルのワークフロー
    • ジェネレータ
Pythonで学ぶ離散事象シミュレーション

動的システムとモデルの目的

動的システムを理解する

  • 挙動を左右する要因は何か?
  • 含めるべきプロセス/イベントは何か?

モデルの目的

  • システムの最適化に頻繁に使用される
  • 何を最適化したいか?

    • 顧客数の増加
    • 処理時間の短縮
    • リソース配分の最適化
  • これらの目的を監視するための状態変数

Pythonで学ぶ離散事象シミュレーション

適切なSimPyリソースの特定

共有リソース

simpy.Resource(env, capacity=4)
  • プロセス間で共有されるリソース

例

  • レストランのテーブル
  • 工場の機械
  • 劇場の座席
  • 店舗のレジ担当者

コンテナ

simpy.Container(env, capacity, 
init=initial_capacity)
  • タンクやバスケットのように振る舞うリソース

  • 数量の追加と取り出し:

.put() と .get()

例

  • ガソリンスタンドの燃料備蓄
  • 石炭火力発電所の石炭
Pythonで学ぶ離散事象シミュレーション

適切なSimPyリソースの特定

ストア

simpy.Store(env, capacity=4)
  • 複数のアイテムを持つ店舗のようなリソース

  • 容量は無制限(デフォルト)

  • 任意のオブジェクトを格納するスロット

  • アイテムの追加と取り出し:

.put() と .get()

例

  • 複数商品を販売する店舗
  • 倉庫
  • 作業場
  • 家庭
Pythonで学ぶ離散事象シミュレーション

ビット演算子を使用したイベントの連結

SimPyはビット演算子を使用して2つのイベントを連結します

Pythonの演算子の種類

  • 算術、論理、比較演算子

ビット演算子

  • 整数に対するビット演算
  • 2つのオペランドを必要とする
    • 例: a & b、a >> b、a ^ b

SimPyでは

  • ビット演算子は条件イベントを生成する
  • 2つのイベント/プロセスの両方または一方を待機する

SimPy向けの主なビット演算子

  • 両方のプロセスを待機: __and__() または &
  • いずれかのプロセスを待機: __or__() または |
Pythonで学ぶ離散事象シミュレーション

練習しましょう!

Pythonで学ぶ離散事象シミュレーション

Preparing Video For Download...