Monte Carlo-sampling voor een discrete-evenementenmodel met SimPy
Laten we nu dezelfde Monte Carlo-analyse opzetten met een SimPy-versie van het model. Het SimPy-model heeft een generator genaamd manufacturing_process, die verschillende processen simuleert, en een functie run_monte_carlo die het model meerdere keren draait en de informatie opslaat in een NumPy-array met de naam time_record.
De code die de resultaten uittekent lijkt op die uit de vorige oefening, maar is verplaatst naar een functie met de naam plot_results() die hieronder wordt getoond.
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()
De Monte Carlo-samplingloop levert een reeks mogelijke procestrajecten op, zoals te zien is in de afbeelding.

Deze oefening maakt deel uit van de cursus
Discrete Event Simulation in Python
Oefeninstructies
- Klok de
process_durationin met yield. - Sla de huidige tijd op in
time_record. - Voer een for-loop uit voor
n_trajectoriessteekproeven met hulpparametert. - Maak de SimPy-omgeving, voeg processen toe en voer het model uit.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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)