CommencezCommencez gratuitement

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

Construisons maintenant la même analyse par é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 et stocke l'information dans un tableau NumPy nommé time_record.

Le code qui trace les résultats ressemble à celui utilisé dans l'exercice précédent, mais il a été déplacé dans une fonction nommé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 possibles des processus, comme illustré dans la figure. Trajectoires de Monte-Carlo pour différents scénarios de processus.

Cette activité fait partie du cours

Simulation d'événements discrets en Python

Voir le cours

Instructions de l’exercice

  • Comptabilisez et cédez process_duration.
  • Enregistrez 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 ce code d’exemple.

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