IniziaInizia gratis

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. Monte Carlo trajectories for different process scenario.

Questo esercizio fa parte del corso

Simulazione a eventi discreti in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Registra e fai yield di process_duration.
  • Salva il tempo corrente in time_record.
  • Esegui un for-loop per n_trajectories campioni con variabile fittizia t.
  • 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)
Modifica ed esegui il codice