Zacznij terazZacznij za darmo

Próbkowanie Monte Carlo dla modeli zdarzeń dyskretnych

Wyobraź sobie fabrykę produkującą zegary ścienne. Popyt na nie stale rośnie i przekroczył już możliwości produkcyjne zakładu. Fabryka pracuje na pełnych obrotach od wielu miesięcy, a ty chcesz lepiej zrozumieć jej działanie i wąskie gardła – po to, by móc podejmować bardziej świadome decyzje zarządcze oraz planować przyszłe inwestycje i rozbudowę.

Opracowano model zdarzeń dyskretnych procesów fabrycznych, a teraz chcesz przeprowadzić analizę próbkowania Monte Carlo w celu zbadania różnych scenariuszy. Proces produkcyjny jest podsumowany w poniższej tabeli, a dane zostały zapisane na liście słowników o nazwie processes – po jednym słowniku na każdy proces. Klucze słownika odpowiadają nagłówkom kolumn tabeli. Następujące pakiety zostały już zaimportowane: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd oraz time.

Tabela z nazwami procesów i ich statystykami czasu trwania: wartością średnią i odchyleniem standardowym.

Pętla próbkowania Monte Carlo wygeneruje zestaw możliwych trajektorii procesów, jak pokazano na rysunku. Trajektorie Monte Carlo dla różnych scenariuszy procesów.

To ćwiczenie jest częścią kursu

Symulacja zdarzeń dyskretnych w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Skonfiguruj główną pętlę for próbkowania Monte Carlo dla n_trajectories próbek, używając zmiennej pomocniczej t.
  • Użyj rozkładu Gaussa z pakietu random, aby pseudolosowo oszacować czas trwania każdego procesu.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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()
Edytuj i uruchom kod