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.

Velocidade, amigos! 🏃‍♀️ 🏃‍♂️

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

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.

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.

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.

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:

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

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:

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

Teste o modelo, simule! 👩‍🚀

Juntando tudo no Parameter Variation

Volte para a aba do experimento ParametersVariation e vá a janela de Properties.

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

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:

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:

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

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.

Localize, na janela Properties, 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. 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)

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.

  • Acostume-se, como (torço que) se acostumou a andar de bicicleta e conte com o 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 do AnyLogic.

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.

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

Simule! 👩‍🚀

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

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:

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:

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

Simula! 👩‍🚀

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:

  • plot.addDataSet(root.taxaDeConversaoDS, "Meses = " + root.meses);

  • metaDS.add(root.meses, root.metaOutput);

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.

  • Fique de olho nos exemplos diponíveis no AnyLogic (quase 400), sempre tem alguma sacada para nos inspirar.

  • 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 desta série de tutoriais.

Atualizado