Professional Documents
Culture Documents
Tutorial
Edlson Pantarolo
(edi@pb.cefetpr.br)
ndice
Introduo......................................................................................................................... 3 2. Ambiente de programao NetLogo............................................................................. 3 2.1. Programao em NetLogo ..................................................................................... 4 3. Instalao do ambiente NetLogo .................................................................................. 4 4. Programao passo a passo .......................................................................................... 7 5. Biblioteca NetLogo .................................................................................................... 17 6. Elementos de interface................................................................................................ 18 6.1 Button ................................................................................................................... 18 6.2 Slider..................................................................................................................... 19 6.3 Switch ................................................................................................................... 21 6.4 Chooser................................................................................................................. 22 6.5 Monitor ................................................................................................................. 23 6.6 Text....................................................................................................................... 24 6.7 Plot........................................................................................................................ 25 6.8 Output ................................................................................................................... 25 7. Desenvolvendo uma atividade com NetLogo............................................................. 26 7.1 Criando um exemplo - Epidemia (nome do nosso projeto).................................. 26 7.1.1 Desenvolvendo o modelo .............................................................................. 27 7.2 Criando novos procedimentos. ............................................................................. 34 7.3 Comentrios.......................................................................................................... 39 8. Problemas para desenvolvimento posterior................................................................ 40 8.1. Colnia de cupins ........................................................................................... 40 8.2. Aprisionamento ............................................................................................... 41 8.3. Labirinto .......................................................................................................... 41 9. Recursos avanados do NetLogo................................................................................ 42 9.1. Experimentos controlados ................................................................................... 42 9.2. HubNet ................................................................................................................ 43 9.3. Extenses ............................................................................................................. 43 9.4. Modelagem da dinmica de sistemas .................................................................. 44 Apndice A ..................................................................................................................... 45
Este tutorial foi baseado no tutorial disponvel na homepage do NetLogo, acesse: http://ccl.northwestern.edu/netlogo/
1. Introduo
Um importante tipo de simulao a agent-based modeling (modelagem baseada em agentes). Esse tipo de simulao caracterizado pela existncia de muitos agentes interagindo uns com os outros, com pouca ou nenhuma direo centralizada. A propriedade de inteligncia emergente do modelo baseado em agentes surge durante o processo de interao, de baixo para cima (bottom-up)1 e no do sentido de cima pra baixo (top-down). Atravs da modelagem baseada em agentes possvel observar como os agentes individuais (pessoas, bactrias, insetos, naes, ou organizaes) interagem entre si e com seu ambiente. A simulao no computador ento usada para descobrir propriedades do modelo e, assim, ganhar entendimento dentro de um processo dinmico, o que seria muito difcil de modelar com tcnicas matemticas padres. Em funo disso, importante dispor de ferramentas capazes de criar, no computador, simulaes de fenmenos complexos e modelos descentralizados. Existem vrios ambientes de programao especificamente projetados para modelagem baseada em agentes, entre eles StarLogo, Microworlds, Swarm, RePast e NetLogo.
4 linguagem de modelagem prpria, derivada da linguagem de programao Logo do Media Lab MIT.
5 Java Virtual Machine), verso 1.4.1 ou superior. Na verso para Windows existe a opo de baixar o pacote que j inclui a JVM necessria, o que mais recomendado para usurios menos experientes. Sugerimos que seja escolhida a verso 3.0 (recomendada JVM 1.4.2_08), com novas caractersticas e a mais atual at o momento.
6 O pacote de instalao inclui todos os mdulos necessrios, o que permite uma rpida visualizao dos elementos instalados (Figura 2) e a consulta local documentao do programa.
Figura 2 Pacote NetLogo instalado. Imediatamente aps a instalao do ambiente possvel comear a trabalhar sobre ele. Quando o NetLogo iniciado, a Interface principal apresentada (Figura 3). Nesta janela possvel visualizar a execuo dos modelos de simulao baseada em agentes. Na parte inferior da janela encontra-se a palheta Command Center, que permite a edio de comandos. Para executar mais de um comando basta escrev-los na seqncia, separados por espao.
Figura 4 Janela de comandos (destaque agentes). Segundo a instalao padro para Windows, o Manual do Usurio fica localmente acessvel a partir do arquivo PastaLocalNetLogo\docs\index.html. A verso on-line e mais recente desse manual pode ser acessada em http://ccl.northwestern.edu/netlogo/docs. O manual apresenta informaes gerais, FAQ (Frequently Asked Questions), tutoriais e guias de referncia sobre a interface e a programao NetLogo. Alm disso, oferece um dicionrio das primitivas disponveis para interagir com o NetLogo e para a construo de programas, na forma de uma extensa relao de comandos, variveis internas padro dos agentes, palavras-chave e constantes.
8 Faremos uma breve apresentao do contedo deste dicionrio (no Apndice A apresentamos uma relao de comandos mais utilizados). A Figura 5 apresenta a tela inicial do dicionrio de primitivas.
Figura 5 Dicionrio de primitivas da programao NetLogo. Para cada comando no dicionrio h uma indicao grfica de quem pode us-los. A indicao dos comandos de utilizao do observer semelhante a um olho (Figura 6). Os comandos de utilizao das turtles so e os comandos de uso dos (Figura 7). representados por uma tartaruguinha verde
9 Vamos comear com alguns comandos. Escolha para enviar os comandos os agentes patches. Assim, de volta a janela principal do NetLogo, vamos a janela de comandos e digitamos: Observe o que acontece (Figura 8). set pcolor (pxcor + pycor).
Figura 8 Comando patches: cor em funo da posio. Obs. Os comandos primitivos relacionados s turtles e patches tambm podem ser chamados pelo observer atravs da solicitao ask turtles [ comandos ] ou ask patches [ comandos ], respectivamente. Para diferenciar os comandos e propriedades comuns a turtles e patches, os destes ltimos iniciam com a letra p (exemplo: xcor relacionado posio da coordenada x para a turtle, da mesma forma pxcor relacionado coordenada x do patch). Abaixo, recorte de um cdigo que determina a criao de patches e turtles com suas devidas distribuies.
10
11
Figura 11 Exemplo de atribuio de patches As outras propriedades comuns a turtles e patches so: pcolor (cor), plabel (rtulo), plabel-color (cor do rtulo) e pycor (coordenada y). Alm dessas, as turtles apresentam as seguintes propriedades exclusivas: breed, espcie a que pertence (o padro turtles); heading, direo para a qual est apontada (valor entre 0.0 e 360.0); hidden?, indica se turtle est invisvel (true) ou visvel (false);
12 pen-down?, indica se caneta da turtle est ativa (true) ou inativa (false); shape, nome da forma aparente da turtle (o padro default); size, tamanho aparente da turtle (o padro 1.0, que equivale ao tamanho de um patch corrente); who, identificador numrico e nico de cada turtle (ao criar as primeiras 20 turtles, who varia de 0 a 19); uma turtle especfica pode ser identificada atravs do valor numrico de sua propriedade who. Os comandos de limpeza e inicializao do ambiente s podem ser enviados pelo observer. Para limpar a tela e reiniciar a execuo usamos o comando clear-all (ou ca), que elimina simultaneamente todas as turtles e patches existentes. Existem outros comandos relacionados a esse, so eles: clear-turtles clear-output. Selecione na janela de comando observer e digite clear-all ou se preferir ca. Observe que a tela grfica voltou posio inicial. A chamada a clear-all zera todas as variveis globais do ambiente e chama clear-turtles, clear-patches, clear-drawing, clear-all-plots e clear-output, respectivamente. O comando clear-turtles destri todas as turtles existentes. O comando clear-patches reinicia todos os patches para seus valores iniciais, cor preta inclusive. Vamos criar agora algumas turtles. Essa possibilidade tambm reservada ao observer. Digite create-turtles (crt) seguido de um nmero (create-turtles 20 ou crt 20 para criar 20 turtles). Observe que aparecer no meio da tela grfica um ponto, pois todas as turtles criadas esto amontoadas uma sobre as outras, cada uma voltada numa direo (Figura 12). Na seqncia, para visualizar as turtles vamos fazer com que elas andem para frente dez passos de turtle. Na janela de comando para turtle, digite forward 10 ou fd 10. Observe que as turtles criadas so de vrias cores e ao andarem para frente, todas juntas, formaram um crculo, o que realmente mostra que cada uma est voltada para uma direo (Figura 13). (ct), clear-patches (cp), clear-drawing, clear-all-plots e
13
Caso queiramos que o observer defina o comando para as turtles executarem, basta digitarmos na janela de comando do observer ask turtles [forward 10], para que andem dez passos para frente. Sempre que o observer deseje solicitar comandos para serem executados pelas turtles ou patches, devemos seguir esta forma: a primitiva ask seguida dos agentes a que se refere (no exemplo, turtles) e do bloco de comandos entre colchetes (no exemplo, [forward 10]). Cada turtle ou patch tem uma posio no seu ambiente, disposta em coordenadas cartesianas. O centro do ambiente tem coordenada (0,0). Como no plano cartesiano, o eixo horizontal denominado eixo-x e o vertical eixo-y. No NetLogo a distncia do meio at a extremidade direita ou esquerda chamada de screen-edge-x, a distncia do meio aos extremos superior ou inferior chamado de screen-edge-y. Na Figura 14 temos: do centro at as extremidades direita e esquerda a distncia 3, do centro aos extremos superior e inferior a distncia 2.
14
Figura 14 Distncias screen-edge da tela grfica NetLogo. Podemos tambm criar turtles customizadas atravs do comando create-custom-turtles N [comandos ] ou cct-turtles N [ comandos ]. Desta forma, so criadas N turtles e os comandos so executados por cada turtle recm criada. Por exemplo, se desejamos criar 50 turtles com a forma de um crculo e a cor verde, podemos fazer, como observer: create-custom-turtles 50 [ set shape circle set color green ] ou cct 50 [ set shape circle set color green] Neste exemplo, notamos que circle o nome, entre aspas, de uma forma bsica presente na biblioteca de formas (Figura 15), acessvel pelo menu Tools, opo Shapes Editor. E notamos ainda que green uma constante reconhecida pelo NetLogo para cor verde. Uma tabela de cores e respectivos valores numricos (Figura 16) est acessvel atravs do menu Tools, opo Color Swatches.
15
Figura 16 Tabela de cores e respectivos valores numricos. Apenas o observer pode solicitar comandos ao conjunto de todas as turtles de uma s vez. Exemplo: ask turtles [set color sky ]. Por outro lado, tanto observer quanto patches podem solicitar comandos para um conjunto reduzido de turtles. Assim como observer e turtles podem solicitar comandos para um conjunto reduzido de patches. Exemplo com uma turtle especfica: solicitar que a turtle 10 mude para vermelho, ask turtle 10 [set color red ]. possvel ainda atingir conjuntos de turtles (ou patches) com propriedades comuns, usando a primitiva with. Exemplo, solicitar que todas as turtles de cor azul cu mudem para verde: ask turtles with [color = sky] [set color green]. O mesmo vale para patches, respeitadas as propriedades que estes possuem. Na prtica, a primitiva with permite a definio do que o NetLogo chama de AgentSet. Note que turtles e patches so os AgentSets bsicos da linguagem, mutuamente exclusivos entre si, e portanto no podem ser misturados num mesmo AgentSet. NetLogo apresenta tambm comandos considerados reprteres, que na prtica facilitam a contagem de elementos em um AgentSet. O reprter mais
16 bsico o comando count. Por exemplo, podemos contar quantas turtles existem atravs do comando count turtles, ou contar quantos patches so azuis com o comando count patches with [pcolor = blue ]. Se voc tentou estes comandos reprteres deve ter recebido mensagens de erro do tipo ERROR: Expected command., ou seja, comando esperado. Isso porque devemos indicar de maneira explcita que o resultado deve ser mostrado. H quatro comandos distintos para indicar ao NetLogo que algum resultado deve ser mostrado na janela de comandos: show valor resulta em: agente-chamador valor <CR>2 Exemplo: observer> show count turtles resulta em observer: 0 <CR> se nenhuma turtle foi criada ainda. print valor resulta em: valor <CR> Exemplo: observer> print count patches with [ pcolor = blue ] resulta em 20 <CR> (no precedido de observer: ) se h 20 patches azuis. type valor resulta em: valor Exemplo: observer> type shape-of turtle 10 resulta em default (string sem aspas) se a turtle 10 tem a forma padro. write valor resulta em: valor Exemplo: observer> type shape-of turtle 10 resulta em default (string com aspas) se a turtle 10 tem a forma padro. Estes comandos podem ser usados com qualquer expresso que possa ser avaliada pelo NetLogo e resultar em um numeral, string, lista, valor lgico, constante. Experimente e observe os resultados de: observer> show 10 observer> type sky
2
17 observer> print Joo e Maria observer> type Joo e Maria observer> write Joo e Maria observer> show sky = blue observer> write sky = 95.0 observer> write yellow observer> type turtles-at 1000 1000 Experimente enviar estes mesmos comandos atravs dos agentes turtles e patches e observe em que diferem os resultados.
5. Biblioteca NetLogo
Quando desejamos analisar um modelo pronto, basta abrirmos a biblioteca de modelos, selecionando o menu File, opo Models Library, que abre uma nova janela (Figura 17), que disponibiliza uma relao de modelos em vrias reas (arte, biologia, qumica, cincia da computao, cincias da terra, entre outros). Cada modelo da biblioteca traz instrues sobre o mesmo, qual seu objetivo, como utilizar, o que pode ser observado, etc.
Figura 17 Biblioteca de modelos NetLogo. Para visualizar algum modelo, basta selecion-lo para que este fique pronto para execuo. interessante, antes da execuo, ler a pasta de
18 informao para saber como o modelo funciona, suas caractersticas, como usar, o que pode ser observado. Geralmente os modelos apresentam dois botes bsicos: boto setup, que utilizado para iniciar o modelo; e o boto go, para que o modelo seja executado. Se tiver sido selecionada a opo forever, as instrues associadas com o boto so executadas repetidamente, caso contrrio so executadas uma nica vez por clique. Os modelos podem trazer tambm botes de controle e visualizao de parmetros e informaes (Slider, Switch, Chooser, Monitor, Plot, Output e Text), que sero abordados a seguir (Seo 6). Para iniciar o modelo clique no boto setup e para coloc-lo em movimento clique no boto go. Aps analisar o modelo, experimente variar os parmetros e observar o que ocorre.
6. Elementos de interface
Agora que j experimentamos a interao com um modelo atravs dos elementos de interface, vamos entender o que eles significam e como so tratados internamente pelo NetLogo e, mais importante, como us-los para facilitar nosso trabalho de programao. Esses elementos podem ser includos em nossos modelos atravs da barra de ferramentas (Figura 18).
6.1 Button
Criamos um button para facilitar a execuo automtica de comandos atravs de um nico clique. Para criar um button clique em caixa de dilogo Button (Figura 16) que permite definir: qual agente executar os comandos (ex. Observer); executar repetidamente (forever) ou apenas uma vez por clique; quais os comandos associados, separados por espaos ou em linhas distintas (ex., ca crt 20 ask turtles [ fd 5 ] ); e em
19 nome que ser exibido na interface (ex. Boto Teste); tecla de atalho equivalente (ex. T). Experimente criar alguns botes diferentes com os mesmos comandos, combinando as diferentes possibilidades de agente executor, forever ou no, com ou sem tecla de atalho e teste-os observando como e quando funcionam. Em seguida, experimente criar botes para execuo de comandos diferentes, por exemplo, alguns dos comandos que voc treinou atravs da janela de comandos (Seo 4).
6.2 Slider
Um slider define uma varivel global, acessvel a todos os agentes do modelo. Geralmente esta varivel usada para variar parmetros do modelo sem a necessidade de reescrever os comandos. Vamos criar um slider para variar o nmero de turtles criadas. Para isso clique em e em seguida na rea de trabalho, isso abrir a caixa de
NumeroDeCriaturas); os valores mnimo e mximo que a varivel pode assumir e o incremento ou variao (ex., mnimo de 5 e mximo de 20, variando de 1 em 1); o valor inicial pr-selecionado no slider (ex., Value 10); unidade de medida (opcional), til para variveis que expressam medidas padronizadas como kg, cm, min, Km, etc.
Figura 20 Criao de slider para controlar parmetros do modelo. Aps criar um slider como o da Figura 20, modifique o Boto Teste original (Figura 14), clicando com o boto direito, opo Edit... e substitua crt 20 por crt NumeroDeCriaturas. Observe o resultado ao variar os valores de NumeroDeCriaturas e executar o Boto Teste. Sugerimos que voc repita o mesmo para definir parmetros variveis associados aos botes criados na atividade anterior (lembre-se que necessrio modificar os comandos nos botes) e teste incrementos decimais.
21 Parmetros associados a sliders tambm so acessveis atravs da janela de comando. Por exemplo, como observer digite show NumeroDeCriaturas. Observe que dependendo da ordem de suas aes sobre o modelo, isso nem sempre resulta em um valor equivalente a show count turtles.
6.3 Switch
Um switch define e representa visualmente uma varivel lgica global, acessvel a todos os agentes do modelo. Variveis lgicas podem assumir os valores true (verdadeiro, quando swich On) ou false (falso, quando switch Off). Para criar um switch clicamos em e em seguida na rea de
trabalho. Isso abrir a caixa de dilogo Switch (Figura 21) que permite definir o nome da varivel lgica global associada (ex. LimparAntesDeCriarNovas?). Parmetros lgicos variveis podem ser usados como critrio de deciso sobre a execuo ou no de partes do modelo, quando usadas em associao com o comando condicional if condio [comandos], que significa que os comandos somente sero executados se a condio for verdadeira.
Figura 21 Criao de switch para controlar parmetros lgicos. Aps criar um switch como o da Figura 18, modifique o Boto Teste original (Figura 16), substituindo ca por if LimparAntesDeCriarNovas? [ca ]. Isso far com que os comandos entre colchetes (no exemplo, ca) sejam
22 executados apenas se o valor de LimparAntesDeCriarNovas? for verdadeiro (switch On). Experimente criar switches para controlar outros parmetros lgicos do modelo (lembre-se de modificar os comandos nos respectivos botes). Parmetros associados a switches tambm so acessveis atravs da janela de comando. Por exemplo, como observer digite show LimparAntesDeCriarNovas?.
6.4 Chooser
Um chooser define uma varivel global a qual atribudo o valor selecionado pelo usurio em um menu drop down (lista de seleo desdobrvel). Para criar um chooser clicamos em e em seguida na
rea de trabalho. Isso abrir a caixa de dilogo Chooser (Figura 22), que permite definir o nome da varivel global (ex. Forma) e uma lista de opes que o menu apresentar, separadas por espaos ou linhas (ex. circle square triangle default). Podemos testar o chooser Forma modificando no Boto Teste os comandos crt NumeroDeCriaturas para cct NumeroDeCriaturas [set shape Forma ].
23
6.5 Monitor
Um monitor mostra o contedo dinmico de uma varivel, um reprter ou uma expresso composta. Para criar um monitor clicamos em que permite definir: a varivel, reprter ou expresso que ser avaliada e cujo valor ser mostrado (ex. count turtles with [ pxcor < 0 ] ) ; o nome do monitor (ex. Turtles na metade esquerda da tela); se numrico decimal, quantas casas decimais devem ser consideradas. Para observar a mudana dinmica de Turtles na metade esquerda da tela podemos, por exemplo, criar um boto de comando (go) para os agentes turtles, do tipo forever, com os comandos rt random 360 fd 1. e em
seguida na rea de trabalho. Isso abrir a caixa de dilogo Monitor (Figura 23),
24
6.6 Text
Um elemento text apresenta um texto esttico na rea de trabalho. Utilizamos esse recurso para tornar mais clara e explicativa a interface de um modelo. Para criar um text clicamos em a mensagem de texto a ser apresentada. e em seguida na rea de
trabalho. Isso abrir a caixa de dilogo Text Box (Figura 24), na qual digitamos
25
6.7 Plot
Um elemento plot permite plotar um grfico dinmico a partir dos dados gerados pelo modelo. Trabalharemos com esse elemento quando desenvolvermos nossos modelos na forma de programas completos (Seo 7).
6.8 Output
Um elemento output cria uma rea de texto dinmica, com possibilidade de scrolling, til para manter um registro do tipo log, por exemplo, quando estamos testando se um modelo funciona conforme o esperado, ou quando desejamos manter e mostrar um histrico de valores gerados ou aes executadas. Apenas um output por modelo pode ser criado. Para criar um output clicamos em e em seguida na rea de
trabalho. Para escrever no output usamos os comandos output-print valor, output-show valor, output-type valor e output-write valor, que so semelhantes aos comandos print, show, type e write vistos na Seo 4. A diferena que os primeiros escrevem o valor no output e os ltimos na janela de comandos. Propomos que voc crie um output e experimente escrever alguns contedos nele, usando os comandos output-??? valor para relembrar a diferena entre print, show, type e write. Varie o envio pela janela de comandos ou associado a botes.
26
27 Num processo contnuo, podemos prever que essa contaminao se alastrar por toda comunidade num rpido crescimento, caso no seja combatida. esse modelo que pretendemos descrever no nosso ambiente de simulao.
28 Agora, clicando sobre o Observer>, na janela de comando, lado esquerdo, e selecione Tutles>; porque queremos direcionar os comandos para serem executados apenas pelas turtles criadas. Assim, o prximo comando : Turtles> forward random 100 (fd random 100), esse comando
far com que todas as turtles andem para frente um nmero randmico (de 0 a 99). Feito isso podemos ver as todas as turtles. Para cada turtle atribudo um valor randmico para o movimento. Para melhor aproximar do modelo e dar uma melhor visualizao do que pretendemos simular, precisamos fazer com que toda a populao apresente a mesma caracterstica. Faremos com que todos os agentes sadios tenham a mesma cor.
Figura 26 Distribuio agentes Veja o que ocorre se fizermos: Turtles> set color lime (continuamos no comando de Turtle);
29
30
Bem, agora queremos fazer com que uma turtle fique doente
(contaminada). Simularemos isso mudando a cor de uma turtle, estabelecendo uma condio: if who = 1 [set color red] (observe o espao ante e depois do sinal de =) (obs. Cada turtle tem uma ID, nesse caso especfico estou chamando a turtle de ID = 1)
31
Turtles> set color lime Turtles> set heading random 360 Turtles> if who = 1 [set color red]
Na janela principal escolha na barra de ferramentas a opo Procedures e transportamos todos esses comandos para este local, retirando os caracteres Observer> e Turtles>. Para diferenciar os comandos executados pela turtle indicaremos eles por ask turtles [ ]. Entretanto todo procedimento deve ter um nome, e deve sempre iniciar com to nome-procedimento e terminar com end, faremos: Para mais informaes sobre o uso de procedimentos leia o documento complementar Leia Mais 1
Figura 30 Uso de procedimentos Vamos agora testar nosso procedimento. Digite no comando central o procedimento setup. Ateno: todo procedimento comea com to nome-procedimento e termina com end
32
33 Para facilitar ainda mais nosso trabalho, ao invs de digitar todas s vezes o comando setup para executar o procedimento vamos criar um boto para disparar esse procedimento, conforme apresentado na seo 6. Voltamos para a janela principal e selecione na barra de ferramentas a opo Interface clique sobre o button, em seguida clique em qualquer lugar da tela branca, aparecera o boto e uma janela para descriminao do mesmo,
34
agora criar procedimentos para dar movimento (go) aos agentes e, se quiser, parar a execuo. Queremos definir um procedimento que faa nosso modelo interagir vrias vezes. Voltemos para a rea de procedimentos:
Figura 34 Definio de procedimento de movimento da mesma forma vamos criar o boto go. A nica diferena que selecionaremos o cone forever para tornar o modelo numa execuo sem interrupo. Esse mesmo movimento pode ser acionado pelo agente turtles, com pequena modificao na forma de acionar, pois sendo um movimento descrito pelo prprio agente no h necessidade de usar o comando ask, ficando:
35
Figura 35 Mesmo comando da janela anterior, porem chamado pelo agente turtles Criando o boto go, conforme item anterior de gerao de boto.
Figura 36 Idem figura 33 Teste o modelo usando os botes setup e go, veja o que acontece. Para parar o movimento, basta clicar no boto go novamente.
36 Queremos agora criar uma turtle que esteja contaminada. Vamos supor que a turtle de ID = 1 esteja contaminada, para diferenciar essa das demais vamos mudar a sua colorao, tornando a de cor vermelha. Esse procedimento realizado atravs da condio: if who = 1 [set color red]
Feito isso, a turtle vermelha apresenta infectada em relao as demais turtles. Toda a populao esta se movimentando no ambiente, inclusive a infectada. Com essa interao, simulando uma epidemia. Para que isso ocorra vamos estabelecer a seguinte condio: a turtle vermelha infeta outra quando essa cruzar o seu caminho; para isso usamos o comando do NetLogo para definir essa expresso: if color = red [set color-of random-one-of turtleshere red] colocaremos esse comando na primeira linha abaixo do comando forward 1 do procedimento go. Teste o experimento novamente e veja o que acontece. O comando random-one-of escolhe um agente aleatrio que esta sobre o patch turtles-here. Se o agentset esta vazio, retorna nobody, caso contrrio pinta a turtle de vermelha. Suponha que quisssemos ver a expanso dessa epidemia em funo do tempo. Vamos traar um grfico para acompanhar os valores. Sobre a barra de ferramentas clique sobre o boto Plot, em seguida clique em qualquer lugar da tela branca para criar o espao do grfico.
37
O nmero de turtles definido, ento podemos estabelec-lo no grfico, para isso basta usar o comando do NetLogo
38 set-plot-y-range 0 100
no procedimento Setup, antes da declarao end. Como a dimenso do tempo
Figura 38 Modelo complete em execuao Modelo Epidemia. (veja o modelo em execuo) Podemos trabalhar bem mais neste modelo com vrios parmetros (sliders), por exemplo, tornando as constantes variveis, como o nmero de turtles iniciais, a quantidade inicial de turtles infectadas, usando botes de controle para isso. Experimente! Modelo Epidemia2 (veja o modelo em execuo)
39 Obs. At este momento, programamos a simulao para parar quando todos os agentes forem infectados.
7.3 Comentrios
Bem, da forma como o problema foi abordado at o momento a tendncia que a epidemia se alastre e infecte toda a populao. Entretanto, muitas outras questes podem ser levantadas baseada neste problema, por exemplo: uma vez que se detecte uma epidemia, que mtodos podem ser adotados para combat-la? importante salientar que no pretendemos que o problema termine simplesmente com a infeco de toda a populao, isto seria um modo muito simplista de encarar o problema. Algumas alternativas para combater o problema poderiam ser: Droga;
40 Vacina; Controle de interao da populao; Isolamento dos infectados; Caso haja aumento da violncia da infeco com mortes, que mtodos poderiam ser adotados para preservar a espcie? Ou atravs das medidas adotadas, semelhantes s sugeridas acima, que mutaes poderiam ocorrer com a populao? Aborde uma ou mais dessas alternativas e procure resolver o problema. Esse trabalho pode ser realizado individualmente ou em grupo. Encaminhamentos: Discutir as solues apresentadas e as estratgias de resoluo; Analisar os caminhos adotados para programao.
ser deslocado; Implemente esse exemplo no NetLogo.Faa uso das facilidades do NetLogo para variaes de parmetros, contadores, exibio de grficos, etc.
as funes de cada uma. D forma diferente para cada um dos representantes da casta. Analise o modelo. Observe o comportamento que emerge dessas interaes. comando manual - Modelo-1 comando manual - Modelo-2 com procedimento - Modelo-3 com procedimento e apenas uma espcie - Modelo-4 com procedimento e duas espcies trabalhando - Modelo-5
8.2. Aprisionamento
Suponha que exista um territrio livre onde est construdo um castelo habitado por um monstro hostil que aprisiona todos os invasores que por l aparea; um mago poderoso e inofensivo ao ataque do monstro, que transita livremente pelo territrio; e heris destemidos que ficam desafiando o monstro, tentando entrar e sair do castelo sem o monstro perceber. O castelo tem apenas duas aberturas por onde o mago e os heris podem passar. O mostro crcere permanente do territrio, isto , ele no pode ir ao mundo exterior. O mago fica transitando livremente pelo territrio e libertando os heris aprisionados. Aps o inicio do jogo, um novo heri s surge se todos os demais estiverem aprisionados. O movimento das criaturas aleatrio. Construa esse modelo e observe o seu desenvolvimento e as interaes que emergem dos comportamentos descritos. Estime o nmero de heris existentes no territrio passado alguns minutos de simulao; que relaes podem ser observadas deste comportamento? Modelo aprisionamento
8.3. Labirinto
Neste caso, o desafio desenvolver uma estratgia para que os agentes (bolas vermelhas) alcancem o objetivo de sair do tabuleiro (patches verdes), atravs
42 das portas (patches pretos), contornando um labirinto fechado (patches azuis) de formas geradas randomicamente a cada execuo do modelo. O modelo atual tem duas estratgias pr-implementadas, chamadas de randmico e estratgia 1. Em todos os casos a direo inicial randmica. Na estratgia randmico, as turtles trocam de direo e procuram randomicamente a sada. Funciona sempre, mas pode demorar muito! Na estratgia 1, uma direo escolhida e mantida o mximo possvel. A troca de direo atende a um critrio de prioridade pr-definido e arbitrrio. Esta estratgia tende a ser mais rpida que a anterior, mas nem sempre funciona. Rode o modelo algumas vezes e descubra qual a limitao... A estratgia 2 no foi escrita, este o seu desafio. Modelo Labirinto
43 combinao ou outra condio de parada, ou mesmo quantas vezes o mesmo experimento deve ser repetido.
9.2. HubNet
O recurso HubNet possibilita a autoria e aplicao de atividades de simulao participativa, na sala de aula ou laboratrio de informtica. Esta ferramenta, acessvel atravs do menu Tools, opo HubNet Control Center,3 transforma o NetLogo em um servidor de simulaes, que funciona numa rede de computadores em arquitetura cliente-servidor. Atravs do HubNet o professor pode disponibilizar simulaes em que cada parte do modelo (parmetros, agentes, etc.) seja controlada por um aluno atravs de seu computador (ou mesmo por um modelo especfico de calculadora). A biblioteca de modelos do NetLogo 3.0 traz, na pasta HubNet Computer Activities, alguns exemplos de simulaes formatadas para a arquitetura HubNet.
9.3. Extenses
O ambiente NetLogo foi projetado de maneira que podem ser anexadas extenses ao programa bsico. Desta maneira, podem ser adicionados novos recursos ao programa e comandos linguagem de modelagem. Na prtica, uma extenso um arquivo jar (java archive) com determinadas caractersticas. Usurios de NetLogo podem usar uma extenso indicando no incio do programa a clusula __extensions ["NomeDaExtenso.jar" ]. Programadores da linguagem Java podem escrever novas extenses para o NetLogo atendendo s especificaes descritas na documentao. Extenses podem acrescentar caractersticas interessantes, por
exemplo, GoGo uma extenso que permite conectar o NetLogo ao mundo fsico atravs de uma placa de baixo custo, que voc mesmo pode construir. Esta possui 8 portas para sensores e 4 portas para atuadores. Esse recurso tem inmeras aplicaes educacionais, como robtica, meio ambiente, automao de laboratrios, entre outras. Informaes sobre a placa GoGo e projetos educacionais desenvolvidos com ela em www.gogoboard.org.
A opo HubNet Control Center somente fica disponvel se o modelo aberto estiver configurado para arquitetura HubNet.
3
44
45
Turtles patches
Atributo de cor dos agentes patches Atributo de cor dos agentes turtles Apresenta as distancia (nos eixos x e y, respectivamente) da origem aos extremos da tela Corresponde a 2 x screen-edge-x (y) Indica a direo (ngulo) para a qual esta a turtle Solicita a turtle andar numero passos turtle para frente Para chamar uma turtle especifica Solicita a turtle andar numero passos turtle para trs Atribui valor para uma varivel local Escolhe um numero randomicamente Escolhe um valor entre 0, 1 e 2. Obs.: H variaes do tipo de nmeros a serem selecionados, inteiro, float, exponencial Solicita turtle saltar Para iniciar um procedimento Finaliza um procedimento Solicitar que os agentes executem algum comando Define variveis globais, deve ser no inicio do programa
Turtles
Comando Geral
jump nmero
to procedure-name end ask ask turtles [ comando ] ask patches [comando ] globals [var1 var2 ...]