Campionamento Monte Carlo per modelli a eventi discreti
Immagina una fabbrica che produce orologi da parete. Gli orologi stanno diventando sempre più popolari e ora la domanda supera la capacità produttiva. La fabbrica lavora a pieno regime da mesi e tu vuoi capire meglio il suo comportamento e i colli di bottiglia, in modo da prendere decisioni gestionali più informate e pianificare investimenti ed espansioni future.
È stato sviluppato un modello a eventi discreti dei processi di fabbrica e ora vuoi eseguire un'analisi di campionamento Monte Carlo per esplorare diversi scenari. Il processo produttivo è riassunto nella tabella qui sotto e le informazioni sono state memorizzate in una lista di dizionari chiamata processes, con un dizionario per processo. Le chiavi di ciascun dizionario corrispondono alle intestazioni delle colonne della tabella. I seguenti pacchetti sono già stati importati per te: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd e time.

Il ciclo di campionamento Monte Carlo produrrà una serie di possibili traiettorie di processo, come mostrato nella figura.

Questo esercizio fa parte del corso
Simulazione a eventi discreti in Python
Istruzioni dell'esercizio
- Imposta il ciclo for principale di campionamento Monte Carlo per
n_trajectoriescampioni con la variabile fittiziat. - Usa la distribuzione gaussiana del pacchetto
randomper stimare in modo pseudocasuale la durata del processo.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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()