É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.

Cet exercice fait partie du cours
Simulation d’événements discrets en Python
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 facticet. - 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)