Kom igångKom igång gratis

Monte Carlo-sampling för diskreta händelsemodeller

Föreställ dig en fabrik som tillverkar väggklockor. Klockorna har blivit allt populärare och efterfrågan överstiger nu produktionskapaciteten. Fabriken har arbetat på full kapacitet i månader, och du vill förstå dess beteende och flaskhalsar bättre för att kunna fatta välgrundade beslut och planera framtida investeringar och expansion.

En diskret händelsemodell av fabrikens processer har tagits fram, och nu vill du köra en Monte Carlo-samplinganalys för att utforska olika scenarier. Tillverkningsprocessen sammanfattas i tabellen nedan, och informationen har lagrats i en lista med ordböcker med namnet processes, med en ordbok per process. Nycklarna i ordboken motsvarar tabellens kolumnrubriker. Följande paket har importerats åt dig: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd och time.

Tabell med processnamn och deras varaktighetsstatistik, nämligen medelvärde och standardavvikelse.

Monte Carlo-samplingsloopen genererar en serie möjliga processtrajektorier, som visas i figuren. Monte Carlo-trajektorier för olika processscenarier.

Den här övningen är en del av kursen

Diskret händelsesimulering i Python

Visa kurs

Övningsinstruktioner

  • Sätt upp den huvudsakliga Monte Carlo-samplingsloopen med en for-slinga för n_trajectories sampel med dummyvariabeln t.
  • Använd Gaussfördelningen från paketet random för att pseudoslumpmässigt skatta processens varaktighet.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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()
Redigera och kör kod