Un mondo di formiche

Simuliamo l'approvvigionamento di insetti. Il territorio che essi popolano è più o meno ricco di cibo ivi localizzato casualmente.
Non pretendiamo di effettuare una simulazione effettiva ma vogliamo solo presentare in modo semplice lo spirito con cui nasce StarLogo: la spinta al "pensiero decentralizzato". La nostra cultura ci porta a considerare l'ordine come risultato dell'azione di un leader e invece esso può derivare da semplici interazioni e accordi tra gli appartenenti ad un intorno limitato. L'armonia di uno stormo in volo non è conseguente al fatto che esiste un "capo" seguito da tutti. Per passare ad un classico esempio informatico, se i dischi della torre di Hanoi avessero le proprie zampe potrebbero concordare tra loro un comportamento che, da un punto di vista globale, sarebbe identico alla migliore soluzione eseguita dal monaco.

Tornando alla nostra pseudo-simulazione scriviamo ask-patches [if (random 100) < 25 [setpc green]]

Poiché la funzione random assume un valore diverso per ogni patch, il risultato è un ambiente in cui il verde si estende per circa un quarto. Riempiamo questo mondo con crt 100 mentre nella finestra delle tartarughe abbiamo definito le due procedure

to passeggia
rt random 30 lt random 30
fd 1
end

to mangia
passeggia
if pc = green [stamp 0]
mangia
end

Creiamo il bottone "mangia".
Le nostre fameliche formiche non impiegano molto tempo a distruggere le risorse a disposizione. E continuano a vagare per lo schermo. La nostra simulazione è molto approssimativa. Dobbiamo migliorarla. Facciamo allora nascere le formiche con una energia vitale che diminuisce se camminano senza trovare cibo fino a causarne la morte, mentre aumenta se riescono a mangiare.

turtles-own [energia]
to inizia 
set energia 100
end
 
to passeggia
rt random 30 lt random 30
fd 1
set energia energia - 1
if energia = 0 [die]
end


to mangia
passeggia
if pc = green [stamp 0 set energia energia + 2]
mangia
end

Adesso le nostre formiche muoiono lasciando a volte qualche germoglio verde sullo schermo. Vogliamo pensare che si nutrono di un'erba particolare tale che quando raggiungono una soglia di energia esse si dividono in due tartarughe con l'energia vitale della nascita.

turtles-own [energia]

to cercacibo
passeggia
if pc = green [mangia]
cercacibo
end

to mangia
set energia energia + 2
if energia = 110 [set energia 100 hatch []]
end

to passeggia
rt random 30 lt random 30
fd 1
set energia energia - 1
if energia = 0 [die]
end

to inizia 
set energia 100
end

to inizia
ca
crt 100
ask-patches [if (random 100) < 25 [setpc green]] 
ask-turtles[inizia]
end

Testiamo la simulazione con i comandi inizia e cercacibo . Ancora le nostre formiche muoiono nel mondo a disposizione. Dobbiamo inventare un meccanismo che consenta la riproduzione del cibo. Allo scopo ricordiamoci del "gioco della vita". Il comando "pc-towards angolo distanza", usato dalle tartarughe riporta ad ognuna il colore del patch inclinato secondo "angolo" e posto alla distanza "distanza". Il comando "pc-at xqd yqd" usato dalle tartarughe riporta ad ognuna il colore del patch distante da essa xqd nella direzione x e yqd nella direzione y.


to inizia
ca
crt 300
 ask-patches [if (random 100) < 25 [setpc green]] 
ask-turtles[inizia]
end

to continua
ask-turtles[cercacibo]
ask-patches[if (((pc-towards 0 1) = green  or (pc-at 1 1 ) = green)
             and (random 100 ) < 10 )
            [setpc green] 
           ]
continua
end
turtles-own [energia]

to cercacibo
passeggia
if pc = green [mangia]
end

to mangia
set energia energia + 2
stamp 0
if energia = 150 [set energia 100 hatch []]
end

to passeggia
rt random 30 lt random 30
fd 1
set energia energia - 1
if energia = 0 [die]
if energia < 0 [die]
end

to inizia 
set energia 100
end

Mettiamo in movimento il mondo con inizia e continua e ci riteniamo soddisfatti della situazione di equilibrio trovata.