開始使用免費開始

製造最佳化:Score & Rank

我們來沿用掛鐘工廠的離散事件模型,並建立一個「Score & Rank」最佳化流程。為了方便你複習,底下的表格再次整理了製造流程。這些資訊已儲存在名為 processes 的字典清單中,每個流程對應一個字典。此字典的鍵與表格的欄位名稱相對應。

Table with process names and their duration statistics, namely mean and standard deviation.

本練習用來產生圖形的 plot_results() 方法已預先載入,並如下所示。

def plot_results(objective_func):
    # Score
    fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
    for p in range(len(processes)):
        sns.scatterplot(ax=axes[p], x=process_duration_all[:, p], y=objective_func, c=objective_func, cmap="turbo_r")
        axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
        axes[p].set_xlabel("Duration [min]", rotation = -10)
        axes[p].grid()
    axes[0].set_ylabel("Objective function score")
    plt.show()

    # Rank
    index_sort = np.argsort(objective_func)
    fig, axes = plt.subplots(1, len(processes), sharey=True, figsize=(10, 8))
    for p in range(len(processes)):
        sns.lineplot(ax=axes[p], x=np.linspace(0, NUM_SIMULATIONS, NUM_SIMULATIONS),
                     y=process_duration_all[index_sort, p], color="orchid")
        axes[p].set_title(processes[p]["Name"], rotation = 20, horizontalalignment='left')
        axes[p].set_xlabel("Score-ranked scenarios", rotation = -10)
        axes[p].grid()
    axes[0].set_ylabel("Duration [min]")
    plt.show()

Monte-Carlo 取樣的迴圈會產生一系列可能的流程軌跡並為其評分,如圖所示。 Monte Carlo trajectories for different process scenario.

本練習屬於課程

Python 的離散事件模擬

檢視課程

練習說明

  • 加入每個流程的分數貢獻;已知流程的歷時儲存在 process_duration_all[s, p],其對應權重儲存在 proc_p["score_weight_0_10"]。
  • 設定 for 迴圈執行 NUM_SIMULATIONS 次 Monte-Carlo 取樣,並以 s 作為虛擬變數。
  • 執行函式 run_monte_carlo() 中的 Monte Carlo 引擎(這會同時產生「score」與「rank」圖)。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

def objective_function_calc():
    objective_func = np.ones(NUM_SIMULATIONS)

    for s in range(NUM_SIMULATIONS):
        for p in range(len(processes)):
            proc_p = processes[p]
            
            # Add the score contribution of each process
            objective_func[s] += ____

    plot_results(objective_func)

def run_monte_carlo():

    # Set the for-loop to run NUM_SIMULATIONS Monte-Carlo runs 
    ____

        env = simpy.Environment()
        env.process(manufractoring_process(env, s))
        env.run()

    objective_function_calc()

# Run the Monte Carlo function
____
編輯並執行程式碼