Aan de slagGa gratis aan de slag

Monte Carlo-sampling voor een discrete-evenementenmodel met SimPy

Laten we nu dezelfde Monte Carlo-analyse opzetten met een SimPy-versie van het model. Het SimPy-model heeft een generator genaamd manufacturing_process, die verschillende processen simuleert, en een functie run_monte_carlo die het model meerdere keren draait en de informatie opslaat in een NumPy-array met de naam time_record.

De code die de resultaten uittekent lijkt op die uit de vorige oefening, maar is verplaatst naar een functie met de naam plot_results() die hieronder wordt getoond.

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

De Monte Carlo-samplingloop levert een reeks mogelijke procestrajecten op, zoals te zien is in de afbeelding. Monte Carlo trajectories for different process scenario.

Deze oefening maakt deel uit van de cursus

Discrete Event Simulation in Python

Cursus bekijken

Oefeninstructies

  • Klok de process_duration in met yield.
  • Sla de huidige tijd op in time_record.
  • Voer een for-loop uit voor n_trajectories steekproeven met hulpparameter t.
  • Maak de SimPy-omgeving, voeg processen toe en voer het model uit.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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