Simulação com Replicações

Com exceção do experimento Simulation, todos os experimentos do AnyLogic podem ser simulados com replicações. O Simulation, que é o tipo selecionado por default do programa, deve ser utilizado quando você quiser executar seu modelo com a animação gráfica ativa.

Nesta seção, usaremos o experimento Parameters Variation com replicações, e analisaremos as saídas do modelo por amostragem. Se esta é sua primeira experiência com simulação, talvez não esteja claro o que são e para que servem as replicações, então aí vai uma explicação bem básica: como há aleatoriedade no sistema (por exemplo, o atendimento dos clientes não tem sempre a mesma duração - o AnyLogic sorteia um valor para cada uma das operações, de acordo com a distribuição que nós definimos), não seria adequado tirar conclusões sobre o desempenho da agência bancária após apenas uma execução do modelo. Deve-se, nestes casos, executar o modelo repetidas vezes e analisar o conjunto de resultados obtidos. As replicações são simplesmente as execuções do mesmo cenário, ou seja, do mesmo modelo com os mesmos parâmetros de entrada (e sementes diferentes para a geração de número aleatórios).

Por exemplo, considere que você queira estimar a ocupação média dos caixas de atendimento e que você tenha estimado que 10 replicações é uma quantidade adequada para extrair suas conclusões. Neste caso, você usará os 10 valores de ocupação média (cada replicação gera um resultado) para calcular a média deles, interpretando que este resultado é representativo da operação real. Em outras palavras, você fará uma análise por amostragem e sua amostra tem tamanho n=10.

Antes de pôr a mão na massa, um aviso de algo bacana: o AnyLogic executa experimentos com replicações com processamento paralelo, de modo que ele dispara uma replicação por core disponível na CPU de seu computador.

Velocidade, amigos!

Vamos lá: a criação de novos experimentos é intuitiva, basta utilizar a sequência de comandos do menu suspenso File > New > Experiment:

O primeiro passo é criar elementos de coleta de dados (Dataset, Statistics, Histogram data etc.), dos quais possam ser extraídas as distribuições dos parâmetros de saída. Embora já tenhamos criado diversas saídas para o modelo, todas elas foram criadas no experimento Simulation. No experimento ParametersVariation: Main, ainda não há uma mísera saída.

Usaremos duas saídas nas análises: o tempo médio no sistema e a utilização média dos caixas. Usualmente, quando simulamos um modelo com replicações, temos um ou mais valor(es) de saída do modelo e queremos estimar as estatísticas descritivas deste(s) valor(es). O AnyLogic fornece várias opções para isto, mas, para este primeiro contato com a ferramenta, sugiro começar pelo bloco Statistics da paleta Analysis.

Depois de alguma prática, conjunto de passos é simples:

  • Determinar a estatística de interesse (no caso, a utilização dos caixas);

  • Criar um bloco Statistics com a opção de atualização de valores Data update na opção Do not update data automatically;

  • Ao final de cada replicação, adicionar ao bloco Statistics o valor da estatística de interesse e resultante da replicação, por meio do campo After simulation run na janela Properties do Experimento.

Vamos começar criando um bloco Statistics com o nome utilizacaoCaixas:

Deixe a opção de atualização de dados na opção Do not update data automatically:

Nosso objetivo é adicionar, ao final de cada replicação executada, o resultados da respectiva replicação no bloco utilizacaoCaixas. Volte à aba Projects, selecione o experimento ParametesVariation: Main e, na janela Properties, localize a linha After simulation run, no menu Java actions:

Esta linha de comando (que no momento está vazia) é sempre executada quando o AnyLogic termina a simulação de uma replicação.

O bloco Statistics possui a função add() exatamente para isso, de modo que a expressão para se adicionar um valor para o bloco utilizacaoCaixas seria algo como:

utilizacaoCaixas.add(...alguma estatística…)

ou (acostume-se com o comando Crtl+Espaço):

O nosso modelo já calcula a ocupação média dos caixas, dentro do bloco Resource Pool (aquele que está lá no nosso Main e apelidamos de caixasDeAtendimento), por uma função chamada utilization(). Sendo assim, para acessá-la basta digitar:

caixasDeAtendimento.utilization()

Mas tem mais um detalhezinho: se você pousar o mouse na lampadinha amarela na linha After simulation run, vai receber a dica da palavra root.

Com o comando root, você acessa cada replicação assim que ela terminar. Veja na figura como ficou o comando completo (a cada ponto digitado, Crtl+espaço e não se esqueça do ponto e vírgula ao final):

Um breve resumo do que fizemos até aqui:

  1. Criamos um bloco Statistics utilizacaoCaixas dentro do Parameters Variation.

  2. Nas propriedades do experimento Parameters Variation, colocamos no campo After simulation run da aba Java actions, o comando:

utilizacaoCaixas.add(root.caixasDeAtendimento.utilization())

A sua atenção agora deve ser direcionada para a janela de propriedades do experimento, na barra Replications:

A opção Use replications abre o resto de opções da janela:

  • Fixed number of replications para executar um número fixo de replicações;

  • Varying number of… para executar um número de replicações tal que garanta que o intervalo de confiança para determinado valor (parâmetro of expression) seja uma porcentagem (parâmetro Error percent) do seu valor médio.

Outra coisa importante: o default do AnyLogic é manter a semente do gerador de números aleatórios fixa, garantindo que os resultados das simulações com mesmo valor de semente sejam sempre iguais (mesmo que executados em computadores diferentes, por exemplo). Isto se aplica mesmo entre replicações, o que nos obriga a informar ao AnyLogic que queremos uma semente diferente a cada simulação. Isto é feito na aba Randomness, trocando a opção de semente para Random seed:

Agora é só simular e você terá o resultado da simulação para o número de replicações desejado.

Observações:

  • O bloco Statistics possui diversas funções para extrair a média, o menor valor, a variância etc. Veja as opções no Help!

  • A sequência de passos anterior pode ser utilizada também para o bloco Dataset. Quando devo utilizar o Dataset? Quando você deseja armazenar a amostra, os resultados de cada replicação (em contraponto, o bloco Statistics não mantém a amostra utilizada nos cálculos);

  • O Experimento Parameters Variation, permite simular com variação de parâmetros. Por exemplo, poderíamos simular nossa agência bancária para valores do número de caixas abertos iguais a 1, 2, 3, 4… Neste caso, deve-se tomar cuidado, pois apenas um bloco Statistics não seria suficiente. Precisaríamos de um bloco de estatísticas para cada parâmetro de entrada diferente. Foge ao espírito deste tutorial, mas uma boa alternativa neste caso, seria utilizar Collections.