Amostragem de Monte Carlo para um modelo de eventos discretos com SimPy
Agora vamos construir a mesma análise de amostragem de Monte Carlo usando uma versão em SimPy do modelo. O modelo em SimPy tem um generator chamado manufacturing_process, que simula diferentes processos, e uma função chamada run_monte_carlo que executa o modelo várias vezes, armazenando as informações em um array do NumPy chamado time_record.
O código que plota os resultados é semelhante ao usado no exercício anterior, mas foi movido para uma função chamada plot_results(), mostrada abaixo.
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()
O loop de amostragem de Monte Carlo vai produzir uma série de possíveis trajetórias de processo, como mostrado na figura.

Este exercício faz parte do curso
Simulação de Eventos Discretos em Python
Instruções do exercício
- Registre e faça yield de
process_duration. - Salve o tempo atual em
time_record. - Execute um for para
n_trajectoriesamostras com a variável fictíciat. - Crie o ambiente SimPy, adicione processos e execute o modelo.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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)