# 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 %}
