Wa-Tor rappresenta un sistema di simulazione dei sistemi dinamici utilizzato in logistica, che si presta ad una presentazione grafica accattivante.
“Tanti tanti anni fa, in una galassia lontana lontana…” apparve uno strano pianeta toroidale, a forma di ciambella con un buco al centro.
L’oggetto celeste era ricoperto da un vastissimo oceano, in cui trovavano dimora due specie di animali: una razza simile agli squali, carnivori e predatori, ed una razza di miti pesciolini.
Ovviamente gli squali si nutrivano di pesciolini, ed entrambi avevano un determinato ciclo di riproduzione. Se il ciclo di riproduzione dei pesci fosse stato troppo lento, gli squali sarebbero morti di inedia. D’altra parte, se gli squali si fossero riprodotti troppo in fretta, o fossero stati troppo voraci, avrebbero alla fine divorato tutti i pesciolini presenti, e sarebbero, nuovamente, morti di inedia.
La Natura, nella sua infinita saggezza, aveva trovato un rapporto che legava il numero di squali e di pesci presenti nell’oceano, i loro cicli riproduttivi, il loro tempo di vita, in modo da garantire un equilibrio alla vita di entrambe le specie.
L’oggetto celeste si chiamava Wa-Tor, contrazione di Water, acqua, e Torus, toroide.
In questo articolo vedremo come sia possibile utilizzare un semplice Raspberry PI per eseguire una serie di simulazioni relative all’ambiente Wa-Tor, e valutarne gli effetti.
Le origini
Nella puntata di Dicembre 1984 di Scientific American, sulla rubrica intitolata Recreational Mathematics, apparve l’articolo “Computer and Recreations: Sharks and fish Wage an ecological War on the toroidal planet Wa-Tor”, a firma di A.K. Dewdney.
L’equilibrio di questo ecosistema è molto delicato: le popolazioni di due specie possono seguire cicli molto diversi a seconda dei parametri dati (come i cicli di riproduzione e il periodo di tempo in cui uno squalo deve mangiare per evitare la fame) nonché le posizioni di partenza di ciascuno essendo. Può passare da entrambe le specie in pericolo all’abbondanza di una o di entrambe.
Quando le prede sono numerose, i predatori possono riprodursi rapidamente. Ma questo aumento a sua volta aumenta il numero di prede cacciate e la popolazione delle prede diminuisce. Quando la preda diventa più rara, i predatori iniziano a morire di fame e muoiono di fame, diminuendo la loro popolazione e allentando la pressione di caccia sulla preda. La preda (e nel tempo il predatore) può quindi tornare a riprodursi rapidamente man mano che il ciclo si ripete.
Wa-Tor viene solitamente implementato come una griglia bidimensionale con tre elementi distintivi: uno per i pesci, uno per gli squali e uno per l’acqua vuota. Se una creatura si muove oltre il bordo della griglia, riappare sul lato opposto. Gli squali sono predatori e mangiano il pesce. Sia gli squali che i pesci vivono, si muovono, si riproducono e muoiono in Wa-Tor secondo le semplici regole definite di seguito. Da queste semplici regole, si può vedere come derivare un comportamento emergente complesso.
La caratteristica del toroide è la continuità sui due assi: è possibile tagliare il toro lungo un asse, ottenendo un cilindro, e lungo l’altezza del cilindro, ottenendo un piano (vedere l’immagine)
Le regole del moto sono semplici: un pesce o uno squalo che escono dal lato destro dello schermo rientra dal lato sinistro, e se esce dal lato supreiode rientra dal lato inferiore, come appare evidente dall’immagine. Ovviamente ciascuna “casella” può essere occupatea sclusivamente da uno squalo o da un pesce. O restare vuoto.
L’evoluzione
“Il tempo passa in salti discreti, che chiameremo crononi. Durante ogni cronone, un pesce o uno squalo può spostarsi a nord, est, sud o ovest in un punto adiacente, purché il punto non sia già occupato da un membro della sua stessa specie. Il generatore di numeri casuali effettua la scelta effettiva. Per un pesce la scelta è semplice: seleziona un punto adiacente non occupato a caso e spostati lì. Se tutti e quattro i punti adiacenti sono occupati, il pesce non si muove. Poiché la caccia al pesce ha la priorità sul semplice movimento, le regole per uno squalo sono più complicate: dai punti adiacenti occupati dal pesce, selezionane uno a caso, spostati lì e divora il pesce.Se non ci sono pesci nelle vicinanze, lo squalo si muove proprio come fa un pesce, evitando i suoi compagni squali.”
Per i pesci
- Ad ogni cronone, un pesce si sposta casualmente in una delle caselle adiacenti non occupate. Se non ci sono caselle libere, non ha luogo alcun movimento.
- Una volta che un pesce è sopravvissuto a un certo numero di crononi, può riprodursi. Questo viene fatto mentre si sposta in una piazza vicina, lasciando dietro di sé un nuovo pesce nella sua vecchia posizione. Anche il suo tempo di riproduzione viene azzerato.
Per gli squali
- Ad ogni cronone, uno squalo si sposta casualmente in una casella adiacente occupata da un pesce. Se non ce ne sono, lo squalo si sposta in una casella non occupata adiacente casuale. Se non ci sono caselle libere, non ha luogo alcun movimento.
- Ad ogni cronone, ogni squalo è privato di un’unità di energia.
- Quando raggiunge l’energia zero, uno squalo muore.
- Se uno squalo si sposta in una casella occupata da un pesce, mangia il pesce e guadagna una certa quantità di energia.
- Una volta che uno squalo è sopravvissuto a un certo numero di crononi, può riprodursi esattamente allo stesso modo del pesce.
Risultati possibili
A lungo termine ci sono tre possibili scenari in Wa-Tor:
- Un perfetto equilibrio tra pesci e squali, che aumentano e diminuiscono ma non si estinguono mai.
- Scomparsa degli squali.
- Estinzione di entrambe le specie.
Il primo scenario può essere molto difficile da ottenere, in cui si raggiunge una sorta di equilibrio in cui le due popolazioni fluttuano periodicamente. Nella maggior parte dei casi, la quantità di pesce è ridotta a uno stato quasi in pericolo, quindi la popolazione di squali diminuisce rapidamente a causa della carenza di cibo. Ciò consente alla popolazione ittica di crescere di nuovo fino a quando la popolazione di squali non può soddisfare questa crescita.
L’estinzione di entrambi gli animali avviene quando gli squali eccedono di numero al punto da mangiare tutto il pesce. Poiché i pesci erano l’unica fonte di cibo per gli squali, inevitabilmente moriranno di fame.
Al contrario, se il numero iniziale di pesci è basso o gli squali hanno un periodo di fame molto breve, si verifica il secondo scenario. In questo caso gli squali si estingueranno, lasciando il campo aperto ai pesci.
Implementare la simulazione
In questo modo diventa abbastanza semplice gestire la “scacchiera” equivalente al toro e visualizzare l’ecosistema dinamico. Basterà definire i 5 parametri della simulazione allo stato iniziale (numero pesci, numero squali, tempo di procreazione dei pesci e degli squali, tempo inedia degli squali), e creare una routine che ad ogni “cronone” (istante di tempo) controlli ciascuno degli elementi presenti e ne gestisca gli spostamenti. Per i più curiosi, si tratta di una applicazione particolare dell’equazione logistica di Volterra in un sistema dinamico caotico.
Abbiamo implementato le regole della simulazione in Pascal, utilizzando la piattaforma Lazarus Free Pascal presentata in un precedente articolo. In questo modo potemo portare il codice sul nostro Raspberry PI, sul PC, su MAC, sotto Windows o Android senza problemi. L’unica costante da modificare riguarda il numero di righe e colonne che rappresenta il mondo di Wa-Tor, quindi si ricompila e si lancia la simulazione da riga di comando, immettendo i cinque parametri necessari.
Come al solito, per i lettori più curiosi o intraprendenti il codice è disponibile su GitHub. Ci aspettiamo di vedere nuove rappresentazioni della simulazione in alta risoluzione da voi!
Join our groups onTelegram…