开始使用免费开始使用

使用 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)
编辑并运行代码