ComenzarEmpieza gratis

Muestreo Monte Carlo para modelos de eventos discretos

Imagina una fábrica que produce relojes de pared. Los relojes se han vuelto cada vez más populares y ahora la demanda supera la capacidad de producción. La fábrica lleva meses funcionando a plena capacidad y quieres entender mejor su comportamiento y cuellos de botella para tomar decisiones de gestión más informadas y planificar futuras inversiones y expansión.

Se ha desarrollado un modelo de eventos discretos de los procesos de la fábrica, y ahora quieres ejecutar un análisis de muestreo Monte Carlo para explorar escenarios. El proceso de fabricación se resume en la tabla de abajo, y la información se ha almacenado en una lista de diccionarios llamada processes, con un diccionario por proceso. Las claves de cada diccionario corresponden a los encabezados de las columnas de la tabla. Ya se han importado los siguientes paquetes: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd y time.

Tabla con los nombres de los procesos y sus estadísticas de duración, concretamente media y desviación estándar.

El bucle de muestreo Monte Carlo producirá una serie de posibles trayectorias de proceso, como se muestra en la figura. Trayectorias Monte Carlo para distintos escenarios de proceso.

Este ejercicio forma parte del curso

Simulación de eventos discretos en Python

Ver curso

Instrucciones del ejercicio

  • Configura el bucle principal de muestreo Monte Carlo con n_trajectories muestras usando la variable ficticia t.
  • Usa la distribución gaussiana del paquete random para estimar de forma pseudoaleatoria la duración del proceso.

Ejercicio interactivo práctico

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

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