Campionamento Monte Carlo per un modello a eventi discreti con SimPy
Ora costruiamo la stessa analisi di campionamento Monte Carlo usando una versione del modello in SimPy. Il modello SimPy ha un generatore chiamato manufacturing_process, che simula diversi processi, e una funzione chiamata run_monte_carlo che esegue il modello più volte, salvando le informazioni in un array NumPy chiamato time_record.
Il codice che traccia i risultati è simile a quello usato nell'esercizio precedente, ma è stato spostato in una funzione chiamata plot_results() mostrata qui sotto.
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()
Il loop di campionamento Monte Carlo produrrà una serie di possibili traiettorie di processo, come mostrato in figura.

Questo esercizio fa parte del corso
Simulazione a eventi discreti in Python
Istruzioni dell'esercizio
- Registra e fai yield di
process_duration. - Salva il tempo corrente in
time_record. - Esegui un for-loop per
n_trajectoriescampioni con variabile fittiziat. - Crea l'ambiente SimPy, aggiungi i processi ed esegui il modello.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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)