Eșantionarea Monte Carlo pentru un model cu evenimente discrete în SimPy
Acum să construim aceeași analiză de eșantionare Monte Carlo folosind o versiune SimPy a modelului. Modelul SimPy are un generator numit manufacturing_process, care simulează diferite procese, și o funcție numită run_monte_carlo ce rulează modelul de mai multe ori, stocând informațiile într-un array NumPy numit time_record.
Codul care afișează rezultatele este similar cu cel din exercițiul anterior, însă a fost mutat într-o funcție numită plot_results() prezentată mai jos.
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()
Bucla de eșantionare Monte Carlo va genera o serie de traiectorii posibile ale proceselor, așa cum se arată în figură.

Acest exercițiu face parte din cursul
Simulare de evenimente discrete în Python
Instrucțiuni pentru exercițiu
- Înregistrează și aplică
yieldpentruprocess_duration. - Salvează timpul curent în
time_record. - Rulează o buclă
forpentrun_trajectorieseșantioane, cu variabila auxiliarăt. - Creează mediul SimPy, adaugă procesele și rulează modelul.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)