globals [ arvores-iniciais ;; número de patches verdes iniciais arvores-queimadas estado ;; variável de controlo para as simulações contínuas tempo-de-simulacao iter-combustao ;; variavel que indica o número de iterações desde a ignição de uma linha de fogo até à correspondente extinção ] breeds [ fogos cinzas ] to limpa clear-graphics ask patches with [ abs pxcor < (screen-edge-x - ceiling intensidade) and abs pycor < (screen-edge-y - ceiling intensidade) ] [ if (random-float 100) < densidade [ set pcolor green ] ] set arvores-iniciais count patches with [pcolor = green] set arvores-queimadas 0 end to preparar ca limpa end to executar ask fogos [ without-interruption ; sincronização - impede que o mesmo "patch" pegue fogo mais que uma vez. [ ask neighbors4 with [ pcolor = green ] [ inflamar ] if vento? ; Se o vento estiver "ligado" [ ask patch-at-heading-and-distance direccao intensidade ;;para todas as patches a uma dist. "intensidade" [ if pcolor = green [ inflamar ] ] ] ] set breed cinzas ;;passa a brasa->cinza a turtle do tipo fogos ] fade-cinzas ;;escurece progressivamente as turtles do tipo cinza end to inflamar sprout 1 ;;cria uma turtle nesta patch [ set breed fogos ;;turtle recem-criada torna-se da casta fogos set color red ] set pcolor black set arvores-queimadas arvores-queimadas + 1 end to fade-cinzas ask cinzas [ set color color - 0.3 ;; torna o vermelho mais escuro if color < red - 4 ;; quase preto [ stamp color die ] ] end to incendiar locals [ botao ] set botao false ;que indica se o rato já foi utilizado if mouse-down? ;O botão do rato estiver premido? [ while [ mouse-down? ] ;enquanto estiver, marcamos novos pontos de incèndio [ ask patch-at mouse-xcor mouse-ycor [ inflamar ] display ; provoca a actualização imediata da janela gráfica ] set botao true ;o botão do rato foi utilizado, portanto indicamos isso ] if botao ;verificar se o utilizador já usou o rato [ stop ] end to incendiar_linha ask patches with [pxcor = (ceiling intensidade - screen-edge-x) AND abs pycor < (screen-edge-y - ceiling intensidade)] [ inflamar ] end to automatico locals [ den_max ;;densidade maxima den_min ;;densidade minima increm ;;incremento ] reset-timer ;;coloca o contador temporal a zero set tempo-de-simulacao timer ;; atribui o tempo dado pela primitiva "timer" à variavel global tempo-de-simulação set den_min densidade_min ;; atribui à variavel local den_min o valor escolhido pelo utilizador ;;através do slider do interface gráfico. O utilizador nunca mais poderá alterar esta variável set den_max densidade_max set increm incremento ;; ...o mesmo acontecendo para as variaveis den_max e increm if den_min + increm > den_max ;;se os parâmetros foram "mal escolhidos" ... [ user-message "Valores para a densidade minima, maxima ou incremento inconsistentes." ] set-current-plot "tempo-combustao" ;;o gráfico "activo" passa a ser o "tempo de combustão" clear-plot ;;limpa o gráfico set-plot-x-range den_min den_max ;;define o valor maximo e minimo do eixo das abcissas set-current-plot "percent" ;;o gráfico "activo" passa a ser o "percent" clear-plot ;;limpa o gráfico set-plot-x-range den_min den_max ;;definição dos eixos do plot "percent" set-plot-y-range 0 100 set estado ceiling ((den_max - den_min) / increm) ;;definição inicial da variavel de controlo set densidade den_min ;;primeiro valor para a densidade while [ estado > 0 ] [ limpa ;;limpa tudo, alem de inicializar a rede com a densidade ;;registada na variavel "densidade" set tempo-de-simulacao timer incendiar_linha ;;cria uma linha de fogo no lado esquerdo da rede set iter-combustao 0 ;; coloca a zero o numero de iterações para esta densidade ;; será esta variavel que vai produzir o grafico "tempo-de-combustao" while [ any? fogos ] ;;enquanto existir turtles da casta fogos [ executar ;;faz uma iteração set iter-combustao iter-combustao + 1 ;;incrementa 1 no contador de iterações set tempo-de-simulacao timer ;;faz update da variavel tempo-de-simulação ] set densidade densidade + increm ;; muda a densidade de acordo com a escolha do ;;utilizador plotxy densidade (arvores-queimadas / arvores-iniciais) * 100 ;; regista no grafico "percent" um novo ponto set-current-plot "tempo-combustao" ;; muda de gráfico plotxy densidade iter-combustao ;; regista no grafico "tempo-de-combustao" um novo ponto set-current-plot "percent" ;; volta a mudar de gráfico set estado estado - 1 ;; diminui um valor às iterações em falta set tempo-de-simulacao timer ;; faz update da variavel tempo-de-simulação ] 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 205 10 556 382 170 170 1.0 0 10 1 1 1 CC-WINDOW 10 394 204 515 Command Center MONITOR 12 132 184 181 percentagem queimada (arvores-queimadas / arvores-iniciais)\n* 100 1 1 SLIDER 5 82 190 115 densidade densidade 1.0 100 61.64 0.01 1 % BUTTON 106 35 195 71 executar executar T 1 T OBSERVER NIL BUTTON 6 34 98 70 preparar preparar NIL 1 T OBSERVER T SWITCH 8 191 111 224 vento? vento? 0 1 -1000 SLIDER 8 232 180 265 intensidade intensidade 0 10 10.0 0.1 1 NIL SLIDER 8 278 180 311 direccao direccao 0 359 268 1 1 graus BUTTON 111 191 204 224 incendiar incendiar T 1 T OBSERVER T BUTTON 24 316 152 349 incendiar linha incendiar_linha NIL 1 T OBSERVER T BUTTON 15 565 233 617 iniciar simulacao automatica automatico NIL 1 T OBSERVER NIL PLOT 644 305 982 572 percent densidade percentagem queimada 0.0 100.0 0.0 100.0 false false PENS "default" 1.0 0 -16777012 true SLIDER 279 456 456 489 densidade_min densidade_min 1 99 49.0 0.01 1 NIL SLIDER 279 489 456 522 densidade_max densidade_max 0 100 74.0 0.01 1 NIL SLIDER 279 523 456 556 incremento incremento 0.01 10 3.16 0.01 1 NIL MONITOR 459 508 629 557 iteracões para o final estado 0 1 MONITOR 459 455 628 504 tempo de simulacão (s) tempo-de-simulacao 0 1 TEXTBOX 16 522 259 564 Simulação com variação automática da variável densidade PLOT 643 35 979 296 tempo-combustao densidade tempo 0.0 100.0 0.0 100.0 true false @#$#@#$#@ Introdução ----------- Este modelo simula a propagação de um fogo florestal. O fogo começa numa das orlas da floresta e propaga-se às árvores vizinhas. Na versão sem vento (percolação de sítios) o fogo propaga-se às quatro árvores vizinhas, a norte, sul, leste e oeste, da árvore a arder. Nesta versão, o fogo só se pode propagar numa direcção se existir uma árvore verde nessa direcção. O fogo não pode saltar sobre sítios sem árvores e os sítios vazios bloqueiam a propagação do fogo nessas direcções. A probabilidade do fogo atingir a orla direita da floresta depende criticamente da densidade de árvores na floresta. Para florestas densas o fogo queima rápidamente quase todas as árvores. Para florestas com baixa densidade de árvores, o fogo extingue-se rápidamente queimando uma pequena fracção das árvores. Existe uma densidade crítica para a qual o fogo se propaga pela primeira vez de uma orla á outra da floresta. Para esta densidade de árvores o tempo de propagação do fogo diverge(numa floresta infinita). O efeito do vento pode ser incluído alterando as regras de propagação: Uma árvore a arder propaga o fogo não só ás árvores vizinhas, mas também ás árvores que estão a uma distância igual a 'intensidade' do vento, na direcção deste. Utilização ----------- A interface gráfica do modelo é constituída por duas secções. A primeira no lado esquerdo permite correr simulações individuais. Basta premir o botão "preparar", criar focos de incêndio com botão "incendiar" e iniciar a simulação com o botão "executar". Para escolher a densidade de árvores, deve utilizar o slider. O botão incendiar linha, inicia uma frente contínua de fogo no lado esquerdo da caixa de simulação Para estudar a transição de percolação, é útil correr simulações para diferentes valores da densidade de árvores. Para tal,na secção do lado direito, é possível regular a densidade mínima e máxima de uma sequência de simulações, assim como o incremento dado à densidade no final de cada simulação. No início de cada simulação, é incendiada uma linha de fogo, sendo os resultados finais registados nos dois gráficos à direita. O gráfico do canto superior direito corresponde à dependência da duração do fogo na densidade florestal, e o segundo corresponde à percentagem de árvores queimadas em função da densidade. Nas simulações contínuas, o tempo de simulação é longo. Para acelerar o processo, o netlogo permite desligar a actualização da janela de visualização. Basta carregar no botão on/off junto do botão more. Para incluir o efeito do vento, existem três botões: Um selector VENTO?, que permite ligar e desligar a acção do vento; um slider que controla a direcção do vento (0 graus é norte, 90 graus é este, 180 graus é sul, e 270 graus é oeste); e um cursor que controla a intensidade. Questões --------- 1. a) Corra simulações para uma densidade de árvores de 0.55 usando várias condições iniciais. O que observa? b) Repita o procedimento para uma densidade de 0.75. Anote as suas conclusões. c) Compare a duração dos fogos para as duas densidades. 2. Corra 10 simulações para uma densidade de árvores à volta da densidade crítica, 59%. Calcule a fracção dos fogos que se propagam a toda a floresta. 3.a)Como varia a densidade crítica com a intensidade do vento? b)E com a direccao deste? 4. Finalmente, volte a considerar o modelo sem vento e corra simulações automáticas para uma gama de densidades à volta da densidade crítica. Identifique a transição de percolação. 5. Na transição (e só na transição) a duração do fogo diverge para uma floresta infinita. Porque? 6. Observe a estrutura na região à volta de 0.59. Compare com as estruturas obtidas para densidades muito acima do limiar de percolação? Variantes e Extensões ---------------------- Considere uma variante do modelo (sem vento) onde o fogo se propaga a 8 vizinhos (4 N,S,E e W e os 4 nas diagonais). Compare os resultados com a versão mais simples. Escreva o código para o modelo mais simples sem usar turtles. O programa corre muito mais devagar. Porquê ? @#$#@#$#@ default true 0 Polygon -7566196 true true 150 5 40 250 150 205 260 250 @#$#@#$#@ NetLogo 2.0.0 @#$#@#$#@ set density 60 setup repeat 180 [ go ] @#$#@#$#@ @#$#@#$#@