LoslegenKostenlos loslegen

Monte-Carlo-Sampling für ein ereignisdiskretes Modell mit SimPy

Jetzt bauen wir die gleiche Monte-Carlo-Sampling-Analyse mit einer SimPy-Version des Modells. Das SimPy-Modell hat einen Generator namens manufacturing_process, der verschiedene Prozesse simuliert, und eine Funktion namens run_monte_carlo, die das Modell mehrfach ausführt und die Informationen in einem NumPy-Array namens time_record speichert.

Der Code zum Plotten der Ergebnisse ist dem aus der vorherigen Übung ähnlich, wurde aber in eine Funktion namens plot_results() verschoben, die unten gezeigt wird.

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

Die Monte-Carlo-Sampling-Schleife erzeugt eine Reihe möglicher Prozessverläufe, wie in der Abbildung zu sehen. Monte Carlo trajectories for different process scenario.

Diese Übung ist Teil des Kurses

Diskrete-Ereignis-Simulation mit Python

Kurs anzeigen

Anleitung zur Übung

  • Prozessdauer process_duration einplanen und yield ausführen.
  • Die aktuelle Zeit in time_record speichern.
  • Eine for-Schleife für n_trajectories Stichproben mit der Dummy-Variablen t ausführen.
  • Die SimPy-Umgebung erstellen, Prozesse hinzufügen und das Modell ausführen.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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 bearbeiten und ausführen