ComeçarComece de graça

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. Monte Carlo trajectories for different process scenario.

Este exercício faz parte do curso

Simulação de Eventos Discretos em Python

Ver curso

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_trajectories amostras com a variável fictícia t.
  • 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)
Editar e executar o código