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 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: a curva de taxa de conversão por boca a boca e um 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 Dataset:

Por padrão, o Dataset é 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 Dataset 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 (que eu denominei de metaOutput):

O bloco Output precisa apenas de duas informações: o que ele vai medir (no caso o número de Clientes) e como (no caso no sexto mês):

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, clicando no botão Create default UI:

Agora, veja como na aba Parameters você pode variar os parâmetros (com fez 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:

  • 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? [email protected] à 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 se acostumou (torço que…) 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 que escolhemos pede dois parâmetros, o dataset e o seu título. Como o nosso dataset taxaDeConversaoDS está no Main, precisamos acessá-lo a partir do experimento atual.

Mas tem mais um detalhezinho: se você pousar o mouse na lampadazinha 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):

Simule! 👩🚀

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

Um pouco rápido, hein? [email protected] 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.

Se também foi bom para você, 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 eu escolhi um dataset? 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! 👩🚀

Pela saída modelo, neste novo cenário, 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 Dataset e um bloco de Output no agente Main;

  2. No experimento ParametersVariation criamos um Time Plot e um Dataset para armazenar, respectivamente, cada Dataset (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 o que já fez em um modelo para o outro.

Ah, fique de olho nos exemplos diponíveis no AnyLogic (quase 400), que sempre tem alguma sacada em que você pode se 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.