# 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.&#x20;

Velocidade, amigos!

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

![](https://lh6.googleusercontent.com/cYVlY-oVrMW-ln9gGD5A0yx__q5q26TwZfoPn39a9rmMofcoGfNBU9SAcEwdQNSrfmtCo9OgMfAibYkjsM_-jc7g9I62cD278DjARz8GxM1X1wCwvS07A9Oxszete3gDoVLKVbXp)

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.&#x20;

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**.&#x20;

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**:

![](https://lh3.googleusercontent.com/rw5o9ObGjfQQOaIHz1pRFqfLtCu8SLt7FhUSKU197Hlvrv1TdVX1AwjQZ7zG76rCXxOobtzKeMLx03mVK2MeHT3bvMWT0ekzAq_r3xH0rdOSoBlnUTIMYFqbrozWA5vqP4h5lP7y)

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

![](https://lh3.googleusercontent.com/frw2WY94gU_nQzZeX4ecIyhPimYISeA25LeNgmYNLFd9atCWzvgxbF08AwREB2NZBjlhLTCQhA899XIuCjvw8WDGzk1ezwuENCakJKpLqoqBpnlNyuibXNWHxcrJ0A85Iw4W7ecE)

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**:&#x20;

![](https://lh6.googleusercontent.com/ccZQkjl-vZ_CUdlKump_GNEVH0_KTHGkiIJEgtwhq8ZCbvCwMo-z-xCuSnY_9fycya2LGcNBY1dNgbhhSunsBbAs1AN73ic8VNNg82ptpdsVgq-vVlUMaU1nnfYAIrYpiuQJ23pL)

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

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…`*`)`&#x20;

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

![](https://lh3.googleusercontent.com/T58WjjMbx9RktdOY0eFrIEDvyOkP13F2QhTIWvOMTQr7dnlGOINr6_cvX6sA0BIcAVWDoyxeCpKQz9u8X_k6h_IhSbWeSH48gK2kkCEw3kz9fycWJuHok4KedRG24N3gQx9zvybL)

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: &#x20;

`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**.

![](https://lh5.googleusercontent.com/Uq54EpNoBS0marNJpd60giXVSa_JrhxlSZs89rFxEiQuonRiRPDjxl8Vh3y_0Y3MA3ga09Yc1u2hWDon4-0NkFjL6EFA-YU1LxcSM0wDSH_gpNcx69kjxkIqPHnx_SbAfyULDQT6)

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**):

![](https://lh3.googleusercontent.com/kl_1Mwxvbq7UcFb-5TcbNQoyXn4d1bz6NTJMDxcYaw2J11ZwbIIHyaFqEPaXbDWxjUVgDqfzx3azwGFbNiYre7Wwzk5LE4tdrfZSMpx86LNklMJ0gPsqNi12ZsW7a1Gg-UibuP9v)

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:&#x20;

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

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

![](https://lh6.googleusercontent.com/bZX6Ly5K5Q98Ws9YJMiM4-PcCW_yWxCF2i_8pweu5IrTO-4SosgXc9CvIbarMs7RddeotSNAAOX2Dzdi22bFDHqe1nnFuYSu4EeTdhn0cmt7Y51v02Uw2QCf3x4qHMrW1Gahznzt)

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&#x20;*****default*****&#x20;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**:

![](https://lh5.googleusercontent.com/ZqJz0ZqfLtOtv3B4gYR_b1aKd3kX0qbjdMc0Xg0P9EcLOM-RMTK-bsNySUPOA7Klp0Xn9C2SywwS7tAeAFAsexcgPKmhihnQCa-G0Vj5bgiuS-VWj81KnyFGxuof7N4yYAPe7x8U)

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

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!](https://help.anylogic.com/topic/com.anylogic.help/html/analysis/statistics.html?resultof=%22%53%74%61%74%69%73%74%69%63%73%22%20%22%73%74%61%74%69%73%74%22%20)
* 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**](https://help.anylogic.com/topic/com.anylogic.help/html/data/collection-variables.html?resultof=%22%63%6f%6c%6c%65%63%74%69%6f%6e%22%20%22%63%6f%6c%6c%65%63%74%22%20).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tutorial.anylogicbrasil.com.br/apendice-ou-coisas-que-deixariam-o-tutorial-ainda-maior/simulacao-com-replicacoes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
