始める無料で始める

離散イベントモデルのためのモンテカルロサンプリング

壁掛け時計を製造する工場を想像してください。時計は人気が高まり、需要が生産能力を上回っています。工場は数カ月にわたりフル稼働しており、今後の投資や拡張を計画し、より良い経営判断ができるよう、工場の振る舞いやボトルネックをより深く理解したいと考えています。

工場プロセスの離散イベントモデルは作成済みで、これからシナリオ探索のためにモンテカルロサンプリング分析を実行します。製造プロセスは以下の表に要約されており、情報は各プロセスにつき 1 つの辞書からなる辞書のリスト processes に保存されています。この辞書のキーは表の列見出しに対応します。次のパッケージはすでにインポートされています:numpy as npmatplotlib.pyplot as pltseaborn as snsrandompandas as pdtime

プロセス名と所要時間の統計(平均と標準偏差)を示す表。

モンテカルロのサンプリングループは、下図のように、起こり得るプロセス軌跡の系列を生成します。 異なるプロセスシナリオに対するモンテカルロ軌跡。

この演習はコースの一部です

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

コースを見る

演習の手順

  • n_trajectories 個のサンプルについて、ダミー変数 t を用いたメインのモンテカルロサンプリング用 for ループを設定します。
  • プロセスの所要時間を疑似乱数で見積もるため、random パッケージのガウス分布を使用します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

n_trajectories = 100

# Run a Monte-Carlo for-loop for n_trajectories samples
____

    for p in range(len(processes)):
        proc_p = processes[p]

        # Random gauss method to pseudo-randomly estimate process duration
        process_duration = ____(proc_p["Average_Duration"], proc_p["Standard_Deviation"])
        time_record[p + 1] = time_record[p] + process_duration

    df_disc = pd.DataFrame({cNam[0]: process_line_space, cNam[1]: time_record})
    fig = sns.lineplot(data=df_disc, x=cNam[0], y=cNam[1], marker="o")  # Step_10
    fig.set(xlim=(0, len(processes) + 1))
    plt.plot()
plt.grid()
plt.show()
コードを編集して実行