Pythonで学ぶ離散事象シミュレーション
Diogo Costa (PhD, MSc)
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
システム最適化
人的プロセス
システム出力への影響が大きいプロセスの特定
モンテカルロサンプリング
目的関数
出力目標を表す数式
シミュレーションシナリオのスコア付け
例
合計: 100%
Search & Stop:様々なモデル構成を実行し、条件を満たした時点で停止
while total_duration < 24:
model_to_run()
Score & Rank:重み付け基準に基づいてシミュレーション結果をスコア付け
for i in range(num_runs):
out_1, out_2 = model_to_run(i)
scores[i] = 0.3 * out_1 + 0.7 * out_2
例
scenario_num = 0
while scenario_num == 0 or total_duration[s] > 40:
scenario_num += 1
env = simpy.Environment()
env.process(manufacturing_proc(env))
env.run()
plot_results()

例:製造業
自動車生産ラインのような複数の逐次タスク(プロセス)を含む工程。
def objective_function_calc():
score_objfunc = np.ones(num_scenarios)
for s in range(num_scenarios):
for p in range(len(processes)):
score_objfunc[s] += (
processes[p]["duration_hours"]
* processes[p]["score_weight"])
スコア
"RED": 低スコア; "BLUE": 高スコア

ランク
シミュレーション結果をスコアでランク付け

探索と停止

「青」の線が「停止」条件を満たした
「最良」シミュレーションの内訳:
sum = 20 min)sum = 20 min)sum = 28 min)sum = 30 min)「プロセス1」が目標達成の鍵
スコア
目的:最低スコア = 最短所要時間

ランク
「プロセス1」が目標達成の鍵

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