決定論的プロセスと非決定論的プロセスの組み合わせ

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

Diogo Costa (PhD, MSc)

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

決定論的プロセスと非決定論的プロセス

あるシステムのプロセスの流れを示す図。決定論的プロセスであるプロセスAから始まり、非決定論的プロセスであるプロセスBを経て、決定論的プロセスであるプロセスCで終わる。

例:空港における旅客の流れの管理

  • 非決定論的:旅客が空港に到着する時刻
  • 決定論的:チェックイン後の空港内での荷物の運搬
Pythonで学ぶ離散事象シミュレーション

例:工場の組み立てライン

決定論的プロセス

  • 工場への原材料の輸送
  • 完全自動化された工程
  • 品質検査
  • 梱包
  • 顧客への新製品の輸送

例:溶接機

処理時間 = 溶接ラインの長さ × 溶接機の速度

非決定論的プロセス

  • 原材料の発注
  • 複雑な部品の手作業による組み立て

特定の手作業による組み立てを繰り返し行った際の所要時間を示す散布図。

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

決定論的プロセス

例:溶接を含む組み立てライン

  • 2つの決定論的プロセス
    welding_1

welding_2

  • welding_1

    • プロセス名:部品Aの溶接

    • 処理時間:5 時間

  • welding_2
    • プロセス名:部品Bの溶接
    • 処理時間:length * hours_per_length

各プロセスの dictionary を作成します:

welding_1 = {
    "name": "Welding component A",
    "time_hours": 5
}

length = 20   # meters
hours_per_length = 0.2  # hours 

welding_2 = {
    "name": "Welding component B",
    "time_hours": length * hours_per_length
}
Pythonで学ぶ離散事象シミュレーション

非決定論的プロセス

例:組み立てライン

  • 2つの非決定論的プロセス manual_assembly_1

manual_assembly_2

  • manual_assembly_1

    • プロセス名:手作業組み立てA
    • 平均処理時間:80 時間

    • 標準偏差:5 時間

  • manual_assembly_2
    • プロセス名:手作業組み立てB"
    • 平均処理時間:20 時間
  • 標準偏差:2 時間

各プロセスの dictionary を作成します:

manual_assembly_1 = {
    "name": "Manual Assembly A",
    "time_hours": 80,
    "std_hours": 5
}
manual_assembly_2 = {
    "name": "Manual Assembly B",
    "time_hours": 20,
    "std_hours": 2}
Pythonで学ぶ離散事象シミュレーション

イベントベースのシミュレーションを構築する

製造プロセスの流れ 製造活動のプロセスの流れを示す図。時系列順にwelding1、manualassembly1、manualassembly2、welding2のプロセスが含まれる。

離散事象モデル

# Initiate time-tracking variable
time = numpy.zeros(number_of_processes)

# Next-event time progression time[0] = 0 time[1] = time[0] + welding_1["time_hours"] time[2] = time[1] + rd.gauss(manual_assembly_1["time_hours"], manual_assembly_1["std_hours"]) time[3] = time[2] + rd.gauss(manual_assembly_2["time_hours"], manual_assembly_2["std_hours"]) time[4] = time[3] + welding_2["time_hours"] time[5] = time[4]
Pythonで学ぶ離散事象シミュレーション

時間の単位とモデルの検証

  • 時間の単位
    • すべてのプロセスで時間の単位を統一します。
Pythonで学ぶ離散事象シミュレーション

練習しましょう!

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

Preparing Video For Download...