ComeçarComece de graça

Amostragem de Monte Carlo para modelos de eventos discretos

Imagine uma fábrica que produz relógios de parede. Os relógios vêm ganhando popularidade e, agora, a demanda é maior que a capacidade de produção. A fábrica está trabalhando no limite há meses, e você quer entender melhor seu comportamento e gargalos para tomar decisões de gestão mais informadas e planejar investimentos e expansão futuros.

Um modelo de eventos discretos dos processos da fábrica foi desenvolvido e, agora, você quer executar uma análise de amostragem de Monte Carlo para explorar cenários. O processo de fabricação está resumido na tabela abaixo, e as informações foram armazenadas em uma lista de dicionários chamada processes, com um dicionário por processo. As chaves desse dicionário correspondem aos cabeçalhos das colunas da tabela. Os seguintes pacotes já foram importados para você: numpy as np, matplotlib.pyplot as plt, seaborn as sns, random, pandas as pd e time.

Tabela com nomes dos processos e suas estatísticas de duração, a saber, média e desvio padrão.

O loop de amostragem de Monte Carlo produzirá uma série de possíveis trajetórias de processo, como mostrado na figura. Trajetórias de Monte Carlo para diferentes cenários de processo.

Este exercício faz parte do curso

Simulação de Eventos Discretos em Python

Ver curso

Instruções do exercício

  • Configure o loop principal de amostragem de Monte Carlo com n_trajectories amostras usando a variável fictícia t.
  • Use a distribuição Gaussiana do pacote random para estimar pseudoaleatoriamente a duração do processo.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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()
Editar e executar o código