CommencerCommencer gratuitement

Échantillonnage de Monte Carlo pour un modèle à événements discrets avec SimPy

Construisons maintenant la même analyse d’échantillonnage Monte-Carlo en utilisant une version SimPy du modèle. Le modèle SimPy contient un générateur nommé manufacturing_process, qui simule différents processus, et une fonction appelée run_monte_carlo qui exécute le modèle plusieurs fois en enregistrant les informations dans un tableau NumPy nommé time_record.

Le code qui trace les résultats est similaire à celui de l’exercice précédent, mais il a été déplacé dans une fonction appelée plot_results() présentée ci-dessous.

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

La boucle d’échantillonnage Monte-Carlo produira une série de trajectoires de processus possibles, comme illustré sur la figure. Monte Carlo trajectories for different process scenario.

Cet exercice fait partie du cours

Simulation d’événements discrets en Python

Afficher le cours

Instructions

  • Enregistrez (clock-in) et yield process_duration.
  • Sauvegardez l’heure courante dans time_record.
  • Exécutez une boucle for pour n_trajectories échantillons avec la variable factice t.
  • Créez l’environnement SimPy, ajoutez les processus et exécutez le modèle.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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)
Modifier et exécuter le code