ÎncepețiÎncepe gratuit

Eșantionarea Monte Carlo pentru modele de simulare discretă

Imaginează-ți o fabrică ce produce ceasuri de perete. Cererea pentru aceste ceasuri a crescut considerabil, depășind capacitatea de producție. Fabrica funcționează la capacitate maximă de luni întregi, iar tu vrei să îi înțelegi mai bine comportamentul și blocajele, astfel încât să poți lua decizii manageriale mai bine fundamentate și să planifici investiții și extinderi viitoare.

A fost dezvoltat un model de simulare discretă a proceselor din fabrică, iar acum vrei să rulezi o analiză de eșantionare Monte Carlo pentru a explora diferite scenarii. Procesul de fabricație este rezumat în tabelul de mai jos, iar informațiile sunt stocate într-o listă de dicționare numită processes, cu câte un dicționar pentru fiecare proces. Cheile acestui dicționar corespund antetelor coloanelor din tabel. Următoarele pachete au fost deja importate: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd și time.

Tabel cu numele proceselor și statisticile de durată aferente, respectiv media și abaterea standard.

Bucla de eșantionare Monte Carlo va genera o serie de traiectorii posibile pentru procese, așa cum este ilustrat în figura de mai jos. 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

  • Configurează bucla for principală de eșantionare Monte Carlo pentru n_trajectories eșantioane, folosind variabila auxiliară t.
  • Folosește distribuția Gaussiană din pachetul random pentru a estima pseudo-aleator durata fiecărui proces.

Exercițiu interactiv practic

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

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