目的関数とシステム最適化

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

Diogo Costa (PhD, MSc)

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

システム最適化

  • システム最適化

    • 最適な運用構成の特定
  • 人的プロセス

    • 最小コストで最大の出力(リソース・時間の削減)
  • システム出力への影響が大きいプロセスの特定

  • モンテカルロサンプリング

    • 成功を測定し、結果をランク付け
  • 目的関数

    • パフォーマンス目標を設定するターゲット関数
Pythonで学ぶ離散事象シミュレーション

目的関数

  • 出力目標を表す数式

  • シミュレーションシナリオのスコア付け

例

  • プロセスA: 35%
  • プロセスB: 20%
  • プロセスC: 45%

合計: 100%

  • プロセスC の重みが最大

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
Pythonで学ぶ離散事象シミュレーション

アプローチ1:Search & Stop

  • モンテカルロサンプリングで複数のシナリオを実行
  • 非決定的プロセスの複数の発生で構成
  • 条件を満たした時点で最適シナリオ探索ループを停止

例

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()

青い下端の線がSearch & Stop法の条件を満たした最後の実行に対応する、一連の逐次プロセスを含む製造工程の応答エンベロープを示すプロット。

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

アプローチ2:スコアとランク付け

  • モンテカルロサンプリングで複数のシナリオを実行
  • 結果のスコア付けとランク付け

例:製造業

自動車生産ラインのような複数の逐次タスク(プロセス)を含む工程。

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"])
Pythonで学ぶ離散事象シミュレーション

アプローチ2:スコアとランク付け

スコア

"RED": 低スコア; "BLUE": 高スコア 「荷降ろしと準備」「切断」「研磨」の各プロセスでシミュレートされたシナリオの目的関数スコアを示す散布図。

ランク

シミュレーション結果をスコアでランク付け 「荷降ろしと準備」「切断」「研磨」の各プロセスでシミュレートされたシナリオの目的関数スコアによるランキングプロット。

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

パフォーマンスを制限するクリティカルプロセスの特定

探索と停止

青い下端の線がSearch & Stop法の条件を満たした最後の実行に対応する、一連の逐次プロセスを含む製造工程の応答エンベロープ。最良シミュレーションで得られた各プロセスの最小所要時間が強調表示されている。

  • 「青」の線が「停止」条件を満たした

    • 合計所要時間 = 30分
  • 「最良」シミュレーションの内訳:

    • プロセス1:約10分 (sum = 20 min)
    • プロセス2:約10分 (sum = 20 min)
    • プロセス3:約8分 (sum = 28 min)
    • プロセス4:約2分 (sum = 30 min)
  • 「プロセス1」が目標達成の鍵

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

パフォーマンスを制限するクリティカルプロセスの特定

スコア

目的:最低スコア = 最短所要時間 「荷降ろしと準備」「切断」「研磨」の各プロセスでシミュレートされたシナリオの目的関数スコアを示す散布図。最良シミュレーションで得られた各プロセスの最小所要時間が強調表示されている。

ランク

「プロセス1」が目標達成の鍵 「荷降ろしと準備」「切断」「研磨」の各プロセスでシミュレートされたシナリオの目的関数スコアによるランキングプロット。最良シミュレーションで得られた各プロセスの最小所要時間が強調表示されている。

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

練習しましょう!

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

Preparing Video For Download...