Aan de slagGa gratis aan de slag

Monte Carlo-steekproeven voor discrete-evenementmodellen

Stel je een fabriek voor die wandklokken produceert. De klokken worden steeds populairder en de vraag is nu hoger dan de productiecapaciteit. De fabriek draait al maanden op volle toeren, en je wilt het gedrag en de knelpunten beter begrijpen zodat je beter onderbouwde managementbeslissingen kunt nemen en toekomstige investeringen en uitbreiding kunt plannen.

Er is een discrete-evenementmodel van de fabrieksprocessen ontwikkeld, en je wilt nu een Monte Carlo-steekproefanalyse uitvoeren om scenario’s te verkennen. Het productieproces is samengevat in de onderstaande tabel, en de informatie is opgeslagen in een lijst met dictionaries met de naam processes, met één dictionary per proces. De keys van deze dictionary komen overeen met de kolomkoppen van de tabel. De volgende pakketten zijn alvast voor je geïmporteerd: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd en time.

Table with process names and their duration statistics, namely mean and standard deviation.

De Monte Carlo-steekproeflus zal een reeks mogelijke procestrajecten opleveren, zoals in de figuur te zien is. Monte Carlo-trajecten voor verschillende processcenario’s.

Deze oefening maakt deel uit van de cursus

Discrete Event Simulation in Python

Cursus bekijken

Oefeninstructies

  • Zet de hoofd-for-lus voor Monte Carlo-steekproeven op voor n_trajectories samples met de dummyvariabele t.
  • Gebruik de Gauss-verdeling uit het pakket random om de procesduur pseudo-willekeurig te schatten.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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()
Code bewerken en uitvoeren