Échantillonnage Monte Carlo pour des modèles à événements discrets
Imaginez une usine qui fabrique des horloges murales. Leur popularité ne cesse d'augmenter et la demande dépasse maintenant la capacité de production. L'usine tourne à plein régime depuis des mois, et vous souhaitez mieux comprendre son comportement et ses goulots d'étranglement afin de prendre des décisions de gestion plus éclairées et de planifier les investissements et l'expansion à venir.
Un modèle à événements discrets des processus de l'usine a été développé, et vous voulez maintenant exécuter une analyse d'échantillonnage de Monte Carlo pour explorer différents scénarios. Le procédé de fabrication est résumé dans le tableau ci-dessous, et l'information a été enregistrée dans une liste de dictionnaires nommée processes, avec un dictionnaire par processus. Les clés de ce dictionnaire correspondent aux en-têtes de colonnes du tableau. Les paquets suivants ont été importés pour vous : numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd, et time.

La boucle d'échantillonnage Monte Carlo produira une série de trajectoires possibles des processus, comme illustré dans la figure.

Cette activité fait partie du cours
Simulation d'événements discrets en Python
Instructions de l’exercice
- Mettez en place la boucle principale « for » d'échantillonnage Monte Carlo pour
n_trajectorieséchantillons avec la variable facticet. - Utilisez la distribution gaussienne du paquet
randompour estimer pseudo-aléatoirement la durée du processus.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
n_trajectories = 100
# Run a Monte-Carlo for-loop for n_trajectories samples
____
for p in range(len(processes)):
proc_p = processes[p]
# Random gauss method to pseudo-randomly estimate process duration
process_duration = ____(proc_p["Average_Duration"], proc_p["Standard_Deviation"])
time_record[p + 1] = time_record[p] + process_duration
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") # Step_10
fig.set(xlim=(0, len(processes) + 1))
plt.plot()
plt.grid()
plt.show()