開始使用免費開始

使用 SimPy 進行離散事件模型的 Monte Carlo 抽樣

現在來用 SimPy 版的模型,建立與先前相同的 Monte Carlo 抽樣分析。這個 SimPy 模型包含一個名為 manufacturing_process 的產生器,用來模擬不同流程,另外有一個函式 run_monte_carlo 會多次執行模型,並把結果儲存在名為 time_record 的 NumPy 陣列中。

繪圖的程式碼與前一個練習相似,但已封裝到名為 plot_results() 的函式中,如下所示。

def plot_results():

    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")
    fig.set(xlim=(0, len(processes) + 1))
    plt.plot() 

Monte Carlo 抽樣迴圈會產生一系列可能的流程軌跡,如下圖所示。 Monte Carlo trajectories for different process scenario.

本練習屬於課程

Python 的離散事件模擬

檢視課程

練習說明

  • 記錄並 yield process_duration。
  • 將目前時間存入 time_record。
  • 以虛擬變數 t 針對 n_trajectories 樣本執行 for 迴圈。
  • 建立 SimPy 環境,加入流程並執行模型。

動手互動練習

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

def manufacturing_process(env):
    global time_record
    for p in range(len(processes)):
        proc_p = processes[p]
        process_duration = random.gauss(proc_p["Average_Duration"], proc_p["Standard_Deviation"])

        # Clock-in and yield the process_duration
        yield ____

        # Save the current time in time_record
        time_record[p + 1] = ____

def run_monte_carlo(n_trajectories):

    # Run a for-loop for n_trajectories samples with dummy variable t
    ____

        # Create the SimPy environment, add processes and run the model
        env = ____
        env.____(manufacturing_process(env))
        env.____()
        
        plot_results()
    plt.show()

run_monte_carlo(n_trajectories = 100)
編輯並執行程式碼