ÎncepețiÎncepe gratuit

Eșantionarea Monte Carlo pentru un model cu evenimente discrete în SimPy

Acum să construim aceeași analiză de eșantionare Monte Carlo folosind o versiune SimPy a modelului. Modelul SimPy are un generator numit manufacturing_process, care simulează diferite procese, și o funcție numită run_monte_carlo ce rulează modelul de mai multe ori, stocând informațiile într-un array NumPy numit time_record.

Codul care afișează rezultatele este similar cu cel din exercițiul anterior, însă a fost mutat într-o funcție numită plot_results() prezentată mai jos.

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() 

Bucla de eșantionare Monte Carlo va genera o serie de traiectorii posibile ale proceselor, așa cum se arată în figură. Traiectorii Monte Carlo pentru diferite scenarii de proces.

Acest exercițiu face parte din cursul

Simulare de evenimente discrete în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Înregistrează și aplică yield pentru process_duration.
  • Salvează timpul curent în time_record.
  • Rulează o buclă for pentru n_trajectories eșantioane, cu variabila auxiliară t.
  • Creează mediul SimPy, adaugă procesele și rulează modelul.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul