Ads 468x60px

quarta-feira, 13 de março de 2013

Modelagem baseada em agentes - NetLogo

Logo do NetLogo

Agora que já temos uma noção básica do que é a modelagem baseada em agentes, podemos conhecer um pouco sobre a ferramenta escolhida para implementar os modelos e fazer simulações: NetLogo. Lembre-se de dar uma olhada nos posts anteriores, nos quais são introduzidos alguns conceitos importantes e outras ferramentas de modelagem.

Índice

Introdução
Fundamentos teóricos
NetLogo


Elementos básicos do NetLogo


O NetLogo considera todos os elementos centrais da simulação como agentes, embora os agentes a que normalmente nos referimos quando falamos de modelagem baseada em agentes sejam equivalentes aos turtles. Turtles são agentes capazes de se locomover pelo world (o ambiente), possuindo coordenadas no plano para indicar sua localização.

Além dos turtles, temos os links, agentes que conectam 2 turtles; os patches, que são cada um dos quadrados compondo a grade bidimensional do world; e observers, que representam o usuário do NetLogo, responsáveis por controlar e fazer ajustes à simulação, fazer requisições (através do comando ask) aos outros agentes e observar os estados da simulação.

Não se preocupe em decorar tudo agora, é mais fácil entender na prática.

A interface do NetLogo


Amostra da interface do NetLogo (exemplo "Link-Walking Turtles")

A interface básica do NetLogo é bem simples e não demora muito até você se acostumar com ela. Se você abrir um modelo pronto ("File" -> "Models Library") e acessar a guia "Info", verá instruções de como utilizar os controles daquela simulação em específico. Confira o manual de usuário do NetLogo para mais detalhes.

Abra o modelo "Link-Walking Turtles Example" ("File" -> "Models Library" -> "Code Examples" -> "Link-Walking Turtles Example") e dirija sua atenção ao "Command Center". Por padrão, seus comandos serão interpretados como sendo os de um observer, mas você pode alterar isso clicando no texto "observer" anterior à caixa de comando ou apertando a tecla Tab. Clique em "setup" e, como observer, tente os seguintes comandos para ver o que acontece:

ask turtles [set color yellow]
ask links [set color blue]
ask patches [set pcolor red]


Agora selecione "turtles" como o agente dos comandos e tente requisitar ask turtles [set color white],  ask patches [set pcolor gray]ask self [set color white]. Disso, podemos notar algumas coisas:

  • O observer é o agente com a maior autoridade sobre a simulação, sem participar diretamente dela, mas a influenciando através de comandos;
  • Uma turtle pode enviar comandos que modificam a si mesmas, mas não pode enviar comandos a todas as turtles nem a todos os patches.
  • Para modificar o ambiente, deve-se enviar comandos aos patches.

Programando no NetLogo


Abra um modelo qualquer e dê uma olhada na guia "Code". Essa é a linguagem de programação do NetLogo, um dialeto de Logo. A linguagem é em parte compilada e em parte interpretada, gerando bytecode Java como resultado desse processo. Você pode salvar seu modelo como um applet, permitindo a publicação do mesmo na web.

Por ser um dialeto de Logo, o NetLogo não é muito complexo de se programar, tendo sido projetado para permitir que pessoas com pouca experiência em programação elaborem modelos de qualquer área do conhecimento. Contudo, a adaptação pode ser um pouco problemática para quem já programa em linguagens imperativas devido às diferenças de paradigmas de linguagens funcionais, como Logo. Se esse for o seu caso, confira uma rápida introdução a como essas linguagens funcionam.

Há dois procedimentos básicos que constam em todos os modelos NetLogo:

to setup
 clear-all ;; Limpar tudo o que havia na execução anterior. 
 ;; Instruções de setup
end

to go
 ;; Instruções de execução
end

A palavra "to" indica um novo procedimento, que sempre termina com um "end". Os procedimentos "setup" e "go" são dois procedimentos padrão do NetLogo que indicam, respectivamente, o código que será interpretado quando o usuário inicializar a simulação e quando executá-la. Naturalmente, "setup" deve ser acionado antes de "go" pelo usuário. Você pode definir seus próprios procedimentos da mesma forma:

to recolor-turtles
  ask turtles [set color yellow]
end


Ah, e não se esqueça de documentar seu modelo apropriadamente. Na aba "Info", você consegue elaborar um documento simples de referência aos usuários. É recomendado que esse documento contenha, pelo menos, uma introdução básica do modelo, como ele funciona, como usá-lo, coisas interessantes a se notar, sugestões de experimentos ao usuário, planos de extensão do modelo, funcionalidades do NetLogo utilizados no modelo e uma seção de créditos e referências.

Agora vamos botar a mão na massa!

Exemplo - Luta por recursos


Como exemplo, fiz um "modelo" básico que não é, de fato, um modelo, já que eu não me baseei em dados reais para obter verossimilhança com o fenômeno retratado. Trata-se da representação de uma luta por recursos entre dois agentes, que devem manter-se vivos o máximo possível. Você pode selecionar a estratégia desejada para os agentes, bem como o número máximo de vitalidade e recursos. Quando tiver terminado, clique em "setup" e depois em "go". Os gráficos à direita monitoram o estado da simulação.

Interface do modelo de exemplo

Veja a página do modelo aqui. É interessante notar que a página foi gerada automaticamente pelo NetLogo, com apenas algumas alterações minhas, e inclui a simulação em si, a documentação e o código. Bem legal, não? Se já tiver o NetLogo instalado, recomendo baixar o arquivo de código e abrir no programa, uma vez que são exibidas informações adicionais no console indicando as ações dos agentes. Eu pretendia exibir isso graficamente, mas fica como uma sugestão de melhoria para o futuro.

Algumas tarefas


Para se habituar à ferramenta, aí vão algumas ideias de atividades:

  1. Explore a biblioteca de exemplos e vá "brincando" com os modelos. Em particular, dê uma olhada nos exemplos de código ("Code Examples") para conferir funcionalidades interessantes do NetLogo e pense em como você poderia aplicá-las.
  2. Modifique o "Random Walk Example" ("Code Examples" -> "Random Walk Example").
    1. Faça com que a turtle risque o caminho com uma cor diferente conforme o quadrante.
    2. Crie um registro do tamanho percorrido através de um gráfico.
    3. Crie um registro em gráfico para cada quadrante em relação ao tamanho do caminho percorrido pela turtle.
  3. Modifique o modelo de exemplo adicionando uma nova estratégia qualquer. Sugestão: inclua uma estratégia que realize, a cada turno, uma ação aleatória de outra estratégia (tome cuidado com as ações que modificam o tipo de estratégia).
  4. Desenvolva um modelo de labirinto. O usuário fornece quantas linhas e colunas ele deseja e um labirinto é gerado aleatoriamente, com a saída sempre constando na última linha.
    1. Gere uma turtle no topo esquerdo do labirinto. A cada instante, ela deverá se mover de forma aleatória e contínua, até chegar à saída ou o usuário parar a simulação.
    2. Adicione a opção de escolher estratégias alternativas. Inclua, no mínimo, uma estratégia de backtracking. A turtle deve seguir em uma direção determinada até atingir uma parede; nesse caso, ela tentará mudar de direção e prosseguir. Se não for possível mudar de direção, ela marcará o patch de modo que não o visite novamente, retornará um passo e tentará ir por outra direção, repetindo o procedimento no caso de não ser possível fazê-lo. Ela deverá ser capaz de concluir que o labirinto não tem solução quando não houver mais patches adjacentes que não tenham sido marcados.

Fontes e links úteis


Ambiente NetLogo e suas aplicações em Simulação Social
NetLogo 5.0.2 User Manual

0 comentários:

Postar um comentário