Agora escreveremos o procedimento "compete-for-space" Primeiramente, diremos: se houver qualquer... teremos que pedir às turtles que façam isto Peça às turtles: se houver quaisquer outras turtles aqui... Estas palavras especiais se tornarão familiares à medida que faz isto. Se houver quaisquer outras turtles aqui, mate-as. Neste contexto, turtle significa que... ...se você estiver em algum lugar com outra turtle, então você morre. Esta é a forma extrema de super população. Agora precisamos escrever um procedimento para uma condição em que turtles morrerão, devido ao excesso populacional. Precisamos de um parâmetro a definir, associado ao excesso populacional. Vamos chamar este parâmetro de "space" Eu adicionei uma barra chamada "space". Sabemos que ao redor de todas as turtles há uma vizinhança de oito espaços. Norte, Sul, Leste, Oeste, Nordeste, Noroeste, etc. Fizemos uma barra com valores de 1 a 8. E eu pedirei... Podemos facilmente contar as turtles nos vizinhos. Então direi: Se a contagem de turtles nos vizinhos for oito a menos que a contagem de turtles. Isto nos dirá o número de espaços vazios. Se os espaços vazios forem menos que a quantidade de espaços que uma turtle precisa para viver então a turtle precisa morrer. Acabamos de criar uma condição que exige que turtles morram... ...se houver menos espaços vazios que elas precisam para viver. Nós podemos definir o espaço com qualquer número de 1 a 8 espaços. Obviamente, se a turtle precisa de 8 espaços para viver, então terá que ser pouco povoada. Você pode pensar nisto como um recurso que restringe o crescimento populacional. Eu farei uma anotação aqui. Restrição ao crescimento populacional. Nós devemos adicionar comentários de forma que outras pessoas possam entender nosso código. Se voltarmos a isto depois, poderemos entender o que as partes do código fazem. Agora, temos que escrever o procedimento "disperse" Este será nosso último procedimento. Para dispersar, apenas pedimos às turtles que movam para um dos patches com nenhuma turtle. Esta linguagem não é nenhum pouco óbvia. É legível em inglês, mas certamente não é fácil quando você está começando a programar. Este é um código-exemplo que você pode olhar, para lembar as palavras especiais e escrever seu código. Essencialmente, estamos falando com grupos de patches agentes, um subgrupo de patches que atendem certa condição, e não qualquer turtle aqui. Então, se um patch contiver nenhuma turtle, nós moveremos para um destes patches. Nós somente precisamos fazer isto, algo um pouco complicado. Se pedíssemos às turtles que tentem fazer isto e existisse nenhum destes patches disponível, estas turtles poderiam continuar a verificar... ...logo o código nunca terminaria. Então, precisamos acrescentar condições, e somente fazemos isto se houver patches. Apenas fazemos isto se a contagem de turtles na tela for menor ou igual a contagem de patches. É possível que tenhamos mais turtles que patches... ...e então seria inútil. Este código continuaria a rodar. Nós não saberiamos o que está acontecendo. Eu falo por experiência própria. Acho que isso deve funcionar. Vamos ver se tudo isto executa. Ainda há algumas perguntas. Nós definimos uma ampla população inicial. Estas coisas ainda mudam de cor. Vamos excluir o que eu acrescentei, e fazer uma dispersão artificial. Parece que algo está acontecendo. Não estou certo do quê. Vamos obter maior densidade... Quando dermos um passo... Se exigirmos que elas precisem de muito espaço, devemos observar menor povoamento, de fato, acontece. Com menos espaço, obtemos maior densidade. Olhe aqui, parece-me que temos um modelo aproximado. Vamos ver o que ocorre aqui quando observamos a população. Eu farei um desenho simples. Como padrão, eles definem um desenho que conta as turtles. Para que usemos esse desenho para desenhar de verdade, temos que fazer algo com o modelo. Isto acontecerá por padrão sempre que temos uma marca. A cada passo, veremos uma marca. Isto proporcionará um erro a princípio. Vamos ver que tipo de erro nos dá. Se configurarmos, e dermos um passo. Temos que usar o comando "reset ticks" ao configurar. Então, configure, Não estou certo de que é o que pretendiamos Vamos tentar iniciando com uma população menor Vamos ver se isto funciona. População inicial de 12 Estou fazendo certo? Parece-me que a função reprodução não está funcionando. Vamos descobrir o que está ocorrendo aqui. Vou inspecionar esta turtle... 320. Geração 13. Vou lhes mostrar como depuro isto... Vamos comentar este trecho, e ver o que acontece por um momento. A morte não está acontecendo porque deveriamos ter crescimento exponencial, já que desativamos morte. Há algo sobre a função "compete-for-space". Vamos comentar apenas esta parte. Estou desativando apenas a segunda regra em "compete-for-space". E estou imaginando que ainda teremos o mesmo problema. Imaginei errado. Vamos voltar e ver isto. Esta é a regra causadora de problema... Se qualquer turtle aqui morrer... Ok, vejo qual é o problema. Esta regra aqui está matando os descendentes. Porque quando eles nascem, esta regra verifica se há alguma turtle no patch ...e morrem em seguida. Preciso que os descendentes dispersem, antes que eles compitam por espaço... Então, reproduzimos e dispersamos. Em seguida, competimos por espaço. Estes programas quase nunca funcionam logo de cara. Imagino que isto funcione. O que fiz foi dizer: depois de reproduzir, dispersem... Vamos por "disperse" logo depois de "reproduce". Faz mais sentido. ...os pais da geração anterior morrem, em seguida há competição por espaço. Vamos ver se a ordem destes dois faz diferença agora. Tudo está ativado novamente. Então configuramos... próximo passo... agora temos crescimento exponencial e temos uma estabilização. Mas não estou vendo a organização,... passo, passo, passo Não é bem o que eu esperava, mas vamos tentar redefinir com mais espaço. Isto se parece mais com o que eu esperava. É como uma curva sigmóide. Vou redefinir com maior espaço. Crescimento mais lento, e maior variação. Ok, acho que o modelo... Eu diria que este modelo funciona, temos crescimento exponencial, e então uma certa estabilização. Temos um tipo de configuração fixa. Estas são as perguntas que podem surgir quando se constroem modelos. Por que aquilo funciona daquele modo? Se tivermos um procedimento de dispersão diferente provavelmente veríamos algo mais. Uma das coisas que poderia mudar é a dispersão, torná-la mais fisicamente realística. Ao invés de as turtles magicamente moverem para um patch, fazê-las migrarem da atual localização até elas encontrarem uma nova. Teria mais código, mas valeria a pena. Você poderia dar cores diferentes às famílias e assistí-las ao longo do tempo... ...um projeto engenhoso. Ok, finalmente, para preencher a lacuna. Temos um botão de Passo. O botão de Prossiga pode ser um botão de Passo com o atributo ativado para sempre. Este é um ponto importante para notar, o display não precisa necessariamente ser o mesmo que o comando, mas se você não inserir o nome do display, então o nome do comando será usado como rótulo do botão Temos um belo modelo que possui restrições. Em certas configurações de espaço, realiza um bom trabalho ao modelar crescimento exponencial e um arredondamento da capacidade de contimento.