Neste capítulo vamos mostrar técnicas de terminar a execução do código em NetLogo, assim como a capacidade que as turtles têm para desenhar a trajectória por onde passaram. Para o ilustrar vamos usar o modelo da marcha aleatória.
 
Matematicamente a marcha aleatória é a formalização da ideia intuitiva de avançar passo a passo, cada um numa direcção ao acaso. Por esta razão a marcha aleatória é também conhecida por passeio do bêbado.
A marcha aleatória é um processo probabilístico simples com aplicações em diversos campos, que vão desde:
Com este programa pretendemos estudar a marcha aleatória numa rede regular em dimensão um ou dois. O guião das turtles é o seguinte:
Uma das características principais e mais surpreendentes da marcha aleatória é a de que a distância da partícula ao ponto de partida é, em média, proporcional à raiz quadrada do tempo: d = k√t.
Esta relação está também presente nos fenómenos de difusão de partículas em fluidos. A título de curiosidade mencionamos que Einstein (no ano milagroso de 1905) utilizou a teoria cinética de fluidos para calcular a constante de proporcionalidade entre o tempo e a distância quadrática percorrida, em termos de constantes fundamentais das partículas e do fluido. Em 1908 a relação de Einstein permitiu a Perrin determinar experimentalmente o número de Avogadro.
O leitor é agora convidado a interagir com este modelo através do seguinte applet:
Para correr este modelo no ambiente NetLogo, basta seguir o link marcha-aleatoria, se tiver instalado o software
Para iniciar o programa de marcha aleatória, deve em primeiro lugar seleccionar o numero-de-abelhas que vão executar as trajectórias partindo da origem. Pode também seleccionar a dimensao da rede, assim como o tamanho-do-lado.
Se quiser que o programa pare quando uma das trajectórias atingir uma determinada distância limite, deve colocar o interruptor limite? em on e definir o raio-limite da circunferência. Caso contrário, se quiser que as trajectórias continuem indefinidamente, basta colocar o interruptor limite? em off.
Depois de ter escolhido todos estes parâmetros, deve premir preparar e depois executar para começar / parar o procedimento da marcha aleatória.
Comecemos por experimentar o modelo numa rede de dimensao 2, com tamanho-do-lado = 1, com raio-limite = 200 (o raio-limite destina-se a evitar o problema da forma toroidal do mundo, o qual implica que não haja pontos tão distantes quanto quisermos) e para uma abelha (esquerda) ou cem abelhas (direita):


Para uma abelha não é perceptível a existência de qualquer padrão, porém quando tomamos muitas abelhas, para fazermos a média da distância à origem em função do tempo, emerge um padrão: –a distância média percorrida é proporcional à raiz quadrada do tempo. O mesmo comportamento também pode ser observado em dimensao 1, mantendo todos os outros parâmetros inalterados:


Matematicamente, prova-se que esta relação é válida para qualquer dimensão.
Para observarmos com mais detalhe a trajectória das abelhas, podemos mudar o tamanho-do-lado da rede para 5, por exemplo, e tomar um numero-de-abelhas pequeno, 20 por exemplo, para que o écran não fique demasiado apinhado de abelhas:
 
Uma das propriedades curiosas da marcha aleatória em dimensão 1 ou 2, é a de que todos os pontos da rede são visitados mais cedo ou mais tarde. O mesmo já não acontece em dimensão 3, ou superior: –um bêbado encontra sempre o caminho para casa, mas um pássaro bêbado geralmente nunca mais encontra o ninho!
O modelo está dividido nas seguintes secções:
| tempo | contém o número de iterações já decorridas | 
| media | contém a distância quadrática média das turtles à origem | 
| turtles: distancia | propriedade de cada turtle que contem a distância desta à origem | 
| preparar | limpa e inicia todas as variáveis, cria e inicia as turtles. | 
| executar | itera as regras de movimento das turtles, actualiza as variáveis, desenha as variáveis globais na janela gráfica e pára o programa quando uma das turtles cruza a fronteira. | 
globals [ tempo media ]
turtles-own [ distancia ]
to preparar
    ca
    set tempo 0
    create-custom-turtles numero-de-abelhas [
        set heading 90
        set shape "bee"
        set size 15
        pd
    ]
    if limite? [ 
        ask patches with [ raio-limite = int distancexy 0 0 ][ set pcolor 3 ]
    ]
end
to executar 
    set media 0
    ask turtles [
        ifelse dimensao = 1 [
            rt 180 * (random 2)
        ][
            rt 90 * (random 4)
        ]
        fd tamanho-do-lado
        set distancia distancexy 0 0
        set media media + distancia * distancia
        if limite? and distancia >= raio-limite [
            die stop
        ]
    ]
    set tempo tempo + 1
    set media media / numero-de-abelhas
    ifelse count turtles = numero-de-abelhas [
        plot media
    ][stop]
end
Vejamos em detalhe cada componente lógica do código:
A primeira declaração indica a existência de duas variáveis globais (tempo e media).
globals [ tempo media ]
A variável tempo conta o número de ciclos desde o começo do programa, enquanto que a variável media contem a distância quadrática média das turtles à origem.
A segunda declaração indica a existência de uma variável global para cada turtle:
turtles-own [ distancia ]
a qual contem a distância desta à origem.
to preparar
    ca
    set tempo 0
    create-custom-turtles numero-de-abelhas [
        set heading 90
        set shape "bee"
        set size 15
        pd
    ]
    if limite? [ 
        ask patches with [ raio-limite = int distancexy 0 0 ][ set pcolor 3 ]
    ]
end
A rotina preparar, tem o objectivo de preparar a simulação, ou seja, limpa resultados anteriores e devolve às variáveis os valores iniciais.
A instrução create-custom-turtles numero-de-abelhas [ comandos ] cria numero-de-abelhas localizadas na origem, cada uma com a sua cor e com as condições iniciais impostas pelo comando set. O comando pd (o mesmo que pen-down) faz com que cada turtle passe a desenhar a sua trajectória com a cor da turtle.
to executar 
    set media 0
    ask turtles [
        ifelse dimensao = 1 [
            rt 180 * (random 2)
        ][
            rt 90 * (random 4)
        ]
        fd tamanho-do-lado
        set distancia distancexy 0 0
        set media media + distancia * distancia
        if limite? and distancia >= raio-limite [
            die stop
        ]
    ]
    set tempo tempo + 1
    set media media / numero-de-abelhas
    ifelse count turtles = numero-de-abelhas [
        plot media
    ][stop]
end
A rotina executar parte das condições iniciais e modifica-as através da aplicação sucessiva de um conjunto de regras.
O comando die retira de circulação a turtle em questão. O primeiro comando stop pára a execução da instrução ask turtles, mas o programa continua enquanto houver turtles que tenham sobrevivido (que não tenham cruzado a fronteira). O segundo comando stop termina a execução do programa, pois não está dentro de uma instrução ask, nem dentro de um ciclo while.
Usamos o comando stop para parar a execução do programa, pois uma vez que uma turtle tenha cruzado a fronteira, deixa de fazer sentido calcular distâncias, pois a turtle dá a volta ao mundo e aparece do outro lado, ficando outra vez mais perto da origem.