BehaviorSpace



Por vezes, é conveniente realizar uma série de simulações sucessivas e observar a relação entre a variação de um ou mais parâmetros e os resultados obtidos. Essas simulações sucessivas podem ser realizadas manualmente, com o utilizador a intervir mudando os parâmetros após cada simulação. Mas, muitas vezes, também pode ser usado um mecanismo do NetLogo denominado BehaviorSpace.

No Capítulo 1, o modelo de fogos florestais possui um botão no interface que permite automatizar essa pesquisa de parâmetros manual (variando o parâmetro densidade e registando a proporção de árvores queimadas). No entanto, esse automatismo implicou acrescentar código ao modelo para desempenhar essa função. Como fazer, então, para com um modelo arbitrário, realizar uma pesquisa sistemática de parâmetros sem ter que o fazer manualmente ou modificando o código do modelo?

Esta secção mostra como se pode usar esta funcionalidade do NetLogo, o BehaviorSpace, para fazer uma pesquisa sistemática do parâmetro densidade semelhante à realizada pelo botão iniciar simulacao automatica, ou seja, estabelecer um valor mínimo e máximo de densidades a explorar, juntamente com um incremento (resolução) que separa valores consecutivos de densidade, e registar a proporção de árvores queimadas correspondente. É ainda possível estabelecer espaços de parâmetros a explorar, em que são testadas combinações de dois ou mais parâmetros (por exemplo, densidade e intensidade de vento). Programar no próprio código esta funcionalidade e fazê-lo para cada modelo separadamente seria extremamente trabalhoso, pelo que é vantajoso dispor desta função incluída no próprio NetLogo. Naturalmente, o método descrito aqui (para este modelo de fogos florestais) pode ser aplicado a qualquer outro modelo, como por exemplo o modelo do gás de rede do Capítulo 4, em que se poderia estudar a variação da energia média no estado de equilíbrio com a temperatura.

Com o modelo dos fogos florestais aberto no NetLogo, escolha-se a opção Tools->BehaviorSpace do menu:

Aparece-nos a seguinte janela com três botões, que servem, da esquerda para a direita, para correr uma experiência já configurada, para configurar uma experiência (parâmetros a pesquisar, valores a monitorar), e para cancelar. Prima-se o botão Edit Experiment Setup.

A janela que aparece então é o centro de controlo do BehaviorSpace. Nela é introduzida toda a informação necessária ao NetLogo para que este corra automaticamente o modelo e registe os resultados que nos interessam. Vejamos, por ordem, como configurar estes campos para que o NetLogo corra o nosso modelo variando a densidade entre 30% e 70% (a intervalos de 5%) e registe a proporção de floresta queimada:

No primeiro campo (no topo) são introduzidos os parâmetros a pesquisar. Podem ser usadas quaisquer variáveis globais, quer definidas no modelo com a primitiva globals, como, mais usualmente, qualquer elemento do interface (sliders, switches, ou choices). Cada parâmetro deve ser colocado entre parêntesis rectos, com o nome da variável associada entre aspas. De seguida, listam-se os valores individuais que se desejam testar. Para o caso de valores numéricos (como os sliders), pode-se especificar, em vez de valores separados, um intervalo (dentro de outros parêntesis rectos), pondo primeiro o valor inicial, de seguida o incremento, e por fim o valor final.

No nosso caso, pomos [ "densidade" [30 5 70] ] para indicar o intervalo desejado (note-se os dois pares de parêntesis rectos), o que seria equivalente a fazer [ "densidade" 30 35 40 45 50 55 60 65 70 ].
Se acrescentássemos outro parâmetro (por exemplo, acrescentar uma linha com [ "intensidade" 0 1 2 5 10 ]) estaríamos a ordenar ao NetLogo que corresse o modelo para todas as combinações possíveis dos dois parâmetros (dentro dos intervalos especificados).
Parâmetros que não sejam listados permanecem fixos e iguais ao valor que tiverem quando se iniciar a experiência.

No segundo campo especifica-se qual a medição que se quer fazer. No nosso caso, queremos a percentagem de árvores queimadas, e como, mais uma vez, temos acesso às variáveis globais, incluímos a mesma expressão que entra no monitor percentagem queimada do modelo: (arvores-queimadas / arvores-iniciais) * 100

O terceiro campo serve para indicar qual o código que se deve usar para preparar o modelo para cada execução, ou seja, o que deve ser feito para inicializar o modelo com uma nova combinação de parâmetros. Neste caso, o que há a fazer é o mesmo que o utilizador faria premindo os botões de interface preparar e incendiar linha, isto é, chamar os procedimentos preparar e incendiar_linha.

O quarto campo recebe o código responsável por cada iteração do modelo: No nosso caso, trata-se do procedimento executar.

Os últimos dois campos servem para indicar ao NetLogo quando é que uma execução particular, isto é, com uma determinada combinação de parâmetros, termina e este deve passar à combinação seguinte. Isto pode ser feito de duas maneiras: Especificando no quinto campo um limite máximo fixo de vezes que o código listado no quarto campo deve executar (ou seja, um limite máximo de iterações), ou, então, especificando no sexto campo uma condição que, se verdadeira, fará com que a simulação actual seja dada como terminada.

No modelo dos fogos florestais, não se usa um limite máximo de iterações (e, por isso, coloca-se zero no campo correspondente), mas considera-se que uma simulação termina quando já não há mais árvores a arder. Como neste modelo as árvores a arder são representadas por turtles, pode-se dizer ao NetLogo para parar quando já não existirem mais turtles, ou seja, quando a condição not any? turtles for verdadeira.
Se não quisermos incluír nenhuma condição de terminação (e usar apenas o limite de iterações), deve-se usar apenas a expressão false neste campo, que, nunca sendo verdadeira, nunca termina a simulação.

Terminada a configuração da experiência, prime-se o botão OK, o que nos leva de volta à janela onde podemos escolher Run Experiment para iniciar a série de simulações automáticas. Enquanto as simulações correm, podemos verificar o seu progresso na janela que aparece:

Aqui, além de podermos ver qual a configuração actual de parâmetros que está a ser testada, e quantos passos faltam para o final da experiência, podemos premir o botão Abort, que cancelará o processo (os resultados obtidos entretanto serão perdidos). Existem também duas opções (Update graphics e Update plots and monitors) que controlam se os elementos de visualização do modelo (janela gráfica, monitores, gráficos) são actualizados enquanto o modelo corre. Desactivar estas opções normalmente faz com que a experiência avance mais rapidamente.

Quando a experiência chega ao fim, é nos pedido o nome do ficheiro para o qual queremos guardar os resultados (este nome deverá ter a extensão .csv). Este ficheiro tem uma forma textual (comma separated values) que pode ser visualizada directamente ou importada para uma aplicação de folha de cálculo, onde os dados podem ser submetidos a tratamento estatístico ou simplesmente visualizados num gráfico:

Neste formato são listados, por ordem descendente em cada coluna, os valores dos parâmetros para esta simulação, o valor que o resultado monitorado (percentagem de árvores queimadas, no nosso caso) tinha no final da simulação, os valores mínimo, máximo e médio do resultado para essa simulação, quantas iterações durou cada simulação, e, por fim, uma lista com os valores individuais do resultado para cada iteração dessa simulação.