globals [ tempo distancia horizonte-olfactivo tamanho-migalha quantidade-inicial-feromonas Patch-Fronteira c-c lista-x lista-y lista-tipo ] turtles-own [ transporta-comida? quantidade-depositada ] patches-own [ feromonas comida cor ninho? cheiro-de-ninho ] to Preparar Preparar-Graf clear-graphics set tempo 0 set horizonte-olfactivo 45 set tamanho-migalha 3 set quantidade-inicial-feromonas 40 set lista-x (list) set lista-y (list) set lista-tipo (list) Preparar-Formigas Preparar-Patches do-plotting end to Preparar-Graf set-current-plot-pen "comida amarela" ppu plotxy 0 0 set-current-plot-pen "comida vermelha" ppu plotxy 0 0 set-current-plot-pen "comida verde" ppu plotxy 0 0 set-current-plot-pen "comida azul" ppu plotxy 0 0 end to Preparar-Formigas set-default-shape turtles "ant" cct formigas [ set size 2 set color orange rt random-float 360 set transporta-comida? false ] end to Preparar-Patches set Patch-Fronteira patches with [ abs pxcor = screen-edge-x or abs pycor = screen-edge-y ] ask patches [ set feromonas 0 set comida 0 set ninho? distancexy 0 0 < 5 set cheiro-de-ninho 200 - distancexy 0 0 if ninho? [ set pcolor blue ] ] end to Executar ask turtles [ Mover-Formigas ] diffuse feromonas taxa-difusao-feromonas / 100 ask Patch-Fronteira [ set feromonas 0 ] ask patches [ Actualizar-Patches ] set tempo tempo + 1 do-plotting end to Actualizar-Patches ifelse ninho? [ set pcolor blue ] [ ifelse comida > 0 [ set pcolor cor ] [ set feromonas feromonas * (100 - taxa-evap-feromonas) / 100 set pcolor scale-color green feromonas 0 50 ] ] end to Mover-Formigas if who < tempo [ ifelse transporta-comida? [ set color brown + 1 Regressar-ao-Ninho ] [ set color orange Procurar-Comida ] ] end to Regressar-ao-Ninho ifelse ninho? [ set transporta-comida? false rt 180 forward 1 ] [ set feromonas feromonas + quantidade-depositada set quantidade-depositada quantidade-depositada - 1 if quantidade-depositada < 1 [ set quantidade-depositada 1 ] Cheirar-Ninho rt random horizonte-olfactivo - random horizonte-olfactivo forward 1 ] end to Procurar-Comida ifelse comida > 0 [ set transporta-comida? true set comida comida - 1 set quantidade-depositada quantidade-inicial-feromonas rt 180 ] [ Universo-Finito ifelse feromonas < 0.05 [ rt random horizonte-olfactivo - random horizonte-olfactivo ] [ if feromonas < 2 [ Cheirar-Feromonas ] ] forward 1 ] end to Cheirar-Feromonas locals [ alcance cheiro-esquerda cheiro-frente cheiro-direita ] Universo-Finito rt random horizonte-olfactivo - random horizonte-olfactivo set alcance alcance-olfactivo set cheiro-esquerda 0 set cheiro-frente 0 set cheiro-direita 0 while [ alcance > 0 ] [ set cheiro-esquerda cheiro-esquerda + feromonas-of patch-left-and-ahead horizonte-olfactivo alcance set cheiro-frente cheiro-frente + feromonas-of patch-ahead alcance set cheiro-direita cheiro-direita + feromonas-of patch-right-and-ahead horizonte-olfactivo alcance set alcance alcance - 1 ] if (cheiro-direita > cheiro-frente) or (cheiro-esquerda > cheiro-frente) [ ifelse cheiro-direita > cheiro-esquerda [ rt horizonte-olfactivo ] [ lt horizonte-olfactivo ] ] end to-report alcance-olfactivo ifelse inteligencia = "baixa" [ report 0 ] [ ifelse inteligencia = "alta" [ report 7 ] [ report 1 ] ] end to Cheirar-Ninho locals [ cheiro-esquerda cheiro-frente cheiro-direita ] Universo-Finito set cheiro-esquerda cheiro-de-ninho-of patch-left-and-ahead horizonte-olfactivo 1 set cheiro-frente cheiro-de-ninho-of patch-ahead 1 set cheiro-direita cheiro-de-ninho-of patch-right-and-ahead horizonte-olfactivo 1 if (cheiro-direita > cheiro-frente) or (cheiro-esquerda > cheiro-frente) [ ifelse cheiro-direita > cheiro-esquerda [ rt horizonte-olfactivo ] [ lt horizonte-olfactivo ] ] end to Universo-Finito if abs xcor > screen-edge-x - 1 [ set heading towardsxy-nowrap 0 ycor ] if abs ycor > screen-edge-y - 1 [ set heading towardsxy-nowrap xcor 0 ] end to Depositar-Comida locals [ mx my ] set mx round mouse-xcor set my round mouse-ycor ask patch 0 0 [ set distancia distancexy-nowrap mx my ] if mouse-down? [ set lista-x lput mx lista-x ;;pega na lista inicial e devolve a lista inicial com o novo elemento set lista-y lput my lista-y ;; "" ifelse forma-da-migalha = "regular" [ Depositar-Migalha-Regular mx + 0.75 my + 0.75 set lista-tipo lput 1 lista-tipo ] [ Depositar-Migalha-Aleatoria mx + 0.75 my + 0.75 set lista-tipo lput -1 lista-tipo ] ask patches with [ distancexy-nowrap mx my <= tamanho-migalha ] [ if cor-migalha = "amarela" [ set cor yellow ] if cor-migalha = "vermelha" [ set cor red ] if cor-migalha = "verde" [ set cor lime ] if cor-migalha = "azul" [ set cor cyan ] ] ask random-one-of patches with [ distancexy-nowrap mx my <= tamanho-migalha ] [ set lista-tipo replace-item (length lista-tipo - 1) lista-tipo (last lista-tipo * cor) ] ask patches [ Actualizar-Patches ] stop ] end to Depositar-Migalha-Regular [ x y ] ask patches with [ distancexy-nowrap x y <= tamanho-migalha ] [ set comida comida + 10 * (tamanho-migalha - distancexy-nowrap x y) ] ask Patch-Fronteira [ set comida 0 ] end to Depositar-Migalha-Aleatoria [ x y ] locals [ comida-total migalha ] set comida-total tamanho-migalha * tamanho-migalha while [ comida-total > 0 ] [ ask patches with [ distancexy-nowrap x y <= tamanho-migalha ] [ without-interruption [ set migalha 1 + random-float comida-total set comida comida + migalha set comida-total comida-total - migalha ] ] ] ask Patch-Fronteira [ set comida 0 ] end to repor locals [ mcor ] Preparar-graf clear-graphics set tempo 0 set horizonte-olfactivo 45 set tamanho-migalha 3 set quantidade-inicial-feromonas 40 Preparar-Formigas Preparar-Patches ( foreach lista-tipo lista-x lista-y [ ifelse ?1 > 0 [ Depositar-Migalha-Regular ?2 + 0.75 ?3 + 0.75 set mcor ?1 ] [ Depositar-Migalha-Aleatoria ?2 + 0.75 ?3 + 0.75 set mcor -1 * ?1 ] ask patches with [ distancexy-nowrap ?2 ?3 <= tamanho-migalha ] [ set cor mcor ] ] ) ask patches [ Actualizar-Patches ] do-plotting end to do-plotting if not plot? [ stop ] set-current-plot "Comida Disponivel" set-current-plot-pen "comida amarela" set c-c 0 ask patches with [ pcolor = yellow ] [ without-interruption [ set c-c c-c + comida ] ] ppd plotxy tempo c-c set-current-plot-pen "comida vermelha" set c-c 0 ask patches with [ pcolor = red ] [ without-interruption [ set c-c c-c + comida ] ] ppd plotxy tempo c-c set-current-plot-pen "comida verde" set c-c 0 ask patches with [ pcolor = lime ] [ without-interruption [ set c-c c-c + comida ] ] ppd plotxy tempo c-c set-current-plot-pen "comida azul" set c-c 0 ask patches with [ pcolor = cyan ] [ without-interruption [ set c-c c-c + comida ] ] ppd plotxy tempo c-c end ; Versão ICES Copyright 2004, Centro de Física Teórica e Computacional ; *** NetLogo Model Copyright Notice *** ; ; This model was created as part of the project: ; PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING IN ; CLASSROOMS. The project gratefully acknowledges the support of the ; National Science Foundation (REPP program) -- grant number REC #9814682. ; ; Copyright 2001 by Uri Wilensky. Updated 2001. All rights reserved. ; ; Permission to use, modify or redistribute this model is hereby granted, ; provided that both of the following requirements are followed: ; a) this copyright notice is included. ; b) this model will not be redistributed for profit without permission ; from Uri Wilensky. ; Contact Uri Wilensky for appropriate licenses for redistribution for ; profit. ; ; To refer to this model in academic publications, please use: ; Wilensky, U. (2001). NetLogo L-SystemFractals model. ; http://ccl.northwestern.edu/netlogo/models/L-SystemFractals. ; Center for Connected Learning and Computer-Based Modeling, ; Northwestern University, Evanston, IL. ; ; In other publications, please use: ; Copyright 1998 by Uri Wilensky. All rights reserved. See ; http://ccl.northwestern.edu/netlogo/models/L-SystemFractals ; for terms of use. ; ; *** End of NetLogo Model Copyright Notice *** @#$#@#$#@ GRAPHICS-WINDOW 1 10 563 593 34 34 8.0 1 10 0 0 0 CC-WINDOW 6 599 279 665 Command Center BUTTON 577 169 648 202 Preparar Preparar NIL 1 T OBSERVER T SLIDER 773 599 978 632 taxa-evap-feromonas taxa-evap-feromonas 0 100 10 1 1 % BUTTON 648 169 720 202 Executar Executar T 1 T OBSERVER T SWITCH 428 599 572 632 plot? plot? 0 1 -1000 SLIDER 577 58 777 91 formigas formigas 0 200 100 1 1 NIL PLOT 563 250 983 593 Comida Disponivel Tempo Comida 0.0 100.0 0.0 20.0 true false PENS "comida amarela" 1.0 0 -256 true "comida vermelha" 1.0 0 -65536 true "comida verde" 1.0 0 -16711936 true "comida azul" 1.0 0 -16711681 true BUTTON 577 136 720 169 Depositar Comida Depositar-Comida T 1 T OBSERVER T SLIDER 572 599 773 632 taxa-difusao-feromonas taxa-difusao-feromonas 0 100 50 1 1 % CHOICE 577 91 720 136 cor-migalha cor-migalha "amarela" "vermelha" "verde" "azul" 2 MONITOR 767 141 927 190 distancia ao formigueiro distancia 3 1 MONITOR 577 202 720 251 NIL tempo 0 1 CHOICE 279 599 429 644 forma-da-migalha forma-da-migalha "aleatoria" "regular" 1 CHOICE 777 46 983 91 inteligencia inteligencia "baixa" "media" "alta" 1 MONITOR 720 92 847 141 patch-horizontal round mouse-xcor 0 1 MONITOR 847 92 983 141 patch-vertical round mouse-ycor 0 1 BUTTON 777 207 917 240 Repor Ambiente repor NIL 1 T OBSERVER T BUTTON 606 11 735 44 Limpar Gráfico clear-all-plots NIL 1 T OBSERVER T @#$#@#$#@ SISTEMAS ADAPTATIVOS - INTRODUÇÃO --------------------- As formigas e as suas colónias têm despertado o interesse de investigadores das mais diversas áreas científicas, dada a sua característica exemplar de, possuidoras de comportamentos individuais simples, serem no entanto capazes de evidenciar formas de organização e comportamento colectivos extraordináriamente complexos. Esta emergência de comportamento colectivo complexo tem servido de metáfora a explorações em áreas tão distantes da mirmecologia como a Neurociência, a Física, a Ciência da Computação e Vida Artificial. Tal como nos bandos de aves ou cardumes de peixes, nas colónias de formigas não existe um líder (ou mesmo uma hierarquia de líderes) que determina o comportamento individual de cada elemento da população com um fim comum bem determinado. Pelo contrário, esse fim comum resulta da conjugação/interacção entre os elementos da população de forma "espontânea". No entanto, e ao contrário dos bandos de aves e cardumes de peixes, existe nas colónias de formigas uma sofisticação adicional: O denominado "feedback positivo". Com efeito, o elenco de acções que caracterizam o comportamento individual das formigas é muito simples. Elas limitam-se a procurar comida incessantemente com o intuito de, uma vez encontrada, a transportarem para o ninho. No entanto, neste percurso de transporte de comida, as formigas depositam de forma regular, feromonas. Estas feromonas, por sua vez, são facilmente identificáveis via olfacto pelas outras formigas, que assim tomam conhecimento (indirecto) da presença de uma formiga que transporta comida. Através deste mecanismo indirecto de informação (feedback positivo) as formigas conseguem colaborar na recolha de alimentos de uma dada fonte de comida. Experiências feitas evidenciam que as formigas conseguem através deste mesmo mecanismo seleccionar o caminho mais curto entre a fonte de alimentos e o ninho, mesmo na presença de obstáculos variados . Esta característica, por sua vez, faz com que modelos que simulam colónias de formigas sejam utilizados para determinar configurações óptimas de, por exemplo, circuitos impressos contendo vários milhares de transistores. Por sua vez, sabe-se que uma dada colónia de formigas consegue explorar as fontes de comida sequencialmente, começando pela fonte que está mais perto e acabando na que está mais longe. No entanto, quando colocadas perante o aparente "dilema" de optar (ou não) por uma dada fonte de comida quando lhes são facultadas 2 fontes distintas mas para todos os efeitos equivalentes (à mesma distância e sem obstáculos), as formigas tipicamente optam por consumir em bloco uma fonte de comida de cada vez. Para um número considerável de espécies, nem sempre a fonte com mais comida é a escolhida preferencialmente. A explicação para "uma fonte de cada vez" é hoje aceite como uma característica evolutiva da espécie, pois um trilho composto de muitas formigas é mais resistente a condições adversas e/ou a inimigos. Já encontrar uma razão para que as formigas nem sempre optem pela fonte de comida mais bem recheada não se deve a nenhuma particularidade evolutiva, mas sim a uma consequência do efeito não-linear que o "feedback positivo" exerce na dinâmica das formigas. FORMIGAS - SIMULAÇÃO -------- No elenco das acções simples que as formigas executam, consta a procura incessante e aleatória de comida com o intuito de ser transportada para o ninho. Ao fazê-lo cheiram também a possível presença de feromonas, substância que elas próprias libertam ao longo do trajecto que efectuam ao transportar a comida para o ninho. Com efeito, uma vez encontrada comida, quer por acaso quer guiadas pelo olfacto, as formigas apanham um pedaço de comida que transportam de imediato para o ninho, ele próprio localizado por olfacto. A simulação consegue reproduzir a capacidade das colónias de formigas de explorarem fontes de comida sequencialmente, começando pela que está mais perto e não pela que contém mais comida, uma característica associada ao modo aleatório de procurar comida por parte das formigas. COMO USAR ESTA SIMULAÇÃO ------------------------ Quando se prime o botão Preparar é criado um ninho de formigas (em azul com uma "fonte de formigas" ou "orifício" cor-de-laranja, no centro do ecrã). Para introduzir alimento na janela de visualização, deverá utilizar o botão "depositar-comida" onde, através da posição escolhida pelo ponteiro do rato, poderá colocar a comida numa posição específica. A forma da migalha depositada pode ser escolhida entre duas opções: regular ou aleatória. No primeiro caso, a migalha tem uma forma circular possuindo mais comida na região central e menos nas regiões periféricas. No segundo caso, a distribuição de comida é aleatória dentro de circulo com raio igual ao raio da migalha-regular. A escolha da cor da migalha a depositar pode ser seleccionada através de uma caixa de opções denominada por cor-migalha. O número de formigas que estão inicialmente no ninho é pré-determinado pelo slider correspondente. Através das caixa de opções do canto superior direito, poderá escolher a inteligência das formigas, sendo esta representativa do alcance olfactivo. A taxa de evaporação das feromonas permite-nos controlar quanto tempo (medido relativamente à escala de tics discretos do relógio da simulação) é que as feromonas persistem com cheiro activo, sendo que existe uma difusão residual das feromonas para a sua vizinhança imediata. Com o slider "taxa-de-difusão-feromonas" poderá alterar este parametro. Criado o cenário inicial com o botão "Preparar", é tempo de accionar o botão "Executar", que funciona como um botão de PLAY e PAUSE sequencial. O consumo de comida pelas formigas em cada fonte pode ser observado no gráfico, em que linhas com a cor de cada fonte evoluem à medida que o tempo passa. Tem à sua disposição um interruptor que lhe permite ligar/desligar o traçado de um gráfico, com o intuito de acelerar a simulação. Depois de executar uma simulação, pode sempre repôr (através de um botão com o mesmo nome) a distribuição das migalhas iniciais, sendo possível estudar a variação de diversos parâmetros com a mesma configuração de alimento. Gráficos: --------- Tem à sua disposição um interruptor que lhe permite activar/desligar o traçado de um gráfico que indica a quantidade de comida existente em cada fonte como uma função do tempo. Quando desligado, a simulação é executada mais rapidamente. QUESTÕES: --------- 1. Experimente primeiro a simulação com apenas uma fonte de comida. Estude o que sucede variando quer o número de formigas quer a taxa de evaporação das feromonas, mantendo constante, em 50%, a taxa de difusão de feromonas. Para um dado valor fixo da taxa de evaporação, qual o valor crítico a partir do qual se consegue um trilho estável de formigas ? Quantas simulações efectuou ao tentar encontrar o referido valor crítico ? 2. Para um mesmo número de fontes de comida e taxa de evaporação de feromonas, e para dimensões da colónia de formigas diferentes mas sempre superiores ao valor crítico, nota alguma diferença no comportamento da colónia ? 3. Modifique o programa de forma a colocar 2 fontes de comida à mesma distância do ninho. Que comportamento observa ? Na realidade, as formigas tipicamente optam por consumir em bloco uma fonte de comida de cada vez. Em particular, para um número considerável de espécies, nem sempre a fonte com mais comida é a escolhida preferencialmente. A explicação para "uma fonte de cada vez" é hoje aceite como uma consequência evolutiva da espécie, pois um trilho composto de muitas formigas é mais resistente a condições adversas e/ou a inimigos (o mesmo argumento serve, por exemplo, para as manadas de zebras que decidem atravessar um rio infestado de crocodilos). Mas consegue encontrar uma razão para que as formigas nem sempre optem pela fonte de comida mais bem recheada ? E consegue constatar este comportamento nesta simulação ? 4. Dado que a caixa onde podemos pré-definir a inteligência de cada formiga faz com que na prática modifiquemos o seu alcance olfactivo (inteligência baixa => alcance = 0 , inteligência média => alcance = 1 e inteligência alta => alcance = 7), que espera obter se efectuar simulações com inteligência baixa? 5. Repita a questão 3 pre-definindo a inteligência de cada formiga como "alta". Que alteração (se alguma) constata no comportamento das formigas? 6. Face aos resultados das questões 3, 4 e 5, qual o nível de inteligência que atribui como mais realista para as formigas? VARIANTES: ----------- 1. Consegue estabelecer relações ou interdependências entre os diferentes parâmetros disponibilizados no interface de simulação, nomeadamente, taxas de evaporação e de difusão de feromonas, número de formigas e nível de inteligência? 2. Que espera que aconteça quando modifica o horizonte olfactivo de uma formiga ? Experimente. 3. E no que concerne à identificação do ninho? Consegue imaginar outros critérios que possam ser usados alternativamente? TÓPICO AVANÇADO: 4. Modifique o programa original por forma a permitir que a concentração de (por exemplo) glucose na comida varie. Em conformidade, faça com que a formiga deposite feromonas proporcionalmente à concentração de glucose da comida que encontrar. Se repetir as simulações com esta nova versão, verificará que as formigas conseguem detectar qual das fontes de comida tem maior concentração, o que contradiz a evidência empírica dobre as formigas em geral e sobre a Lasius Niger em particular (a formiga negra dos jardins) que não conseguem efectuar tal distinção. Assim sendo, qual dos argumentos acima está errado? Consegue transformar estas super-formigas em formigas normais? @#$#@#$#@ default true 0 Polygon -7566196 true true 150 5 40 250 150 205 260 250 ant true 0 Circle -7566196 true true 110 215 80 Circle -7566196 true true 110 145 80 Circle -7566196 true true 110 75 80 Line -7566196 true 150 100 80 30 Line -7566196 true 150 100 220 30 @#$#@#$#@ NetLogo 2.0.0 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@