Experimento de variação de parâmetros e coleta de dados com dataset
Atualizado
Atualizado
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.
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):
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):
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.
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):
(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:
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:
Criamos um bloco de Data Set e um bloco de Output no agente Main;
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;
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.
Teste o modelo, simule!
Simule!
Simula!