ComenzarEmpieza gratis

Muestreo de Monte Carlo para un modelo de eventos discretos con SimPy

Ahora vamos a construir el mismo análisis de muestreo Monte Carlo usando una versión en SimPy del modelo. El modelo en SimPy tiene un generador llamado manufacturing_process, que simula distintos procesos, y una función llamada run_monte_carlo que ejecuta el modelo varias veces y guarda la información en un array de NumPy llamado time_record.

El código que dibuja los resultados es similar al usado en el ejercicio anterior, pero se ha movido a una función llamada plot_results() que se muestra a continuación.

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

El bucle de muestreo Monte Carlo producirá una serie de posibles trayectorias de proceso, como se muestra en la figura. Monte Carlo trajectories for different process scenario.

Este ejercicio forma parte del curso

Simulación de eventos discretos en Python

Ver curso

Instrucciones del ejercicio

  • Registra y haz yield de process_duration.
  • Guarda el tiempo actual en time_record.
  • Ejecuta un bucle for para n_trajectories muestras usando la variable ficticia t.
  • Crea el entorno de SimPy, añade los procesos y ejecuta el modelo.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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)
Editar y ejecutar código