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.

Este ejercicio forma parte del curso
Simulación de eventos discretos en Python
Instrucciones del ejercicio
- Registra y haz yield de
process_duration. - Guarda el tiempo actual en
time_record. - Ejecuta un bucle for para
n_trajectoriesmuestras usando la variable ficticiat. - 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)