IniziaInizia gratis

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.

Tabella con i nomi dei processi e le loro statistiche di durata, ovvero media e deviazione standard.

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

Questo esercizio fa parte del corso

Simulazione a eventi discreti in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Imposta il ciclo for principale di campionamento Monte Carlo per n_trajectories campioni con la variabile fittizia t.
  • Usa la distribuzione gaussiana del pacchetto random per 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()
Modifica ed esegui il codice