非決定論的なイベントとプロセス

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

Diogo Costa (PhD, MSc)

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

イベントの非決定性

注意:「イベント」と「プロセス」は同義で使用されます。

イベント(またはプロセス)の非決定性とは?

  • プロセスを正確に予測できないこと
  • 「非決定論的」プロセスとも呼ばれる

決定論的プロセスが重要な理由

  • 自然・人為的な活動には非決定論的プロセスが多い
  • 発生するたびに異なる形で繰り返される
  • 所要時間を正確に決定できない
  • システムの出力に大きな影響を与える可能性がある
Pythonで学ぶ離散事象シミュレーション

非決定論的プロセス・イベントの例

自然界

  • 火山が噴火する瞬間
  • 雨が降る正確な瞬間
  • 落雷の日時と場所
  • 竜巻が発生する日時と場所

人為的なプロセス

  • 機械が故障する瞬間
  • トイレに行きたくなる瞬間
  • 赤ちゃんが泣き始める瞬間
  • 航空便が遅延するかどうか
Pythonで学ぶ離散事象シミュレーション

離散イベントモデルにおける非決定論的イベントの表現

非決定論的プロセス

  • システムへの影響が毎回異なる
  • 正確な所要時間が不明

統計

  • プロセスの所要時間のばらつきを表す
  • random パッケージが有用

  • 例:random.randint(start, end)

import random

# Non-deterministic processes
process_1 = [5, 15]

while time < simulation_time:

   # Update simulation time: process_1
   time += random.randint(
               process_1[0], 
               process_1[1])

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

SimPyを用いた非決定論的イベントの表現

  • 非決定論的プロセスに対応する専用メソッドはない

  • イベント所要時間のばらつきは非SimPyモデルと同様に算出

  • 適切な統計値を .timeout() に渡す DNT_CURLY_TAG_3

import random

# Non-deterministic processes
process_1 = [5, 15]

while True:

  # Update simulation time: process_1
  yield env.timeout(random.randint(
         process_1[0], 
         process_1[1]))
Pythonで学ぶ離散事象シミュレーション

練習しましょう!

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

Preparing Video For Download...