# Experimento de variação de parâmetros e coleta de dados com dataset

Assim como na nuvem, o AnyLogic possui um experimento de variação de parâmetros, o **Parameter Variation**.

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

Velocidade, amigos! :woman\_running: :man\_running:&#x20;

A criação de novos experimentos é intuitiva e basta seguir a sequência de comandos do menu suspenso **File > New > Experiment:**

![](https://lh4.googleusercontent.com/L1MQRjONaoNY3LqLqTv3j2P9aiMLwdt_S3kj0vY3wfDCCfcsfI4cP99RDPD8wjwlDHrdeaSge8YVgtx1h1Ir_GyYwqSCq4u-gKnw4NI0UYvCyhRGmtj7HUAtvXzQ0hwj7GKlen1S)

Embora já tenhamos criado diversas saídas para o modelo, todas elas foram criadas no experimento **Simulation**. No recém criado experimento **ParametersVariation: Main**, ainda não há uma mísera saída.&#x20;

O primeiro passo, portanto, é 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.&#x20;

Usaremos duas saídas nas análises: a curva de taxa de conversão por boca a boca e um outro valor bem específico, quantos clientes foram alcançados em 6 meses.&#x20;

## **Curva da taxa de conversão por boca a boca**

Se você clicar com o segundo botão do mouse sobre os blocos e elementos de tela, eles normalmente têm opções de coletas de dados. Clique com o botão da direita do mouse no fluxo **taxaDeConversão** e crie instantaneamente um **Data Set** com a opção **Create Data Set**:

![](https://lh5.googleusercontent.com/ciyz9rjV3zDXY4G_8aPszJjtNkERkEqYIvGT4KEfC7teKXfj_js-vRsZdSy0-6kjmz2E5G7z01u7Nek6wBIeBgdYUHOK5DCLmPoaEAXg1NHbEeg-5cbJoySyBVU39m2eVf_mpyR6)

Por padrão, o **Data Set** é criado sem a opção de atualização de dados automática (mais adiante eu mostrarei como fazer isso). Por hora, ative a opção de coleta de dados automática e deixe com a opção de coleta mensal de valores (o **Data Set** vai armazenar um número por mês):

![](https://lh6.googleusercontent.com/Ctc9uGJ5jU4jAREPhPTWRy3QDwN3WjZ0dfY09pmdlUTirIla_DrHZmWTaqdYM2VLLs6BBpDYEq3yYTetZSmbnFLTxfMY5AnID0cdqc_1N6Rqy7KESey3Y9lJ9RWCtcKYCswAiUx0)

## **Número de clientes alcançados em 6 meses**

Esse é um pouco mais comp… FÁCIL! A opção **Output** da paleta **Analysis** nasceu para isso. Clique e arraste o elemento **Output** e nomei-o **metaOutput**:

![](https://lh6.googleusercontent.com/zcZ8grRBYXN9a900ginIyq2pJsdMUPPKR8Xpd1Kt32UQLzM84jBKbIQZ1evkoAaHLhdlwe47IT67SbT1LTdWHmC1YEPrUrEe5ud9Pmuph8VmeavPGT8wO7gRkLiKds4x4BTAO3Du)

O bloco **Output** precisa apenas de duas informações: o que ele vai medir (no caso o número de Clientes) e como ele vai fazer isso (no caso, pela coleta do dado decorrido um tempo de simulação de seis meses):

![](https://lh4.googleusercontent.com/V9j58yrXhmx2Ulu9QIhZ3dUA4IRR7OT277KxuXWnvjSgBnjDGsbRlTIGWOpC76zNZ7E8clPwzTq-aVh0jrUIhQZMRews0JyPgUEcoE9Je75C6k_egw90CV7x0bsfhNHJTCGUOl_c)

Teste o modelo, simule! :woman\_astronaut:&#x20;

![](https://lh6.googleusercontent.com/K5YLCuHCZmo2qsxgErSuyBstz9GDi7u1_LU88vL0FWdAFYK2EV4SIa71Y1oscieeFwQIs-slnAT_osOEEYEYzQJQ4ZPoOUpc2QfV36FqBWQ2-_oMO0OHJAXmj168egVh2ZuCd_9p)

## **Juntando tudo no Parameter Variation**

Volte para a aba do experimento **ParametersVariation** e vá a janela de **Properties**.&#x20;

Inicialmente, crie um interface padrão ao clicar no botão **Create default UI**:

![](https://lh3.googleusercontent.com/pvuBYO5_TehAkAALhS8nxAD2Akw84BL90LQcdvVOvZ-bDxIda6-x6vPeGr7XcyQbQKWOsXxnBg_VCQl9mO2YFdiEwMoRrDTrtRPJIVgYl8MSmQjShUbPmxwn1XBgh4wb3gaUIKMq)

Agora, veja como na aba **Parameters** você pode variar os parâmetros (como você fez há algum tempinho atrás, lá na nuvem). Varie o número de meses entre 0 e 10 meses, modificando a coluna **Type** do parâmetro meses:

![](https://lh5.googleusercontent.com/NM2B8tEN9r7fxdrGA02s3hY9f7Vko-p4xMF1lAFEcZ8SGDCXHjXLEO41blINGZGaUJFFMISY5nWTf3-YJ543EStMDACpzdktiUKAH2XcaOPNnRbRSRsB4pem8mGauWiZZQ5Cmsou)

A região da tela do **ParametersVariation** aceita comandos de análise de dados (gráficos, histogramas, saídas etc.), então vamos acrescentar um **Time Plot** para o apresentar os resultados da curva da taxa de conversão, a cada cenário simulado:

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

* Retire qualquer item da aba **Data** (pois os dados não serão coletados automaticamente);
* Selecione a opção **Do not update data automatically** e
* Não se esqueça de mudar a opção **Time window** da aba **Scale**, para **40**:

![](https://lh6.googleusercontent.com/ZSY2XHUbxDj7vhTzEXPGRWGQUovS1BjIDV4ce3_n5ZGAMJ1klB0ZIlz9KFrLadB0F_UZBMZVdN8qg3gzQ-aYRCPnIO-5VjLAgR1xW112eIBkR3Ku6fLjvf4j1mLS3oXzxwZ9vLC2)

Diferentemente de todos os gráficos que fizemos até agora, este é o tipo de gráfico que não coletará dados automaticamente, mas sim, receberá um comando de adicionar dados a cada simulação executada.

Tarefa relativamente simples, dado que todo elemento de coleta de dados (como o **Time Plot**) possui um comando **addDataSet**.&#x20;

Localize, na janela **Properties**, a linha **After simulation run**, no menu **Java actions**:&#x20;

![](https://lh5.googleusercontent.com/dqn5JqlD0aeNB6xy5W64bMTvH4I99OtvyRiJ95hKtGkbdKcMbiOB9FarkJuH68wYGw8F1Z7TigVTvShqB8uR98OVgK3FbNof8uvZDExz0VtPLGuAEhPmuwuygsc9iUIO8ainNg9n)

Esta linha de comando (que no momento está vazia) é sempre executada quando o AnyLogic termina a simulação de uma replicação. Precisamos adicionar o resultado armazenado ao final de cada simulação no **Dataset taxaDeConversaoDS** no gráfico **taxasDeConversao**.

Com **CTRL + Espaço**, digite a linha de código (escolha a segunda opção de **addDataSet**):

`plot.addDataSet(ds, title)`

![](https://lh5.googleusercontent.com/oLdWtpwwKSHJmkhuwhB2DK4cEBcNRStmN0X_gu6pl4utcllPfpl9lplnVQnYqIK75uuAy2mD9EV9djX3BGwUgc_nOBfGSNNzRMKtIoYYM3egR_lIJsrwx3xOGNaRfgdUpws-bh-k)

{% hint style="info" %}
**Importante**

* Você notou que existem 5 comandos **addDataSet** na lista? Bem-vind@ à programação orientada ao objeto. A partir de agora será sempre assim: **CTRL + Espaço**, digita algo e aparecem todos os comandos disponíveis dentro daquele objeto. Não existe como memorizar esses comandos, pois o número de opções vai um pouco além do infinito.&#x20;
* Acostume-se, como (torço que) se acostumou a andar de bicicleta e conte com o [**Help** ](https://anylogic.help/)para comandos mais difíceis. Como regra, tudo o que você faz clicando, preenchendo campos ou conectando, seria passível de ser construído por comandos disponíveis na [API](https://pt.wikipedia.org/wiki/Interface_de_programa%C3%A7%C3%A3o_de_aplica%C3%A7%C3%B5es) do AnyLogic.
  {% endhint %}

A opção de **addDataSet** pede dois parâmetros, o dataset e o seu título. Como o **dataset taxaDeConversaoDS** está no **Main**, precisamos acessá-lo a partir do experimento atual.&#x20;

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/6n-ykos6EI2ywRsjTiTI0WG2vCbNtfyQ0eyBNCUofQoynLiWnUtZTgff9cj2gyeF3Y5R_z7MW6OSDxSk1M0T11WoaiiqwXdXYWvhJw27QcT4OqwupHpoOotg4tR1Gu_AZ0xGQQyT)

Com o comando **root**, você acessa cada replicação em execução ou ao seu término. Complete o  comando informado os dois parâmetros da função: o **Data Set** e a **String** indicando qual o mês foi simulado (a cada ponto digitado, **Crtl+Espaço** e não se esqueça do ponto e vírgula ao final):

![](https://lh6.googleusercontent.com/wSk73-WXWpgk6Tmb2I7OMPMPxybP8p4uiVe1KBeSe9RvCOCV3nZQAC3rr7kQCgUTjgnie5IqVaoDFbTVb_fxEO1Ou8WVuca6ZQ1joCEuo-jris1o7u86qvdb0E88aHLBv1l_78ym)

Simule! :woman\_astronaut:&#x20;

(não esqueça de apertar o botão **Run**!)

![](https://images.unsplash.com/photo-1546546274-1703737efede?crop=entropy\&cs=srgb\&fm=jpg\&ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHw5fHxyb2NrZXR8ZW58MHx8fHwxNjM0NjQyODA3\&ixlib=rb-1.2.1\&q=85)

![](https://lh3.googleusercontent.com/FB2Qr7ygiO4Unr1eEeiIuaMmqpo7fufcHAEa2aFvpfAGM4QzLUH3vpgXVmbHH7Ds99EjkoN13N4C-Z0aVfBVjZAXI7cQCvGbDCbYTpIL-O87MbmA0I8bvtynemdanr1Rt0r4IQXk)

Um pouco rápido, hein? Bem-vind@ ao processamento paralelo! Se o seu computador tem 8 cores como o meu, então o AnyLogic processou 8 cenários em paralelo na primeira leva e depois mais 3 cenários, totalizando 11 simulações.

Aproveite o embalo e crie um **Dataset** para armazenar o **metaOutput** que criamos no **Main**. Volte à linha **After simulation run** e, com a ajuda do **CTRL+Espaço**, procure o comando **add** dentro do **metaDS**:

![](https://lh5.googleusercontent.com/k5EOwPmukkYZTp-qwDNVuH_fYlEfeWbEY0Uawp3TPU1fv7D0G3xyuqZNk1ba0c9f7zbltOPlHNhioqqDYpxYaNlKMEhlkdTgzJ0b6AzVrAxBAuxO3KLk86gywt-t_kfBMuKbwNOs)

Por que um **Data Set**? Porque eu quero armazenar os valores de cada cenário simulado.

Como no caso do gráfico, precisamos adicionar o valor ao final de cada simulação:

![](https://lh5.googleusercontent.com/_ZE6APGzVwN4wMtcH_U8hsra0myOxZHagf0jCq9RGTSuPYcdcAKXjWCLqByIGFLRsHsPkrhjWzwsWHLfwNqeIZkeRrO0xBwwRjpgV_pUFJOqxnu0G3XlsHJzyNTDK5tKkXK4Shce)

Com o **root**, chegamos fácil nos valores da simulação:

![](https://lh6.googleusercontent.com/601_bxhaaJI9oRzJu6G_RybXpA-NGIjlnzEt6cUkj1zk10MJDcmBuqJAn8gNh2FWpik4RGl6sL5IKoRxKKW12EM45zVTsGVMLS6kfoWoqdVVp6pcJoVMTcHlfUe_QgazuQ45d3Ng)

Simula! :woman\_astronaut:&#x20;

![](https://lh5.googleusercontent.com/bPxAns3I6kMcZoPxuSRqoimV9y1v2rFqEnsbJ0lJ7RJJloBeC40Fd6LohMvXGOsYYha71mrhVaMq0f1iOkEAgjFoWhzjMoZ-Ea0kXLEeRM-F9WQknsWotFhSIkvzSYclAW1ik95k)

Analisando as saídas modelo, o período mínimo de investimento em marketing é de 6 meses.

Um breve resumo do que fizemos até aqui:

1. Criamos um bloco de **Data Set** e um bloco de **Output** no agente **Main**;
2. No experimento **ParametersVariation** criamos um **Time Plot**  e um **Data Set**  para armazenar, respectivamente, cada **Data Set** (conjunto de dados) que representa a curva de conversão e cada **Output** (valor único) do número de clientes atingido no 6º mês gerado em cada simulação;
3. Nas propriedades do experimento **ParametersVariation**, colocamos no campo **After simulation run** da aba **Java actions**, os comandos:&#x20;

* `plot.addDataSet(root.taxaDeConversaoDS, "Meses = " + root.meses);`
* `metaDS.add(root.meses, root.metaOutput);`

{% hint style="success" %}
**Dica**

* Experimentos ficam armazenados juntamente com modelos e você pode criar quantos quiser. Assim, faça como os profissionais: copie e cole que já fez (gráficos, datasets, códigos etc.) de um modelo para o outro.&#x20;
* Fique de olho nos exemplos diponíveis no AnyLogic (quase 400), sempre tem alguma sacada para nos inspirar.&#x20;
* Quer saber mais sobre o experimento de **Parameter Variation**, como lidar com replicações, tempo de warm-up etc.? Um caminho é [esta seção do Volume I](https://tutorial.anylogicbrasil.com.br/apendice-ou-coisas-que-deixariam-o-tutorial-ainda-maior/simulacao-com-replicacoes) desta série de tutoriais.
  {% endhint %}


---

# 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-ds.anylogicbrasil.com.br/experimento-de-variacao-de-parametros-e-coleta-de-dados-com-dataset.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.
