Sei sulla pagina 1di 67

Università degli studi di Modena e Reggio Emilia

Facoltà di Scienze della Comunicazione e dell'Economia

CLS: Economia e Gestione delle Reti e dell'Innovazione

Insegnamento:
Tecniche e modelli di simulazione

Docente:
Marco Villani

SugarScape

A.A. 2006 - 2007


INDICE

1. INTRODUZIONE ---------------------------------------------------------------------------------------- - 2 -
2. IL MODELLO--------------------------------------------------------------------------------------------- - 3 -
2.1. IL MONDO ----------------------------------------------------------------------------------------------- - 4 -
2.2. GLI AGENTI --------------------------------------------------------------------------------------------- - 5 -
3. DINAMICA DEL MODELLO------------------------------------------------------------------------- - 6 -
4. IMPLEMENTAZIONE DEL MODELLO ---------------------------------------------------------- - 8 -
4.1. IMPLEMENTAZIONE DEL MONDO --------------------------------------------------------------------- - 8 -
4.2. IMPLEMENTAZIONE DEGLI AGENTI ------------------------------------------------------------------- - 9 -
4.3. IMPLEMENTAZIONE DELLA DINAMICA -------------------------------------------------------------- - 10 -
5. PRIME SIMULAZIONI--------------------------------------------------------------------------------- 12 -
5.1. PRIMO ESPERIMENTO: COMPORTAMENTO DELLE PRINCIPALI CARATTERISTICHE ------------- - 12 -
5.2. SECONDO ESPERIMENTO: VARIAZIONE DEL NUMERO INIZIALE DI AGENTI --------------------- - 16 -
6. CAPACITÀ PORTANTE ------------------------------------------------------------------------------- 18 -
6.1. TERZO ESPERIMENTO: CAPACITÀ PORTANTE AL VARIARE DELLE RISORSE DEL TERRENO --- - 19 -
6.2. QUARTO ESPERIMENTO: CAPACITÀ PORTANTE AL VARIARE DEL TIPO DI AGENTE------------- - 22 -
7. COEFFICIENTE DI GINI------------------------------------------------------------------------------ 28 -
8. SUGARSCAPE CON MORTE NATURALE E NASCITA DI NUOVI AGENTI---------- 30 -
9. SUGARSCAPE CON RIPRODUZIONE SESSUATA ------------------------------------------- 34 -
9.1. LA GENETICA ------------------------------------------------------------------------------------------ - 34 -
9.2. REGOLE DI EREDITARIETÀ BIOLOGICA -------------------------------------------------------------- - 36 -
9.3. QUINTO ESPERIMENTO: COMPORTAMENTO DELLE PRINCIPALI CARATTERISTICHE ------------ - 38 -
9.4. SESTO ESPERIMENTO: CAPACITÀ PORTANTE DEL SISTEMA --------------------------------------- - 47 -
9.4.1 Capacità portante al variare del numero di agenti iniziali--------------------------------- 49 -
9.4.2 Capacità portante al variare delle risorse del terreno-------------------------------------- 53 -
9.4.3 Capacità portante al variare del tipo di agente---------------------------------------------- 56 -
9.5. LA DINAMICA DELLE POPOLAZIONI ----------------------------------------------------------------- - 59 -
CONCLUSIONI---------------------------------------------------------------------------------------------- 64 -
APPENDICE: QUESTIONI APERTE------------------------------------------------------------------ 66 -

-1-
1. Introduzione

SugarScape è un modello di simulazione sociale fondato su agenti.

Il fenomeno simulato ed analizzato in questa sede è il comportamento di una specie vivente


relativamente alla sopravvivenza, alla distribuzione della ricchezza e alla riproduzione.

La domanda alla quale vogliamo rispondere è: da un mondo molto semplice, composto da entità
elementari che interagiscono con semplici regole locali e da un ambiente molto semplice, possono
emergere comportamenti complessi?

Nei prossimi paragrafi descriveremo il modello, la sua dinamica e la sua implementazione,


illustreremo e valuteremo i risultati ottenuti dalle simulazioni e complicheremo man mano il
funzionamento del mondo sul quale operiamo gli esperimenti.
Dapprima nel nostro modello gli agenti non sono in grado di riprodursi e muoiono per mancanza di
risorse. In un secondo tempo lo modifichiamo facendo in modo che gli agenti che vi operano
possano morire anche di vecchiaia, oltre che per mancanza di energia, e introducendo la
sostituzione di agenti morti con la nascita di nuovi agenti. Infine l’ultima modifica consiste
nell’eliminare la sostituzione di agenti morti e nell’introdurre la possibilità di riprodursi per
riproduzione sessuata; questo ci permette di imitare un po’ meglio la realtà e di imitare la selezione
naturale darwiniana per verificarne l’operato.

-2-
2. Il modello

SugarScape è un modello definito dal basso in cui operano agenti eterogenei dal punto di vista delle
capacità visive (visione) ed esigenze individuali (metabolismo). In questo modello lo zucchero,
variamente distribuito sul territorio, è l’unica risorsa ed è limitata.
Esso è definito dal basso in quanto il punto di partenza nella costruzione del modello è l’individuo:
una volta creati gli agenti attribuiamo loro delle regole di comportamento e facciamo procedere il
sistema nel tempo, per scoprire quale struttura emerga a livello macroscopico.
Il modello SugarScape è stato realizzato con la scrittura di un programma attraverso una
programmazione di tipo procedurale. Per la realizzazione del programma è stato utilizzato
l’ambiente di sviluppo di Matlab.
Nel modello il trascorrere simulato del tempo provoca cambiamenti nel mondo e provoca azioni
sotto forma di messaggi inviati agli agenti, i quali a loro volta producono altri cambiamenti e così
via.
SugarScape è un mondo bidimensionale soggetto a delimitazioni (i bordi opposti infatti non si
toccano) in cui mondo, agenti, risorse, regole e azioni sono regolabili in modo parametrico.

-3-
2.1. Il mondo

Il modello SugarScape è costituito da un ambiente bidimensionale non toroidale che può essere
interpretato come un automa cellulare dotato di regole per la produzione delle risorse sul territorio.
L’ambiente è un mondo chiuso, le cui dimensioni sono per default 50x50, in cui ogni cella contiene
un certo ammontare di risorse, che chiameremo “zucchero”. Ogni cella ha una capacità massima di
zucchero ed una velocità di recupero che segue una crescita graduale ad ogni unità di tempo, che
chiameremo “passo”. Ogni cella ha la stessa velocità di recupero ma una diversa capacità massima;
in questo modo si ottiene un mondo in cui i livelli di zucchero sono quantizzati: le celle dello
SugarScape possono contenere solo esattamente 0, 1, 2, 3 o 4 unità di zucchero. Al massimo,
quando ogni cella contiene esattamente lo zucchero corrispondente alla sua capacità, si ottiene una
matrice come quella in figura 1, in cui ad ogni diverso colore corrisponde un diverso livello di
zucchero: sopra la collina il livello di zucchero è massimo e diminuisce man mano che si scende.

10

15

20

25

30

35

40

45

50
5 10 15 20 25 30 35 40 45 50

Figura 1: matrice delle capacità massime di zucchero che le celle possono assumere nel mondo.
Il marrone corrisponde a 4 unità di zucchero, il giallo a 3 unità, l’azzurro a 2 unità e il blu ad 1 unità.

Il mondo iniziale è molto semplice, ma consente di verificare gli effetti che le condizioni ambientali
(quantità di zucchero, tasso di rinnovamento dello zucchero nel territorio e regole locali di ricerca
del cibo) determinano sulle migrazioni e sulla distribuzione degli agenti (per spazio, ricchezza, ...).

-4-
2.2. Gli agenti

Il mondo è abitato da agenti. Essi hanno una determinata posizione, inizialmente casuale, e non è
prevista la possibilità di sovrapposizione. Ogni agente è dotato di un “nome” che lo identifica, di
una vista che gli permette di guardare più o meno lontano nelle quattro direzioni principali, di un
metabolismo, e quindi di un consumo fisso che gli garantisca la sopravvivenza, e di una scorta di
zucchero iniziale uguale per tutti.
Gli agenti sono dotati della capacità di conservare il cibo raccolto in eccesso rispetto al proprio
fabbisogno. Un agente muore se le sue scorte di cibo sono minori di zero.
Ogni agente ha la capacità di muoversi nell’ambiente e quindi di cambiare la propria posizione nel
mondo; il movimento degli agenti avviene in diversi istanti di tempo quindi essi si spostano uno alla
volta, non tutti insieme.
Un esempio degli agenti che popolano il mondo è rappresentato in figura 2

10

15

20

25

30

35

40

45

50
5 10 15 20 25 30 35 40 45 50

Figura 2: mondo al massimo della sua capacità abitato da 50 agenti

-5-
3. Dinamica del modello

Lo scopo degli agenti è quello di sopravvivere in un mondo che evolve in un tempo discreto; per
poter sopravvivere essi si muovono nel mondo cercando di raccogliere più zucchero possibile.
Il trascorrere simulato del tempo provoca determinate azioni secondo determinate regole.
Prima di definire tali regole è necessario distinguere due grandezze utilizzate per scandire il tempo:

 passo
 turno

Il passo corrisponde ad un ciclo completo di aggiornamento ed è suddiviso in n turni, dove n


corrisponde esattamente al numero di agenti vivi a quel passo.
Il turno identifica il tempo che intercorre tra la selezione di un agente e la fine delle sue azioni.

Ad ogni passo il mondo aumenta di una unità la quantità di zucchero di ogni sua cella,
relativamente alla capacità massima della stessa.

Ad ogni turno viene selezionato a caso un agente. L’agente selezionato ha la possibilità di muoversi
seguendo le seguenti regole:

 il movimento degli agenti avviene lungo quattro direzioni: avanti, dietro, a sinistra e a destra
rispetto alla posizione dell’agente;
 l’agente in un movimento può raggiungere celle con una distanza massima determinata dalla
“visuale” dell’agente stesso;
 l’agente non può spostarsi in una cella occupata da un altro agente;
 l’agente si muove nella cella con maggior valore di appetibilità: l’appetibilità è determinata
dalla quantità di zucchero presente nella cella e dalla distanza della cella rispetto alla
posizione dell’agente. Infatti l’agente sceglie di spostarsi nella cella contenete una maggior
quantità di zucchero, nel caso in cui ci siano più celle con la stessa quantità di zucchero
l’agente sceglie di spostarsi nella cella meno distante da lui; nel caso in cui ci siano più celle
con la stessa quantità di zucchero e con la stessa distanza dall’agente, quest’ultimo sceglie a
caso in che cella muoversi.
 Questo procedimento avviene anche se tutte le celle raggiungibili dall’agente hanno una
quantità di zucchero pari a zero.

In altre parole l’agente selezionato guarda lungo le direzioni che può osservare, cerca la cella con
maggior appetibilità e la raggiunge, ossia cambia la sua posizione nel mondo. Una volta spostatosi,
l’agente raccoglie la quantità di zucchero presente in quella cella e la aggiunge alle sue scorte,
lasciando vuota la cella. Non esiste un tetto massimo per la scorta di zucchero dell’agente.
A questo punto sono necessarie due annotazioni. In primo luogo è importante sottolineare che non è
detto che in un passo tutti gli agenti si muovano, in quanto il turno è selezionato casualmente. È
quindi possibile che in un passo un agente sia selezionato – e quindi si muova – più di una volta
oppure che esso non sia selezionato affatto.
La seconda annotazione riguarda il fatto che l’unico caso in cui l’agente selezionato non si muove è
rappresentato dall’eventualità che tutte le celle visibili siano occupate da altri agenti oppure escano
dai confini del mondo. In questo caso l’agente prova a spostarsi ma non ci riesce e il suo tentativo è
comunque considerato valido nel conteggio degli n turni; in altre parole il mancato spostamento
viene considerato dal programma come un movimento, anche se non è stato un effettivo movimento
ma solo un tentativo di movimento.

-6-
Alla fine di tutti i turni (torniamo quindi nell’ordine dei passi) ad ogni agente, indipendentemente
dal fatto che si sia spostato o meno, si sottrae dalla sua scorta la quantità di zucchero necessaria per
la sopravvivenza, corrispondente al suo metabolismo. Se la sua scorta è minore di zero, l’agente
muore, venendo così eliminato dal mondo insieme a tutte le sue caratteristiche.
A questo punto inizia il passo successivo ed il ciclo si ripete: il mondo viene aumentato di una unità
di zucchero in tutte le sue celle, vengono selezionati gli agenti che si muovono, acquistano e
consumano risorse ed, eventualmente, muoiono.
Ogni passo corrisponde dunque ad un ciclo completo di aggiornamento.

-7-
4. Implementazione del modello

Entrando più nello specifico, esamineremo ora come abbiamo creato il nostro modello SugarScape
servendoci dell’editor di Matlab.

4.1. Implementazione del mondo

Come abbiamo spiegato nel paragrafo precedente, ogni cella contiene una certa quantità di
zucchero, che non è uguale per tutte. La capacità massima delle celle è determinata da due colline
che sono state implementate sulla base della funzione gaussiana1 (cfr 4.).
Inizialmente, quindi, abbiamo creato la matrice “capacità” (figura 1) mediante la seguente funzione:

( x '0 − i ) 2 ( y '0 − j ) 2
σ '2 x σ '2 j
z (i, j ) = A' * e *e

in cui i e j sono gli indici di riga e di colonna e in cui:

A’ = altezza della collina


X’0 = coordinata x
Y’0 = coordinata y
σ’x = semi larghezza x
σ’y = semi larghezza y

I valori dei parametri sono, per default, i seguenti:

Parametri Collina 1 Collina 2


A’ 13 38
X’0 38 13
Y’0 4 4
σ’x 15 15
σ’y 15 15

Tabella 1: valori dei parametri della funzione per determinare le colline

Abbiamo poi creato una matrice “mondo”, delle stesse dimensioni della matrice capacità, in cui
inizialmente ogni cella ha un valore casuale di zucchero che va da 0 alla capacità massima che può
assumere una cella nel mondo, in questo caso 4.
Per evitare che una cella abbia più zucchero di quanto ne possa contenere abbiamo messo in
relazione la matrice mondo con la matrice delle capacità, richiamando il minimo valore fra le due e
ottenendo in tal modo la matrice del mondo ottimizzata, ossia in cui ogni cella contiene al massimo
una quantità di zucchero pari alla sua capacità.

1
La funzione gaussiana è una funzione della forma: ƒ(x) = ae-(x-b)^2 /c^2 per qualche costante reale a>0, b e c.

-8-
4.2. implementazione degli agenti

Per realizzare e rappresentare gli agenti abbiamo creato, in primo luogo, un vettore di strutture
(vettore “ag”) che contiene tutti gli agenti con le loro relative caratteristiche e, in secondo luogo, la
matrice “posizione” che contiene diversi valori per indicare dove sono collocati gli agenti nel
mondo.
Per quanto riguarda il vettore ag, i campi in esso contenuti relativamente ad ogni agente sono i
seguenti:

 id: identificatore univoco di un agente, dato da una sequenza di numeri interi positivi;
 x: in quale riga della matrice è posizionato l’agente (posizione iniziale casuale);
 y: in quale colonna è posizionato l’agente (posizione iniziale casuale);
 scorta: scorta di zucchero dell’agente, che inizialmente è uguale a 10 unità di zucchero per
tutti gli agenti;
 metabolismo: quantità di zucchero necessaria a sopravvivere. Essa è determinata
casualmente e può assumere valori tra 1 e 5 unità di zucchero;
 visuale: capacità di vedere orizzontalmente e verticalmente (gli agenti hanno una visuale
limitata perché non vedono in diagonale); la distanza massima che la visuale può
raggiungere è determinata casualmente e può assumere valori tra 1 e 6 celle (figura 3).

Figura 3:ogni agente può vedere solo nelle principali direzioni (alto, basso, destra e sinistra).
In questo caso la visione dell’agente (il pallino bianco al centro) è di quattro celle.
Ciò che l’agente vede può anche essere raggiunto.

Per quanto riguarda la matrice posizione, è stato scelto questo tipo di indicazione: nel caso in cui
una cella nel mondo sia libera inseriamo nella matrice posizione uno zero per indicare l’assenza di
un agente; nel caso in cui una cella del mondo sia occupata da un agente inseriamo nella matrice
posizione in corrispondenza di quella cella nel mondo il valore id dell’agente che la occupa.

-9-
4.3. Implementazione della dinamica

Implementiamo ora il tempo, il quale è scandito, come abbiamo già detto, da due grandezze: i passi
e i turni.
Ad ogni passo:

 SugarScape (la matrice mondo abitata dagli agenti) aumenta di una unità di zucchero ogni
sua cella in relazione alla capacità massima della stessa; se la cella contiene già tanta
quantità di zucchero quanta ne può contenere allora rimane invariata;
 si selezionano a caso n agenti e gli si da la possibilità di muoversi (turno), n corrisponde al
numero di agenti vivi a quel passo;
 si aggiornano le scorte di tutti gli agenti, indipendentemente dal fatto che siano stati
selezionati o meno, sottraendone il loro metabolismo;
 si eliminano gli agenti che hanno una scorta minore di zero;
 si aggiorna il numero di agenti, il quale può essere inferiore a quello del passo precedente se
alcuni agenti sono stati eliminati;
 al primo passo vengono creati dei vettori relativi alle caratteristiche degli agenti (numero di
agenti vivi, visuale, metabolismo, ricchezza media, ricchezza minima, ricchezza massima e
la mediana delle ricchezza). Ogni vettore contiene le medie dei valori di tutti gli agenti
relativamente ad ogni caratteristica. Dal secondo passo in poi questi vettori verranno
aumentati di una colonna (ed avranno quindi alla fine tante colonne quanti sono i passi
totali).

Ad ogni turno:

 si sceglie a caso un agente tra quelli rimasti in vita;


 l’agente selezionato si sposta nella cella con maggior appetibilità tra quelle che ha la
possibilità di vedere attraverso la funzione “MovimentoAgenti” descritta in seguito;
 la posizione (coordinate x e y) dell’agente viene aggiornata;
 se l’agente si sposta, la sua scorta viene aggiornata ed il suo valore sarà uguale alla scorta
che già possedeva più la quantità di zucchero che è presente in quella cella del mondo;
 viene azzerata la quantità di zucchero presente nella cella della matrice del mondo in cui si
sposta l’agente;
 viene assegnato il valore id dell’agente all’elemento della matrice posizione con le stesse
coordinate dell’agente che si è spostato.

La funzione MovimentoAgenti è stata realizzata nel seguente modo:

 si crea una matrice di tre colonne in cui nella prima colonna il programma andrà a scrivere il
valore di appetibilità di ogni cella, nella seconda colona la coordinata x della cella analizzata
e nella terza colonna il valore della coordinata y della cella in questione;
 si prende in considerazione la posizione (x e y) dell’agente e si aumenta di uno la coordinata
x (guardo verso il basso di una cella). Se tale posizione esiste, ossia non esce dai bordi della
matrice, e ha valore uguale a 0 (cioè non è occupata da un altro agente) allora si calcola
l’appetibilità di quella cella in relazione alla quantità di zucchero presente nella cella della
matrice mondo in quella posizione e alla distanza dalla cella considerata alla cella in cui è
posizionato l’agente (in questo caso 1), più un certo valore casuale che andrà a determinare
la scelta nel caso ci fossero più celle con la stessa appetibilità. Nella matrice creata
inizialmente viene poi inserito il valore dell’appetibilità nella prima colonna, la coordinata x
nella seconda e la coordinata y nella terza;

- 10 -
 si ripete lo stesso procedimento diminuendo di uno la coordinata y, e guardando quindi a
sinistra di una cella, successivamente diminuendo di uno la coordinata x, e quindi guardando
in alto di una cella, e infine aumentando di uno la coordinata y per guardare a destra di una
cella;
 lo stesso procedimento è effettuato spostando si prima di una cella(come descritto sopra),
poi di due celle, e così via, fino al valore della visuale dell’agente considerato;
 infine si cerca il valore massimo nella prima colonna della matrice creata, trovando quindi il
massimo valore di appetibilità, e si ricavano le posizioni associate, considerando la seconda
e la terza colonna della riga in cui compare tale valore. Tali coordinate indicano la posizione
nella quale si sposterà l’agente selezionato in quel turno.

Ricordiamo che il movimento degli agenti è asincrono, questa scelta è determinata dal fatto che in
questo modo si semplifica a livello software l’individuazione del miglior movimento possibile e
quindi si evita di gestire eventuali casi di sovrapposizione.

- 11 -
5. Prime simulazioni

5.1. Primo esperimento: comportamento delle principali caratteristiche

La nostra prima serie di simulazioni ha lo scopo di mostrarci il comportamento di alcune proprietà


nel trascorrere simulato del tempo e di farci capire se gli agenti che sopravvivono hanno alcune
caratteristiche comuni.
Lanciamo dieci simulazioni con 500 agenti per 300 passi e ci facciamo restituire come output tre
grafici in cui i valori corrispondono alle medie di tali simulazioni.

 Il primo grafico (Grafico 1) mostra l’andamento demografico: per ogni simulazione si ha il


numero di agenti vivi ad ogni passo; tali valori sono stati calcolati attraverso la media degli agenti
vivi ad ogni passo di ogni simulazione.

Andamento demografico
500

450

400
Media agenti vivi

350

300

250

200
0 50 100 150 200 250 300
Passi
Grafico 1: andamento demografico medio.

Si può notare che il numero di agenti vivi cala vertiginosamente durante i primi cinquanta passi
della simulazione, continua poi a decrescere ma molto più lentamente tendendo infine a
stabilizzarsi. Il numero di agenti vivi ad ogni passo ha un andamento che, tendenzialmente, segue
una curva logaritmica. È importante ricordare che il Grafico 1 riporta la media di tutti valori degli
andamenti di ogni simulazione, ma che comunque ogni singola simulazione mostra un andamento
demografico come quello riportato.

- 12 -
 Il secondo grafico mostra l’andamento nel tempo della media della visuale e della media del
metabolismo degli agenti.

Andamento Visuali e Metabolismi


3.2
Visulae
3 Metabolismo

2.8

2.6

2.4

2.2

1.8

1.6
0 50 100 150 200 250 300
Passi

Grafico 2: andamento medio della visuale e del metabolismo degli agenti vivi ad ogni passo.

Da ciò che risulta dal grafico con il passare del tempo gli agenti vivi hanno un metabolismo che, in
media, decresce, mentre la loro visuale, in media, aumenta. Anche in questo caso la maggior parte
del cambiamento avviene nei primi cinquanta passi e tende poi a stabilizzarsi. Questo significa che
gli agenti che sopravvivono sono quelli con un metabolismo più basso e con una visuale più ampia,
o una buona combinazione di queste due caratteristiche; così come si può supporre che gli agenti
che muoiono prima sono quelli che hanno un alto metabolismo e quelli che hanno un visione ridotta
oppure quelli con una pessima combinazione di metabolismo e visuale.
È però da notare che, anche se il metabolismo e il campo visivo hanno andamenti simili, quello del
metabolismo è più accentuato, mentre quello del campo visivo ha una crescita iniziale meno
incidente.

 Il terzo grafico (Grafico 3) mostra la ricchezza media, minima e massima ad ogni passo. Anche
in questo caso il risultato è dato dalla media della ricchezza ad ogni passo di ogni simulazione.
Consideriamo la ricchezza ad un determinato passo come la somma delle le scorte di zucchero di
tutti gli agenti vivi a quel passo.

Ricchezza minima, media e massima


900
Ricchezza minima
800 Ricchezza media
Ricchezza massima
700

600
Ricchezza

500

400

300

200

100

0
0 50 100 150 200 250 300
Passi

Grafico 3: andamento della ricchezza ad ogni passo

- 13 -
Dal grafico si può osservare che la crescita della ricchezza degli agenti nello SugarScape sembra
essere costante; esperimenti supplementari possono farci supporre che essa sia anche illimitata. Per
confermare questa supposizione abbiamo effettuato alcune simulazioni con 500 agenti iniziali e un
numero sempre maggiore di passi (da 600 a 1500) e il risultato ha confermato la nostra idea:
l’andamento infatti non varia e la ricchezza continua a crescere sempre in modo costante.

In ultimo possiamo vedere la distribuzione finale della ricchezza, ossia la ricchezza degli agenti vivi
all’ultimo passo, per quattro delle precedenti simulazioni scelte arbitrariamente:

Distribuzione della ricchezza


35 Distribuzione della ricchezza
45

30 40

35
25

30
20
Frequency

Frequency
25

15 20

15
10
10
5
5

0 0
0 100 200 300 400 500 600 700 800 900 0 100 200 300 400 500 600 700 800 900
Zucchero Zucchero

Distribuzione della ricchezza


45 Distribuzione della ricchezza
40
40
35
35
30
30
25
Frequency

25
Frequency

20
20

15
15

10 10

5 5

0 0
0 100 200 300 400 500 600 700 800 900 0 100 200 300 400 500 600 700 800 900
Zucchero Zucchero

Si può osservare che la ricchezza è distribuita in modo abbastanza equo tra gli agenti vivi, per cui la
maggior parte di essi possiede una ricchezza media e la distribuzione può essere approssimata,
anche se solo vagamente, con una curva gaussiana a campana. Sono presenti tuttavia numerosi
agenti che possiedono una ricchezza superiore alla media. È plausibile supporre che essi siano
quegli agenti che si trovano sulla cima di una collina e che hanno un metabolismo e un campo di
visuale favorevoli alla sopravvivenza. Infine ci sono pochi agenti che hanno una ricchezza minore
della media, si presume essi siano quelli rimasti isolati, ossia al di fuori delle collinette.

La figura 4 e la figura 5 visualizzano lo SugarScape prima e dopo l’evoluzione nel tempo in una
simulazione di quelle presentate sopra. La prima immagine riporta gli agenti “paracadutati” nel
mondo, le cui posizioni sono casuali; la seconda riporta gli stessi agenti (coloro che sono
sopravvissuti) alla fine della simulazione.

- 14 -
Sugarscape Sugarscape

Figura 4: sugarscape prima dell’evoluzione. Figura 5: sugarscape dopo l’evoluzione (300 passi).

Ripetendo più volte l’esperimento descritto, si assiste sempre alla medesima dinamica di
stabilizzazione degli agenti: dopo un modesto numero di passi, una cinquantina, essi rimangono
costanti nella quantità e i loro spostamenti rimangono circoscritti alla cima di ciascuna collinetta.

Si può ipotizzare che, a queste condizioni, l’ambiente non sia in grado di sostenere più di un certo
numero di agenti. Per precisare questo numero abbiamo ripetuto l’esperimento simulando lo
SugarScape 100 volte e facendoci restituire questa volta la media degli agenti sopravissuti e la
deviazione standard. Partendo da 500 agenti iniziali, il risultato che otteniamo è che dopo 300 passi,
la media degli agenti vivi è di 227.9300, con una deviazione standard di 9.5687. Questi risultati
empirici ci portano alla conclusione che lo SugarScape, operante in questo modo, sia in grado di far
sopravvivere 228 con uno scarto di ± 10 agenti2.

2
I decimali sono il risultato dall'operazione media, ovviamente non possiamo avere dei mezzi agenti, quindi arrotondiamo tali dati
per eccesso.

- 15 -
5.2. Secondo esperimento: variazione del numero iniziale di agenti

Dato che non tutti gli agenti immessi nell’ambiente sono in grado di sopravvivere, e dato che questo
effetto ha una certa sistematicità, proviamo a simulare lo SugarScape con gli stessi parametri degli
esperimenti precedenti, partendo però ora da una quantità iniziale di agenti diversa. L’obiettivo è
vedere se, partendo con quantità iniziali differenti di agenti (da 10 a 500), si ottengono risultati
simili. A questo scopo visualizzeremo l’andamento temporale del numero di agenti.
Nella Tabella 2 sono riportati i risultati delle simulazioni. La prima colonna indica il numero
iniziale degli agenti “paracadutati” nello SugarScape mentre la seconda colonna contiene i valori
medi del numero di agenti vivi a fine simulazione. Per ogni numero iniziale di agenti sono state
fatte dieci simulazioni, in modo da ottenere una media più o meno indicativa.

Numero iniziale di agenti Numero finale di agenti


10 2,6
50 24,4
100 52,5
150 78,2
200 100,8
250 123,2
300 147,7
350 169,7
400 190,5
450 207,5
500 229,6
Tabella 2: media (di dieci simulazioni) del numero di agenti sopravissuti per diverse quantità iniziali di agenti.

Come si può leggere dalla tabella, partendo da diverse quantità iniziali di agenti non si ottengono
risultati simili: osservandolo e analizzando i risultati è possibile affermare che esiste una
proporzionalità diretta tra il numero di agenti iniziali e il numero di agenti finali.
Sviluppando il grafico dalla tabella otteniamo la rappresentazione seguente.

Agenti finali per diversi valori di agenti iniziali

250

200
Agenti finali

150
Agenti Vivi
100

50

0
10 50 100 150 200 250 300 350 400 450 500
Agenti iniziali

Grafico 4.1: numero di agenti vivi alla fine della simulazione a seconda del numero iniziale di agenti.
Il numero degli agenti sopravissuto è la media di dieci simulazioni.

- 16 -
Avvalendoci di un diverso programma di supporto (Microsoft Excel) si può aggiungere al grafico
ottenuto una linea di tendenza o regressione lineare3 (Grafico 4.2).
Agenti finali per diversi valori di agenti iniziali

250
y = 22,83x - 16,371
200 R2 = 0,9975
Capacità portante

150 Agenti Vivi


100 Lineare (Agenti Vivi)

50

0
10 50 100 150 200 250 300 350 400 450 500
Agenti iniziali

Grafico 4.2: grafico 4.1 con aggiunta la linea di tendenza (regressione lineare).

MS Excel è stato utilizzato per fornirci una rappresentazione grafica, per i calcoli è stata utilizzata
invece la funzione regress di Matlab. Essa ci restituisce l’equazione della curva interpolante, che
equivale a y = 0,46 x ± Variabile errore. Il ché significa che il numero di agenti finali è uguale al
numero di agenti iniziali moltiplicato per 0,46, con una variabile di errore.
Il secondo dato che abbiamo ispezionato è il valore del coefficiente R2 (ossia il valore della
regressione - 0,9987 – al quadrato) che risulta 0,9975. Tale valore segnala la significatività statistica
dell’interpolazione: tale significatività è tanto maggiore quanto più il coefficiente si avvicina ad 1.
L’R2 risultante da Matlab - 0,9966 – ci da la possibilità di concludere che, data la relazione di
proporzionalità diretta trovata dagli esperimenti, la capacità portante del sistema (che andremo ora
a definire) dipende in modo abbastanza lineare dal numero di agenti iniziali.

3
Regressione lineare: in statistica, è un metodo per stimare che fa uso dei minimi quadrati per derivare una retta (del tipo y = ax + b)
che interpola uno scatter di punti minimizzando la somma dei quadrati delle distanze dei punti stessi dalla retta.

- 17 -
6. Capacità portante

Come affermato nel paragrafo precedente, l’ambiente non è in grado di sostenere una qualsiasi
quantità di agenti; esiste una soglia limite chiamata capacità portante. Tale capacità può essere
definita come la quantità di agenti che sopravvive nello stato asintotico stabile, data una quantità
iniziale fissa degli agenti stessi, e data la disponibilità di risorse all’interno del sistema.

Partendo da un numero di agenti iniziali pari a 500, e simulando lo SugarScape cinquanta volte,
possiamo osservare dal Grafico 5 che l’andamento temporale del numero di agenti decresce
seguendo una curva tendenzialmente logaritmica e possiamo affermare che la capacità portante del
sistema si aggira intorno ai 228 ± 10 agenti. Tale cifra è il risultato della prima serie di esperimenti.

Andamento temporale del numero di agenti


500

450

400
Agenti vivi

350

300

250

200
0 50 100 150 200 250 300
Passi

Grafico 5: andamento temporale del numero di agenti vivi per cinquanta simulazioni da 300 passi e 500 agenti iniziali.

Andremo ora ad effettuare una serie di esperimenti che hanno lo scopo di studiare la capacità
portante del nostro sistema e di capire le relazioni che intercorrono tra tale capacità e determinate
caratteristiche dello SugarScape.

- 18 -
6.1. Terzo esperimento: capacità portante al variare delle risorse del terreno

La domanda alla quale vogliamo rispondere ora è la seguente: esiste una relazione tra capacità
portante e quantità di risorse presenti nell’ambiente?

Per rispondere a questa domanda abbiamo effettuato una serie di simulazioni variando le risorse
presenti nel mondo, per vedere se è possibile affermare che il numero di agenti che sopravvivono ha
un qualche tipo di relazione con la quantità di zucchero presente sul territorio.
Questo primo esperimento è costituito da 30 simulazioni, ognuna con un numero di agenti iniziali
pari a 500 e per 500 passi. Le prime dieci sono effettuate con collinette piccole, altre dieci
simulazioni sono lanciate con collinette più grandi e le ultime dieci con collinette ancora più grandi.
I risultati che ci facciamo restituire sono la media di agenti vivi al termine di ciascun ciclo di
simulazioni e i grafici relativi all’andamento demografico.

Il primo ciclo di simulazioni è effettuato su un mondo con poche risorse, un mondo in cui le colline
sono più strette e la loro altezza arriva a tre4. Il risultato di questo ciclo è riportato nel Grafico 6.1.
La media degli agenti sopravissuti è 138,1.

Nel secondo ciclo di simulazioni i parametri di input per la creazione delle colline sono 4 per la loro
altezza massima e 15 per la loro larghezza. L’andamento demografico degli agenti che occupano
questo tipo di ambiente è riportato nel Grafico 6.2 e la media degli agenti sopravissuti è 225.

Nel terzo ciclo aumentiamo sia l’altezza che la larghezza delle colline. L’altezza la impostiamo a 5
e la larghezza a 185. I risultati sono riportati nel grafico 6.3 e la media degli agenti vivi a fine
simulazione è 295,4.

Andamento demografico con colline piccole


500
Simulazione 1
450 Simulazione 2
Simulazione 3
Simulazione 4
400
Simulazione 5
Simulazione 6
350
Capacità portante

Simulazione 7
Simulazione 8
300 Simulazione 9
Simulazione 10

250

200

150

100
0 50 100 150 200 250 300 350 400 450 500
Passi

Grafico 6.1: andamento demografico degli agenti.


Ogni curva rappresenta una simulazione, ogni simulazione è stata effettuata con un mondo con scarse risorse nel territorio.

4
Per operare questa modifica andiamo a modificare i valori di input per la creazione delle colline. Nello specifico l’altezza delle colline A’ = 3 e la
larghezza σ’x = 10 e σ’y = 10.

5
Anche aumentando la larghezza delle colline l’altezza massima che esse possono raggiungere non supera le 5 unità, anche dove le due basi delle
colline si sovrappongono.

- 19 -
Andamento demografico con colline medie
500
Simulazione 1
Simulazione 2
450 Simulazione 3
Simulazione 4
Simulazione 5
400 Simulazione 6

Capacità portante
Simulazione 7
Simulazione 8
350 Simulazione 9
Simulazione 10

300

250

200
0 50 100 150 200 250 300 350 400 450 500
Passi

Grafico 6.2: andamento demografico degli agenti.


Ogni curva rappresenta una simulazione.
Le simulazioni sono state effettuate con un mondo in cui le risorse possono considerarsi ‘normali’

Andamento demografico con colline grandi


500
Simulazione 1
Simulazione 2
Simulazione 3
450 Simulazione 4
Simulazione 5
Simulazione 6
Capacità portante

400 Simulazione 7
Simulazione 8
Simulazione 9
Simulazione 10
350

300

250
0 50 100 150 200 250 300 350 400 450 500
Passi

Grafico 6.3: andamento demografico degli agenti.


Ogni curva rappresenta una simulazione.
Ogni simulazione è stata effettuata con un’elevata quantità di risorse.

Possiamo concludere che la risposta alla nostra domanda iniziale è positiva: esiste sicuramente una
relazione tra la capacità portante del sistema e la quantità di risorse presenti nel territorio.

Per quantificare il tipo di relazione esistente effettuiamo un altro esperimento in cui manteniamo
invariata la larghezza delle colline ma facciamo variare la loro altezza da 3 a 10 e ci facciamo
restituire la madia degli agenti vivi calcolata per dieci simulazioni.
Facendo evolvere il sistema per 500 passi e un numero iniziale di 500 agenti, i risultati ottenuti sono
quelli riportati nella Tabella 3.

- 20 -
Altezza colline Capacità portante
3 184
4 226,4
5 254
6 283,1
7 300,8
8 317,4
9 338,7
10 348,4

Tabella 3: capacità portante in relazione all’altezza delle colline, quindi alle risorse del territorio.

È visibile un sostanziale aumento degli agenti finali all’aumentare degli agenti finali, per cui
operiamo come in precedenza per valutare, nello specifico, che tipo di relazione lega queste due
variabili. Utilizzando Excel rappresentiamo graficamente la tabella e aggiungiamo una linea di
tendenza. Questa volta però non operiamo una regressione lineare, ma aggiungiamo una linea di
tendenza logaritmica. I risultati ottenuti sono riportati di seguito.
Capacità portante

400
350
Capacità portante

300
250
y = 80,431Ln(x) + 174,98
200 2
150 R = 0,9866
100
50
0
3 4 5 6 7 8 9 10
Altezza colline

Grafico 6.4: capacità portante del sistema in relazione all’altezza delle colline.
Linea di tendenza logaritmica.

L’equazione ottenuta è la seguente: y = 80,431 * Ln(x) + 174,98


che tradotta in termini di SugarScape significa che la capacità portante del sistema è uguale al
logaritmo dell’altezza delle colline moltiplicata circa ottanta volte e sommata a 147,98.
R2 = 0,9866 sta ad indicare che la curva ottenuta nel nostro grafico ben si avvicina ad una curva
logaritmica.

Tuttavia l’analisi della regressione lineare effettuata con Matlab ci dice che la curva rappresentante
la capacità portante in relazione all’altezza delle colline si avvicina molto anche ad una crescita
lineare. Infatti la crescita è molto simile anche ad una proporzionalità diretta, oltre che ad una
logaritmica, e l’R2 risultante ce lo conferma; esso vale 0,9664. L’equazione che descrive tale curva
stima y = 22 * x + 133 ± b, dove y rappresenta la capacità portante del sistema, x rappresenta
l’altezza delle colline e b rappresenta la variabile d’errore (Grafico 6.5).

- 21 -
OLS Actual vs. Predicted
300
Actual
200 Predicted

100

0
0 2 4 6 8 10 12

Residuals
5

-5

-10
0 2 4 6 8 10 12

Grafico 6.5: regressione lineare sulla curva della capacità portante del sistema in relazione all’altezza delle colline (sopra)
e analisi dei residui (sotto).
Equazione risultante: capacità portante = 22 * altezza delle colline + 133 ± variabile errore.

Il limite tra le due possibili tendenze è molto labile ed è difficile capire quali dei due risultati è più
idoneo a descrivere l’andamento della capacità portante esaminata in questo esperimento.

6.2. Quarto esperimento: capacità portante al variare del tipo di agente

Abbiamo visto come la capacità portante del sistema varia al variare del numero iniziale di agenti
ed è funzione del terreno, vogliamo ora verificare se essa cambia anche a seconda del tipo di agente
che occupa e utilizza il terreno.

L’ipotesi iniziale, dunque, è che il numero finale degli agenti dipenda anche dalle interazioni che gli
stessi sono in grado di mantenere con il terreno. Dai risultati dei primi esperimenti possiamo già
ipotizzare che la capacità portante possa variare a seconda della capacità visiva media degli agenti e
a seconda dal loro metabolismo medio, lavoriamo dunque tenendo in considerazione queste due
variabili.

Per trovare sperimentalmente la dipendenza tra capacità portante e metabolismo e visuale degli
agenti, abbiamo effettuato una serie di simulazioni in cui supponiamo che tutti gli agenti abbiano
una stessa visuale data ed un uguale metabolismo anch’esso dato, anziché determinare questi due
parametri in modo casuale come nelle precedenti simulazioni. In questo modo è possibile analizzare
come cambia il numero di agenti finali al variare di questi due parametri. L’esperimento ha queste
caratteristiche:

o 500 agenti iniziali;


o 1500 passi, per permettere un assestamento del sistema;
o la visuale varia da 1 a 10 celle;
o il metabolismo varia da 1 a 5 unità di zucchero;
o tutti gli agenti hanno lo stesso valore del parametro interessato;
o si utilizza una matrice 10x5 (visuale x metabolismo). Per ogni coppia visuale-metabolismo
si effettuano 10 simulazioni. Ogni simulazione restituisce il numero di agenti finali. Ogni
elemento della matrice contiene il numero medio di agenti finali.

I risultati delle simulazioni appena descritte sono riportati in Tabella 4.

- 22 -
Matrice agenti vivi
Metabolismo
Visuale
1 2 3 4 5
1 447 280,2 90,3 1 0
2 456,1 313,9 122 1 0
3 459 334 130,1 1 0
4 465 349 134,5 1 0
5 470,9 362,7 137,5 1 0
6 474,7 371,9 137,1 1 0
7 477,2 376,1 136,7 1 0
8 481,6 385,5 136,1 1 0
9 483,3 386,9 130,4 1 0
10 485,1 388,9 134,4 1 0

Tabella 4: media degli agenti vivi (su 10 simulazioni) per ogni coppia di valori dei parametri metabolismo e visuale.
1500 passi, 500 agenti iniziali.

Leggendo la matrice per colonne è possibile notare che, mantenendo il metabolismo costante e
variando la visuale degli agenti, il numero di agenti vivi a fine simulazione subisce una leggera
crescita, ma non varia sensibilmente. Prendendo in considerazione la prima colonna, infatti, si nota
che, fissando a una unità di zucchero il metabolismo degli agenti e variando la loro visuale da 1 a 10
celle, la capacità portante cresce da 448 agenti quando la visuale è uno fino ad arrivare a 485
quando la visuale è dieci; tale capacità dunque aumenta di 37 agenti. Lo stesso procedimento
effettuato sulle altre colonne della matrice ci dice che mantenendo il metabolismo fisso a due unità
di zucchero la capacità portante cresce di 105 agenti; di 39 agenti quando il metabolismo è fissato a
tre unità di zucchero; di 1 agente a metabolismo fisso a quattro unità di zucchero e non aumenta,
cioè rimane costante a 0 agenti, se il metabolismo è fissato a 5 unità di zucchero.

Leggendo ora la matrice per riga, è possibile notare come varia la capacità portante del sistema
quando gli agenti hanno una visuale fissa, ma variano il loro metabolismo.
Questa volta la capacità portante varia sensibilmente al variare del metabolismo degli agenti e, in
particolare, è interessante notare che, qualsiasi capacità visiva abbiano gli agenti, se il loro
metabolismo è pari a cinque unità di zucchero, non riescono a sopravvivere.

Per capire meglio le osservazioni appena fatte e avere un riscontro visivo della correlazione
supposta, è possibile fare un plot in cui visualizziamo come varia il numero di agenti vivi al variare
della loro visuale, a metabolismo fisso (Grafico 7), e un secondo plot in cui visualizziamo come
varia il numero di agenti sopravissuti al variare del loro metabolismo, a visuale fissa (Grafico 8).

- 23 -
Visuale variabile, metabolismo costante
500

450

400

350
metabolismo = 1
Agenti sopravissuti

300 metabolismo = 2
metabolismo = 3
250 metabolismo = 4
metabolismo = 5
200

150

100

50

0
1 2 3 4 5 6 7 8 9 10
Visuale

Grafico 7: capacità portante dello sugarscape in relazione al parametro di visuale degli agenti (a metabolismo fisso).

Come si era già potuto notare dalla tabella, il numero di agenti che sopravvive non varia molto al
variare della loro visuale; ciò significa che la capacità portante del sistema dipende solo in
minimissima parte dal parametro “visuale” dei nostri agenti.
L’andamento delle curve è pressoché identico, l’unica variante è che con più diminuisce il
metabolismo con più la curva viene traslata verso l’alto, in virtù del fatto che minore è il
metabolismo degli agenti, maggiore è la capacità portante del sistema.

Metabolismo variabile, visuale costante


500
Vista = 1
450 Vista = 2
Vista = 3
400
Vista = 4
Vista = 5
350
Vista = 6
Agenti sopravissuti

300 Vista = 7
Vista = 8
250 Vista = 9
Vista = 10
200

150

100

50

0
1 1.5 2 2.5 3 3.5 4 4.5 5
Metabolismo

Grafico 8: capacità portante dello sugarscape al variare del parametro di metabolismo degli agenti (a visuale fissa)

Come avevamo già notato analizzando la tabella, il numero di agenti che riesce a sopravvivere
nell’ambiente varia molto in relazione al proprio metabolismo; questo significa che la capacità
portante dello SugarScape dipende molto dal parametro “metabolismo” degli agenti.

- 24 -
Anche in questo caso le curve hanno un andamento simile, con la sola eccezione che esse vengono
traslate verso l’alto all’aumentare del campo visivo, in virtù del fatto che, come abbiamo detto
sopra, anche se solo in minima parte, il parametro visione influisce sulla capacità portante. Questa
minima parte è visibile anche nella distanza di traslazione tra una curva e l’altra, che è molto
piccola, soprattutto confrontandola con quella del Grafico 6. L’ampia distanza di traslazione tra una
curva e l’altra nel grafico 6, infatti, indica che il metabolismo incide molto sulla capacità portante
del sistema.

Un’osservazione che è plausibile fare è che questi dati sono coerenti con i risultati del primo
esperimento (cfr. Grafico 2).
Quando abbiamo analizzato l’andamento della visuale e del metabolismo degli agenti, assegnando a
questi due parametri valori casuali, avevamo notato che con il passare del tempo gli agenti che
rimanevano vivi avevano un metabolismo medio che decresceva in maniera maggiore dell’aumento
della loro visuale media. Questa considerazione trova ora fondamento con le nostre ultime
considerazioni, secondo le quali la capacità portante del sistema dipende molto dal parametro
metabolismo e in maniera minore dal parametro visuale.

Per verificare matematicamente le nostre supposizioni, e per capire cosa significa che la visuale
degli agenti incide “in minima parte” e il metabolismo incide “in modo forte” sulla capacità
portante, possiamo stimare alcuni valori:

 una regressione lineare in cui la variabile indipendente è la capacità portante e la variabile


dipendente è la visuale, per quantificare la relazione capacità portante-visuale;
 una regressione lineare in cui la variabile indipendente è la capacità portante e la variabile
dipendente è il metabolismo, per quantificare la relazione capacità portante-metabolismo;
 una regressione lineare multivariata in cui la variabile indipendente è la capacità portante e
le variabili dipendenti sono la capacità visiva e il metabolismo.

Utilizzando la funzione regress di Matlab otteniamo che le variabili vista e metabolismo, in una
ipotetica formula, avrebbero coefficienti rispettivamente pari a 44 e -39. Di conseguenza il numero
di agenti sopravvissuti è uguale a 44.2918 * vista - 37.6820 * metabolismo. Tuttavia, il coefficiente
di determinazione ottenuto – paria a 0,09 - è molto basso e indica che, di fatto, con queste due
variabili non siamo in grado di predire efficacemente l'andamento della popolazione. Il grafico
sottostante mostra la curva data dai nostri dati e la curva della regressione lineare.

OLS Actual vs. Predicted


400

300

200 Actual
Predicted

100
1 2 3 4 5 6 7 8

Residuals
20

10

-10

-20
1 2 3 4 5 6 7 8

Grafico 9: regressione lineare sulla capacità portante ottenuta dagli esperimenti.

- 25 -
Proviamo ore a considerare le due variabili separatamente, per verificare se una ha un coefficiente
sensibilmente differente dall’altra ed è in grado di spiegare meglio o peggio la capacità portante del
nostro sistema. Sempre utilizzando Matlab come programma di elaborazione di queste statistiche,
elaboriamo due cicli di simulazioni per 300 passi e 500 agenti iniziali.
Nel primo ciclo fissiamo la vista di tutti gli agenti e lasciamo casuale il metabolismo, nel secondo
ciclo fissiamo il metabolismo degli agenti e lasciamo casuale la visuale. Attuando poi la regressione
ai risultati ottenuti (riportato in tabella 5) l’esito è che il numero di agenti finali è uguale alla visuale
degli agenti moltiplicata 222,1333 volte, e la significatività di questa regressione, ossia il suo R2 è
di 0,6463.

Visuale agenti Numero di agenti finali


1 223
2 233
3 244
4 225
5 241
6 236
7 239
8 251
9 265
10 253

Tabella 5: capacità portante del sistema al variare del parametro visuale.

Nel secondo ciclo di simulazioni fissiamo un uguale metabolismo a tutti gli agenti e lasciamo
casuale il parametro relativo alla loro visuale. Il numero di agenti vivi alla fine della simulazione
relativamente al loro metabolismo è riportato in tabella 6.

Metabolismo agenti Numero di agenti finali


1 467
2 340
3 136
4 11
5 0

Tabella 6: capacità portante del sistema al variare del parametro metabolismo.

Attuando la regressione lineare a questi risultati otteniamo un R2 pari a 0,96.


È dunque plausibile concludere che la variabile metabolismo è in grado di spiegare meglio la
capacità portante del sistema di quanto non sia in grado di farlo la variabile visuale.

Una ulteriore ipotesi che è plausibile assumere è che gli agenti con metabolismo pari a cinque unità
di zucchero non riescano a sopravvivere a causa delle dimensioni delle colline: il massimo della
capacità di zucchero che le celle in cime alle colline nel mondo possono contenere è infatti 4 nei
nostri esperimenti. Agenti con metabolismo più alto quindi, considerando che dispongono di una

6
R2 in realtà è risultato 1.0e+003 * 0.0009.

- 26 -
scorta iniziale, non sono in grado di sopravvivere per un periodo lungo di tempo. Anche ipotizzando
che un agente con metabolismo 5 sia selezionato una volta ad ogni passo, o anche per più di un
turno, e che riesca ogni volta a raccogliere quattro unità di zucchero, il suo metabolismo consuma
comunque più di quello che riesce a raccogliere, e consumerà la sua scorta iniziale fino ad
annullarla.
Per verificare se la nostra ipotesi ha fondamento abbiamo simulato lo SugarScape con diversi valori
per l’altezza delle colline e abbiamo guardato come si comporta l’andamento demografico. Per
questi esperimenti il valore del parametro visuale è stato fissato a 10 per tutti gli agenti e il valore
del parametro del metabolismo è stato mantenuto casuale.
I risultati ottenuti sono i seguenti:

 se la collina raggiunge un massimo di 5, quindi le celle in cima alla collina possono


contenere al massimo cinque unità di zucchero, gli agenti con metabolismo pari a 5 unità di
zucchero che sopravvivono sono pochi mentre quelli con metabolismo 6 muoiono, come
mostrato nel grafico sottostante.
Anamento demografico (collina 5)

140
120
100
Agenti vivi

80 Metabolismo 5
60 Metabolismo 6
40
20
0
0

0
10

30

50

70

90

11

16

18

20

40

Passi

Grafico 10: media su dieci simulazioni di agenti vivi con metabolismo 5 (linea blu) e con metabolismo 6 (linea rosa).
Le simulazioni sono effettuate con il parametro “altezza collina” pari a 5.

 Se la collina raggiunge un massimo di 6, gli agenti che sopravvivono con metabolismo 6


sono pochi, mentre quelli con metabolismo 7 invece muoiono in modo analogo a quanto
riportato nel Grafico 10.

Questi risultati sembrano confermare l’ipotesi secondo la quale gli agenti con un metabolismo
superiore alla massima quantità che le celle della cima della collina possano contenere non sono in
grado di sopravvivere più di un centinaio di passi.

- 27 -
7. Coefficiente di Gini

Il coefficiente di Gini (G) è una stima della quantità di ineguaglianza di un determinato fattore
all’interno di una popolazione. La misura di questo coefficiente è definita come il rapporto dell’area
compresa tra la Curva di Lorenz7 della distribuzione e la curva data da una distribuzione uniforme,
rispetto all’area sottesa della distribuzione uniforme.
Matematicamente il coefficiente di Gini è espresso in questo modo:

Area A
G=
Area A + Area B

Il coefficiente di Gini, spesso utilizzato per misurare la differenza di reddito, è un numero compreso
tra 0 ed 1; un coefficiente pari a 0 rimanda ad un’assenza di ineguaglianza, ossia il caso di una
uguaglianza perfetta in cui tutti hanno lo stesso reddito, un coefficiente uguale a 1, invece, rimanda
ad una totale ineguaglianza, cioè il caso in cui una persona detiene tutto il reddito mentre tutti gli
altri hanno un reddito nullo. Più basso è il valore di G, dunque, maggiore è l’uguaglianza. Uno dei
fattori comunemente utilizzati è appunto il reddito, perciò il coefficiente di Gini è in grado di
misurare le sperequazioni (differenza, sproporzione) di reddito in una popolazione.

Per riportare un esempio la Figura 6 mostra il grafico dal quale si calcola l’area per definire il
coefficiente di Gini. Sull’asse delle ascisse sono riportate le percentuali relative alla popolazione e
su quello dello ordinate è riportata la percentuale relativa al reddito. La retta rappresenta la curva di
una distribuzione uniforme, la curva, invece, rappresenta la curva di Lorenz della distribuzione reale
del reddito. In questo modo, al punto X, sulla linea della distribuzione del reddito, il 40% della
popolazione risulta disporre del 10% del reddito; mentre una distribuzione equa avrebbe voluto che
fosse il 10% della popolazione a disporre il 10% del reddito. Al punto Y, l’80% della popolazione
ha il 40% del reddito. In coincidenza del punto Z il 50% della popolazione dovrebbe disporre del
50% del reddito secondo una distribuzione equa, e invece in questo esempio dispone di meno del
20% del reddito totale.

Figura 6: coefficiente di Gini calcolato a partire dal diagramma della curva di Lorenz

7
Curva di Lorenz: una volta ordinati in senso crescente i redditi, la curva di Lorenz rappresenta graficamente la relazione fra quote
cumulate di reddito e frazioni cumulate di redditieri.

- 28 -
Come evidenzia bene la Figura 6, maggiori sono le differenze di reddito, più la curva di Lorenz si
allontana (verso il basso) dalla curva ideale e più vasta diventa l’area A; maggiore è l’area A, più
elevato è il coefficiente di Gini. Più è elevato G, maggiori sono le differenze di reddito. Al
contrario, minore è il coefficiente di Gini, minori sono le diversità, quindi minore sarà l’area A in
quanto la curva di Lorenz si sposta alzandosi verso l’alto tendendo alla curva ideale; fino a quando
la curva ideale e quella reale di Lorenz si sovrappongono, facendo diventare l’area A, e quindi
anche il coefficiente di Gini, pari a 0.

Nello SugarScape il coefficiente di Gini viene utilizzato per misurare la distribuzione della
ricchezza, e quindi delle scorte di ogni agente, e per valutare se la ricchezza è ben distribuita nel
nostro mondo.
Per implementare il coefficiente di Gini nel modello abbiamo ordinato in senso crescente il nostro,
già esistente, vettore delle ricchezze, e attraverso la funzione cumsum abbiamo creato la somma
cumulativa in grado di rappresentarci la curva di Lorenz. In secondo luogo abbiamo creato la curva
ideale in cui la ricchezza è distribuita equamente e, infine, abbiamo sottratto l’area sottesa la curva
di Lorenz all’area sottesa la curva ideale seguendo l’equazione

pop
G = ∑ y (i ) − x(i )
i =1

dove x rappresenta il valore delle ordinate della curva di Lorenz e y il valore delle ordinate della
curva ideale.

Successivamente vedremo come il coefficiente di Gini è stato applicato al modello e a quali risultati
ha condotto.

- 29 -
8. SugarScape con morte naturale e nascita di nuovi agenti

La prima delle modifiche che apportiamo al modello è l’aggiunta della morte naturale, ossia la
morte dell’agente, e di tutte le sue caratteristiche e della sua scorta, a causa di vecchiaia.

Per implementarla nel modello abbiamo aggiunto due campi nel vettore di strutture degli agenti:

 il campo “eta”;
 il campo “morte”.

L’età di tutti gli agenti aumenta di una unità ad ogni passo, di conseguenza, d’ora in avanti faremo
coincidere l’espressione “un anno” con l’espressione “un passo”: ogni anno lo SugarScape evolve
come evolve ad ogni passo; dire “dopo un anno” equivale a dire “dopo un passo”.

 Ogni agente, quando inizialmente viene paracadutato nel mondo, nasce con un’età compresa
tra 0 e 60;
 durante l’inizializzazione degli agenti, viene anche assegnato ad ognuno di essi un anno di
morte che è compreso tra i 60 e i 100 anni.

La seconda modifica riguarda la scorta iniziale di ogni agente che è ora determinata casualmente tra
30 e 80 unità di zucchero, non più pari a dieci unità di zucchero per tutti come in precedenza.
È da notare che se gli agenti morissero solo, si avrebbe una loro estinzione entro il numero massimo
che compare nel campo “morte”. L’andamento demografico dello SugarScape quindi sarebbe
costantemente in decrescita e il sistema evolverebbe verso l’estinzione di tutti gli agenti.
Per ovviare a questo risultato scontato abbiamo aggiunto la “riproduzione asessuata” che consiste
semplicemente nella nascita di nuovi agenti. I nuovi agenti, in realtà, non sono procreati da altri
agenti, ma nascono, per così dire, dal nulla.
Nello specifico un nuovo agente nasce in sostituzione di un agente che muore. Ogni volta che un
agente muore, per mancanza di scorte o per vecchiaia, esso viene rimpiazzato con un agente nuovo
che mantiene la stessa posizione che aveva l’agente morto, ha un’età uguale a zero e tutte le altre
caratteristiche proprie di un agente casuali.
Vediamo ora di capire come funziona la prima variante del modello SugarScape e vediamo cosa
comporta la morte di vecchiaia degli agenti e la loro sostituzione con nuovi agenti.
Per evitare confusioni chiameremo d’ora in avanti “primo modello” il modello senza morte degli
agenti per vecchiaia (ma solo per mancanza di scorta) e senza nascita di nuovi agenti; chiameremo
invece “prima evoluzione del modello” il modello con morte degli agenti di vecchiaia e nascita di
nuovi agenti.
In primo luogo eviteremo di mostrare il grafico relativo all’andamento demografico degli agenti:
esso risulterà costante al numero di agenti iniziali in quanto tutte le volte che un agente muore ne
nasce un altro e quindi alla fine di ogni anno il numero totale di agenti è uguale a quello iniziale.
Per vedere cosa comportano le modifiche apportate al primo modello lanciamo alcune simulazioni
per studiare il comportamento del sistema e riportiamo i risultati di una simulazione di 1000 passi e
con un numero iniziale di agenti pari a 240, uguale ala capacità portante del nostro sistema prima
delle modifiche apportate (cfr 5.2). I risultati ottenuti e i comportamenti descritti riportati di seguito
sono comuni a tutti i nostri esperimenti.

 Il primo grafico (Grafico 11) mostra l’andamento della visuale e del metabolismo medio ad ogni
passo: per la variabile visuale è possibile osservare che essa oscilla continuamente; ciò è
giustificato dal fatto che i nuovi nati hanno un valore della vista che è casuale e che varia tra 1 e 6.
Per la variabile metabolismo, come per la variabile visuale, si assiste ad una continua oscillazione
dovuta al fatto che i nuovi nati hanno una metabolismo casuale che varia tra 1 e 5, ma nel corso

- 30 -
dei primi 50 passi essa subisce un brusco calo (da 2.7 a 1.8) per poi iniziare a oscillare in una
fascia approssimativa di valori che vanno da 1.8 a 2.1. Questo ci conferma che per la
sopravvivenza nel nostro ambiente è più influente un basso metabolismo piuttosto che una lunga
visuale. Agenti con un metabolismo alto sono presenti, infatti la curva relativa alla media del
metabolismo presenta numerosi picchi, ma poi muoiono e la curva presenta dei cali.

Andamento visuale e metabolismo


3.6
Visuale
3.4 Metabolismo

3.2

2.8

2.6

2.4

2.2

1.8
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico 11: andamento della media della visuale (blu) e del metabolismo (rosso) in una simulazione della prima variante
dello sugarscape (simulazione con 240 agenti e 1000 passi).

 Il secondo grafico (Grafico 12 a) mostra l’andamento della ricchezza8: com’è possibile notare la
media e la mediana sono abbastanza vicine e hanno un andamento molto simile. Dato che, rispetto
alla media aritmetica, la mediana è un indice più resistente in quanto non varia se nella
distribuzione è presente un valore eccezionale, questo ci indica che la distribuzione della
ricchezza ad ogni passo dovrebbe presentare una forma a campana, che la maggior parte dei valori
sono sotto la parte centrale della campana e che la campana ha una coda lunga.
Confrontando questo grafico con quello dell’andamento della ricchezza per ogni passo di una
simulazione effettuata con il primo modello e con gli stessi parametri (Grafico 12 b), è possibile
osservare che, mentre prima la ricchezza aveva una crescita costante, ora la ricchezza media
cresce durante i primi 100 passi e poi continua ad avere un andamento oscillatorio che rimane
però costante in un intorno del valore 57 unità di zucchero, senza crescere ulteriormente.

Andamento della Ricchezza Andamento della Ricchezza


350 3000
Media
300 Mediana
2500 Minimo
Massimo
250
2000

200
Ricchezza

Ricchezza

Media
1500
Mediana
150
Minimo
Massimo 1000
100

500
50

0 0
0 100 200 300 400 500 600 700 800 900 1000 0 100 200 300 400 500 600 700 800 900 1000
Passi Passi

a) b)
Grafico 12: a) andamento della ricchezza ad ogni passo, sugarscape con morte naturale e nascita di nuovi agenti;
b) andamento della ricchezza ad ogni passo, sugarscape senza morte naturale e senza nascita di nuovi agenti.

8
L’andamento della ricchezza è calcolato attraverso la media delle scorte di zucchero di ogni agente vivo ad ogni passo.

- 31 -
 il terzo grafico (Grafico 13 a) mostra la distribuzione della ricchezza all’ultimo passo: com’è
possibile notare, pochissimi agenti hanno moltissima scorta di zucchero, un numero medio di
agenti ha una quantità media di scorta mentre la maggior parte degli agenti possiedono una
piccola scorta di zucchero. L’andamento ha quindi caratteristiche simili ad un esponenziale con
esponente tra 0 e 1; il che implica una proporzionalità inversa tra ricchezza e numero di agenti.
Confrontando questo istogramma con quello della distribuzione della ricchezza risultante dalla
prima versione dello SugarScape (Grafico 13 b del primo modello), è possibile notare che la
distribuzione della ricchezza è notevolmente cambiata.

Distribuzione della ricchezza


70 Distribuzione della ricchezza
30

60
25

50
20
40
Frequency

Frequency
15
30

10
20

10 5

0 0
0 50 100 150 200 250 0 500 1000 1500 2000 2500 3000
Zucchero Zucchero

a) b)

Grafico 13: a) distribuzione della ricchezza all’ultimo step, prima variante dello sugarscape
b) distribuzione della ricchezza all’ultimo step, prima versione sugarscape

Per approfondire questo cambiamento della distribuzione della ricchezza risultato in seguito
all’aggiunta della morte naturale e della nascita di nuovi agenti, abbiamo calcolato il coefficiente di
Gini di questa simulazione e della simulazione del primo modello con gli stessi parametri di input. I
risultati sono riportati di seguito nei grafici 14(a) e 14(b).
5
Ricchezza: curva di Lorenz e curva di equi-distribuzione x 10 Ricchezza: curva di Lorenz e curva di equi-distribuzione
15000 3
Curva di Lorenz Curva di Lorenz
Curva ideale Curva ideale
2.5

10000 2
Ricchezza
Ricchezza

1.5

5000 1

0.5

0 0
0 50 100 150 200 250 0 50 100 150
Popolazione Popolazione

Grafico 14: coefficiente di Gini per lo sugarscape con morte naturale e nascita di nuovi agenti (a) e
coefficiente di Gini per la prima versione dello sugarscape (b).

Il coefficiente di Gini per nel primo modello è 0,3024, mentre il coefficiente di Gini ottenuto con la
prima evoluzione del modello è 0,1797. questo conferma che la prima variante del modello è più
paritario nella distribuzione della ricchezza rispetto al modello base.

- 32 -
È interessante guardare come varia il coefficiente di Gini nel trascorrere degli anni, e dunque
all’interno di una stessa simulazione, per vedere se esso varia e poi si stabilizza, e in tal caso
valutare per quanto varia prima di stabilizzarsi, oppure se oscilla continuamente.
I valori dell’andamento del coefficiente G nel tempo nella prima evoluzione del modello e nel
primo modello sono riportati in Tabella 7. Entrambe le simulazioni sono state effettuate con un
numero di agenti iniziali pari a 240.

G prima evoluzione
Passo G primo modello
del modello
100 0,2322 0,3401
200 0,2193 0,3196
300 0,2100 0,3218
400 0,2038 0,3227
500 0,1971 0,3124
600 0,1995 0,3149
700 0,1989 0,3135
800 0,2006 0,3034
900 0,2009 0,3140
1000 0,2005 0.3085

Tabella 7: valori del coefficiente di Gini ad ogni 100 passi di una simulazione senza e una simulazione con nascita di nuovi agenti.

Com’è possibile notare dalla tabella il coefficiente G durante le due simulazioni si abbassa nel
tempo: da 0,23 al centesimo passo a 0,2 al millesimo passo nel primo modello e da 0,34 al
centesimo passo a 0,3 al millesimo passo nella prima evoluzione del modello. In entrambi i casi la
decrescita più sensibile avviene tra i primi duecento passi, dopo i quali esso inizia a variare di poco.

Dagli esiti tipici dei nostri esperimenti è possibile trarre alcune prime conclusioni:

- con l’introduzione della morte per vecchiaia e della nascita di nuovi agenti i risultati ottenuti
dalle prime simulazioni confermano che nel nostro mondo il metabolismo influenza in modo
sostanziale l’opportunità di vivere degli agenti, mentre la visuale è, a questo scopo, meno
incisiva.
- In secondo luogo, la prima variante dello SugarScape mostra un andamento della ricchezza
che è molto diverso da quello mostrato con la prima versione dello SugarScape:
l’andamento temporale della ricchezza non è più costantemente crescente ma cresce solo
inizialmente per poi stabilizzarsi e oscillare mantenendosi costante su un certo valore.
- La distribuzione della ricchezza infine non ha più un andamento a campana ma è come se
avessero tagliato in due la campana e avessero mantenuto solo la parte di destra, con il
risultato che la diversità è aumentata insieme al coefficiente di Gini.

- 33 -
9. SugarScape con riproduzione sessuata

Con l’introduzione delle riproduzione sessuata, con la possibilità di trasmissione di determinate


caratteristiche (il tutto, ovviamente, molto stilizzato), emerge un comportamento ancora differente
da quelli mostrati nel primo modello e dalla prima variante del modello.

9.1. La genetica

Dopo aver studiato il comportamento dello SugarScape e le variabili che contraddistinguono i nostri
agenti andiamo adesso ad apportare una sostanziale modifica al sistema e alle dinamiche in esso
contenute.
Fino a questo momento i nostri agenti non avevano la possibilità di riprodursi e generare nuovi
agenti, i nuovi agenti erano semplicemente immessi nel sistema in sostituzione a quelli morti. Ma la
realtà e molto differente da questa modellizzazione: nella vita reale le nascite non sono strettamente
legate al numero di morti ma sono legate a fattori, tra i quali la presenza di coppie, la fertilità e la
disponibilità a fare figli. Per rendere il nostro sistema sempre più vicino alla realtà biologica che ci
circonda, apporteremo altre modifiche al modello, introducendo la riproduzione sessuata degli
agenti. In questo modo andremo a creare una vera e propria dinamica di evoluzione del sistema e
potremo studiare le caratteristiche di tale dinamica. In questo modo sarà anche possibile calcolare la
reale capacità portante del sistema.

Gli esperimenti verranno effettuati in un primo momento sul mondo con caratteristiche identiche a
quelle fino ad ora utilizzate, verranno poi ripetuti gli stessi esperimenti anche con un mondo con
una diversa quantità di risorse in modo da valutare quanto la capacità portante del sistema vari con
il variare delle risorse.
La possibilità di ripetere la stessa identica simulazione nonostante tutte le variabili casuali che ne
fanno parte, ci è data dal fissaggio di un seme random: un parametro impostato inizialmente e che
se riutilizzato è in grado di richiamare tutte le variabili casuali e ripeterle in un successivo
esperimento.

Passiamo ora alla descrizione delle modifiche apportate al modello.


In primo luogo, i nostri agenti per poter operare geneticamente devono arricchirsi di nuovi
fondamentali attributi. I nuovi campi nel vettore di strutture sono i seguenti:

 sesso: definisce il sesso dell'agente, casualmente ogni agente è maschio (0) o femmina (1);
 pubertà: età minima che un agente deve avere per poter essere fertile: sia per i maschi che
per le femmine l’età fertile varia (ed è dunque un numero casuale) tra 12 e 15;
 pausa: soglia massima entro la quale un agente è fertile e dunque può avere figli:
per i maschi l’andropausa va da 50 a 60,
per le femmine la menopausa va da 40 a 50;
 scorta: la scorta di un agente che prima era inizialmente uguale a 10 per tutti gli agenti, ora
varia tra 10 e 40;
 Scorta iniziale: all'inizio della propria vita all'agente viene assegnata una scorta, e questo
valore iniziale viene tenuto in memoria in quanto entra a far parte
dell'algoritmo di riproduzione.

- 34 -
Le regole per la riproduzione sono semplici e sono le seguenti:

 Per definizione un agente è fertile se soddisfa entrambe queste condizioni:


o ha un’età maggiore della sua pubertà e minore della sua menopausa o andropausa, cioè è
in età fertile;
o ha una scorta iniziale che è almeno il doppio della sua scorta iniziale.
 L’agente selezionato, dopo essersi mosso e aver “mangiato”, se è fertile, ha la possibilità di
ispezionare il territorio a lui circostante per trovare un partner per riprodursi;
 Un agente che cerca un partner, un agente per riprodursi, deve trovarlo nel suo intorno
(definito come l’insieme dei suoi primi 8 vicini - in alto, in basso, a desta, a sinistra e in
diagonale di una cella-): il partner deve essere di sesso opposto e deve a sua volta essere
fertile; se nel suo intorno l’agente trova più di un possibile partner allora sceglierà a caso tra
quelli presenti; se non lo trova si passa al turno successivo.
 Infine, per procreare un nuovo agente “figlio”, deve esistere almeno un posto vuoto (cioè
una cella non occupata da nessun agente) nell’intorno di almeno uno dei due genitori. Se
esistono più posti vuoti possibili, la “coppia” sceglierà casualmente dove posizionare il
nuovo agente figlio; se non esistono posti vuoti nel loro intorno si passa al turno seguente.

Se si verificano queste tre condizioni (fertilità dell’agente selezionato, presenza di un partner fertile
e presenza di una cella vuota nell’intorno dei due genitori), allora l’agente selezionato in quel turno
genera un nuovo agente con il partner e sceglie casualmente in quale delle celle vuote presenti nel
loro intorno posizonarlo.
Il procedimento relativo alla verifica della possibilità di riprodursi è riportato in figura 7.

L’agente selezionato in quel turno fa la sua mossa (si sposta e mangia)

È in età fertile?

NO SI
? ? ?
C’è un agente nel mio intorno? ?  ?
? ? ?
NO SI

È fertile e di sesso opposto?

NO SI ? ? ?
? ?  ?
Intorno a me e al mio partner c’è un posto vuoto? ?  ? ?
? ? ?
NO SI

NON FACCIO NULLA (TURNO SUCESSIVO) CREO UN NUOVO AGENTE

Figura 7: processo di verifica riproduttiva

Se il processo di verifica riproduttiva non va a buon fine si passa al turno successivo, e quindi alla
selezione casuale di un altro agente che faccia la propria mossa. Nel caso, invece, che la verifica
vada a buon fine allora avremo la creazione del nuovo agente. Ma che caratteristiche avrà il nuovo
agente?

- 35 -
9.2. Regole di ereditarietà biologica

Analizziamo ora il momento fondamentale della dinamica legata all'evoluzione degli agenti nel
nostro sistema: l'algoritmo genetico utilizzato nel nostro sistema.

In generale, un algoritmo9 genetico parte da un certo numero di possibili soluzioni, gli individui,
chiamate popolazione, e le fa evolvere nel corso dell’esecuzione: ad ogni iterazione l’algoritmo
genetico opera una selezione di individui della popolazione corrente, e li utilizza per generare nuovi
elementi della popolazione stessa, che andranno a sostituire un pari numero di individui già
presenti, e a costituire in questo modo una nuova popolazione per l’iterazione (o generazione)
seguente.
La successione di generazioni evolve verso una soluzione ottima del problema assegnato.
L’evoluzione delle generazioni è ottenuta attraverso una ricombinazione parziale delle soluzioni
(ogni individuo trasmette parte del suo patrimonio genetico ai propri discendenti) e l’introduzione
di mutazioni10 casuali nella popolazione di partenza (sporadicamente nascono individui con
caratteristiche non comprese tra quello presenti nel corredo genetico della specie originaria).
Al termine dell’evoluzione, la popolazione delle soluzioni viene analizzata e vengono tenute solo le
soluzioni che risolvono il problema nel migliore dei modi, ossia quegli individui che hanno le
qualità più adatte a garantire una maggiore probabilità di sopravvivenza e di riproduzione
nell’ambiente in cui si trovano. Queste soluzioni saranno poi sottoposte ad una nuova fase di
evoluzione e così via.
Alla fine ci si aspetta di trovare una popolazione di soluzioni che riescano a risolvere il problema
posto in modo adeguato. Non esiste tuttavia il modo di decidere a priori se l’algoritmo sarà
effettivamente in grado di trovare una soluzione accettabile, né se la soluzione trovata sia veramente
quella “ottima”.

Nel nostro caso l’algoritmo genetico è molto più elementare.


Il nostro algoritmo genetico parte da una popolazione composta da soli due individui, da due
possibili soluzioni. Ognuno di questi due individui è formato da due caratteristiche, due geni:
visuale e metabolismo. La selezione di individui della popolazione operata è la semplice selezione
degli unici due individui appartenenti alla popolazione e non esistono generazioni, o meglio esiste
una sola generazione, che è anche la soluzione finale.
La ricombinazione delle soluzioni, il crossover, opera selezionando il gene A dal primo individuo e
il gene B dal secondo individuo, oppure vice versa, il gene B dal primo individuo e il gene A dal
secondo individuo, come rappresentato in figura 8.
Nel nostro modello poi non esistono le mutazioni casuali, e non avrebbe nemmeno senso
implementarle in quanto l’algoritmo genetico non evolve in generazioni.
Il nuovo individuo ottenuto in questo modo rappresenta la nostra soluzione finale.

7
Algoritmo: metodo per la soluzione di un problema adatto ad essere implementato sotto forma di programma. Esso si può definire
come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine, un insieme di
passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito.
10
Mutazione: nell’accezione più generale del termine una mutazione è una variazione nel materiale genetico (sia DNA che RNA).

- 36 -
Mamma Papà
ScortaIniziale ScortaIniziale

Visuale Meta Visuale Meta

Figlio

Scorta Iniziale
&
Vis Met

or
Vis Met
or

Vis Met
or
Vis Met

Figura 8: inizializzazione della scorta iniziale e operatore di crossover su vista e metabolismo.

Come è facilmente comprensibile dall’immagine il nuovo agente avrà un DNA formato da due soli
cromosomi: la visuale e il metabolismo. Il nascituro viene creato nello stesso modo in cui vengono
creati gli agenti iniziali, con la differenza che la scorta iniziale è data dalla somma di metà scorta
iniziale dei genitori, dai quali viene poi prelevata la parte data al figlio, mentre la vista e il
metabolismo sono il risultato ottenuto da un operatore di crossover sui genitori. Questo operatore
segue la regola mendeliana, per cui il nuovo agente erediterà l’abilità visiva da uno dei due genitori
con probabilità uniforme 0,5, ed erediterà il metabolismo da uno dei due genitori sempre con
probabilità uniforme 0,5. La posizione dell’agente, infine, è quella trovata dai due genitori prima
della procreazione.

Adesso che abbiamo analizzato il processo di riproduzione e l’algoritmo genetico che genera nuovi
agenti, è possibile dare il via agli esperimenti.

- 37 -
9.3. Quinto esperimento: comportamento delle principali caratteristiche

Con il nostro primo esperimento riguardante la genetica andiamo inizialmente ad osservare il


comportamento delle principali caratteristiche come avevamo fatto per la prima versione dello
SugarScape.
A questo scopo il nostro primo ciclo di esperimenti è stato effettuato con un numero di agenti
iniziali pari a 240, circa la capacità portante del sistema senza riproduzione. I risultati che
riportiamo sono di una singola simulazione ma possono essere considerati rappresentativi di tutti i
lanci che abbiamo effettuato.

 Andamento demografico nei mille passi della simulazione.

Andamento demografico
1100

1000

900

800

700
Agenti vivi

600

500

400

300

200

100
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico 15 a: andamento del numero di agenti vivi nel tempo

Come si può osservare dal grafico l’andamento demografico presenta una forte crescita iniziale e
una successiva oscillazione attorno al valore corrispondente a 850 agenti.
È dunque un sistema oscillante ed il suo andamento temporale è simile a quello di un pendolo, ma
torneremo ad analizzare questa (vera) capacità portante del sistema nel prossimo paragrafo.

- 38 -
 Andamento temporale della visuale e del metabolismo

Andamento visuale e metabolismo


5

4.5

3.5

3
Visuale
Metabolismo
2.5

1.5

1
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico 16: andamento della media della visuale e della media del metabolismo degli agenti vivi ad ogni passo.

Il grafico mostra come nel tempo, gli agenti che sopravvivono tendono ad avere il massimo della
visuale e il minimo del metabolismo.
Il primo scopo è più faticoso da ottenere, infitti la visuale media tende sempre più a 5 anche se il
suo massimo valore è 6. Un basso metabolismo invece è ottenuto quasi subito: nei primi 200 anni di
vita la media del metabolismo degli agenti diminuisce drasticamente e molto più velocemente di
quanto non faccia la visuale. Da quel momento in poi il metabolismo rimane stabile a uno fino alla
fine della simulazione.
Il metabolismo di ogni agente può variare da 1 a 5 ma, come abbiamo scoperto precedentemente, gli
agenti con metabolismo 5 muoiono molto velocemente in quanto nel mondo le colline di zucchero
possono contenere al massimo quattro unità di zucchero. Gli agenti con metabolismo 4 invece
hanno una piccolissima probabilità in più di sopravvivere ma devono essere fortunati e cadere
inizialmente in cima ad una collina, o avere una scorta iniziale molto alta che gli permette di
raggiungerla. Ad ogni modo, una volta raggiunta la collina è comunque difficile che sopravviva a
lungo e la sua probabilità di sopravvivenza diminuisce con l’aumentare del numero di agenti,
perché maggiore è il numero di agenti, maggiore è l’affollamento sulle colline e più difficile sarà
per l’agente spostarsi e trovare celle contenenti quattro unità di zucchero. Con l’andare del tempo
quindi tenderà ad usufruire sempre più della sua scorta iniziale e morirà quando essa sarà terminata.
Sarà più difficile per lui anche la riproduzione in quanto una delle condizioni affinché un’agente
abbia la possibilità di riprodursi è il possesso di una quantità di scorta almeno uguale al doppio della
sua scorta iniziale. Se la sua scorta iniziale è alta avrà più probabilità di raggiungere la cima della
collina, ma avrà come contro minori possibilità di accumulare scorta per potersi riprodurre. Un
agente con metabolismo quattro dunque tenderà a morire senza generare molti figli, di conseguenza,
dopo un certo periodo di tempo, il suo gene (metabolismo 4) tenderà a morire con lui in quanto
parteciperà sempre meno spesso alla selezione nell’algoritmo genetico.
Un ragionamento analogo può essere effettuato per gli agenti con metabolismo pari a tre, due e una
unità di zucchero, con la conclusione che l quantità di metabolismo che permette agli agenti di
sopravvivere più a lungo e di riprodursi è quella che ha più probabilità di essere selezionata per la

- 39 -
creazione dei figli, che avranno le caratteristiche dei genitori. Dunque alla fine il gene metabolismo
1 vince sugli altri e a poco a poco tutti gli agenti finiscono per arrivare a tale risultato.
Per la visuale il ragionamento è analogo ma, dato che come abbiamo spiegato precedentemente, la
visuale è una variabile che influenza meno del metabolismo la sopravvivenza degli agenti (ipotesi
confermata più volte), essa tende verso il suo valore “ottimo” meno velocemente. Possiamo dunque
riconfermare la sua secondaria importanza per la sopravvivenza in questo mondo.
Per avere un’ulteriore conferma di quanto appena descritto, mostriamo un ulteriore grafico
riguardante l’andamento medio del metabolismo e della vista degli agenti fertili (Grafico 17).

Media metabolismo e visuale degli agenti fertili


5

4.5

3.5

2.5

1.5

1
0 50 100 150 200 250 300 350 400 450 500
Passi

Grafico 17: andamento medio della visuale e del metabolismo degli agenti fertili

Confrontando questo grafico con quello relativo all’andamento medio della visuale e del
metabolismo si può notare che la media del metabolismo degli agenti fertili parte da 1,75 per
abbassarsi al minimo (che equivale a uno) nei primi 150 passi, mentre la media del metabolismo di
tutti gli agenti parte da 2,40 per abbassarsi e arrivare al minimo in 200 passi. Per quanto riguarda gli
agenti fertili quindi, questa stabilizzazione avviene in un tempo minore.
Per quanto riguarda la visuale, invece, il comportamento non varia sensibilmente che si analizzi la
curva delle medie di tutti gli agenti o la curva della media degli agenti fertili; in entrambi i casi
parte da tre per tendere, più lentamente rispetto al metabolismo, a cinque senza comunque arrivarci,
e le due curva hanno un andamento molto simile.

- 40 -
 Andamento temporale degli agenti nati, degli agenti morti e degli agenti fertili.

Andamento della natalità, della mortalità e della fertilità


600
Nati
Morti
500 Fertili

400
Agenti

300

200

100

0
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico 18: andamento del numero di agenti morti (linea nera), del numero di agenti nati (linea rossa) e del numero di agenti fertili
(linea azzurra) ad ogni passo.

La prima cosa che salta agli occhi guardando questo grafico è che il numero di nati e il numero di
morti ad ogni passo si rincorre sovrapponendosi e si mantiene sempre allo stesso livello. Per
analizzare più in dettaglio questi due andamenti li proponiamo di seguito separati dall’andamento
della fertilità.
Natalità e mortalità ad ogni passo
25
Nati
Morti

20

15
Agenti

10

0
0 100 200 300 400 500 600 700 800 900 1000
Passi

Da questa immagine si capisce meglio che inizialmente sia i nati che i morti sono pochi, poi – prima
il numero di nati e poi il numero di morti – inizia ad aumentare e ad oscillare intorno allo stesso
valore.

- 41 -
L’andamento più interessante è quello degli agenti fertili; esso ha una breve caduta nei primi
cinquanta passi, una crescita esagerata (fino a 500 agenti) fino al passo 130 e poi inizia un
movimento oscillatorio simile a quello di un pendolo con attrito che tende ad un punto di equilibrio,
e simile all’andamento demografico visualizzato nel grafico 15. Approfondendo meglio
l’andamento degli agenti fertili abbiamo messo in relazione l’andamento della fertilità con il totale
degli agenti nel sistema, abbiamo cioè sovrapposto le due curve e visualizzate in un singolo grafico,
che mostriamo di seguito:
Agenti fertili rispetto al totale degli agenti ad ogni passo
1200
Totale agenti
Agenti fertili
1000

800
Agenti

600

400

200

0
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico19 : Andamento della fertilità in relazione all’andamento demografico

Da questo grafico si può osservare non solo che l’andamento degli agenti fertili è simile a quello del
totale degli agenti ma che i due presentano dei picchi e delle valli negli stessi istanti di tempo.
Torneremo alla discussione di questi andamenti in seguito.

 Andamento della ricchezza.

Andamento della Ricchezza


300
Media
Mediana
250 Minimo
Massimo

200
Ricchezza

150

100

50

0
0 100 200 300 400 500 600 700 800 900 1000
Passi

Grafico 20: media, mediana, minimo e massimo valore della ricchezza degli agenti ad ogni passo.

Il grafico relativo all’andamento della ricchezza parte da un valore medio iniziale di 25 (valore che
conferma il corretto funzionamento dell’implementazione in quanto le scorte iniziali variano da un
minimo di 10 unità di zucchero ad un massimo di 40 unità di zucchero: in media esattamente 25),

- 42 -
ha una crescita iniziale e comincia a stabilizzarsi dopo il centesimo passo attorno ad un valore di
circa 40 unità di zucchero. Anche in questo caso dunque, come per l’andamento della natalità, della
mortalità, e della fertilità, si presenta una condizione di inizio stabilizzazione attorno al centesimo
passo.
È curioso notare che, mentre gli andamenti della ricchezza minima e della ricchezza massima ad
ogni passo mostrano un’oscillazione irregolare, l’andamento della media e della mediana della
ricchezza mostra un’oscillazione più morbida e regolare. Utilizziamo in questa sede l’aggettivo
irregolare per descrivere un andamento oscillatorio che, all’interno di ogni sua singola oscillazione,
è composto da altre oscillazioni e che presenta picchi e cali duri, rigidi, per dirla in termini grafici,
“a punta”. Utilizziamo invece l’aggettivo regolare per descrivere un andamento oscillatorio che ha
onde di forme morbide, in termini grafici una oscillazione è una curva senza “spigoli”. Pensiamo
che questa differenza sia dovuta al fatto che la curva del minimo e la curva del massimo sono
disegnate considerando singoli valori (la ricchezza minima/massima ad ogni passo), mentre le altre
due curve sono disegnate considerando la media in un caso e la mediana nel secondo caso di un
insieme ampio di valori.
È altrettanto curioso notare che la curva rappresentante il massimo della ricchezza sembra avere un
suo minimo settato al valore 100 unità di zucchero. Sembra che essa cerchi di raggiungerlo e che
nel momento in cui lo raggiunge ci sia una forza che la respinge verso l’alto, per poi lasciarla
andare e lasciarla tendere nuovamente verso il suo minimo. La stessa cosa, ma in senso opposto, si
può dire della curva raffigurante il minimo della ricchezza: essa sembra avere un suo massimo,
sembra che cerchi di raggiungerlo e che quando lo raggiunge ci sia una forza che le imprime una
spinta verso il basso, per poi lasciarla andare e lasciarla tornare a tendere verso il suo massimo.
Si può spiegare il curioso andamento della curva del massimo della ricchezza considerando il fatto
che, dopo un primo periodo le scorte di partenza degli agenti sono molto simili e un agente che si
riproduce tenderà ad avere una scorta di 100 unità di zucchero, il “minimo del massimo”. Le
crescite dal minimo sono date dagli agenti che non sono in età fertile e dunque non si riproducono e
non danno quindi metà della loro scorta iniziale al figlio.
Analogamente, si può trovare una risposta al comportamento della curva di minimo analizzando la
possibile vita di un agente che cade in un punto dello sugarscape in cui le risorse del terreno sono
pari ad 1 e che, non avendo una vista sufficientemente lunga passa il suo tempo in quel punto
perché non riesce mai a raggiungere posti migliori. Una volta che le dinamiche del sistema hanno
portato il metabolismo degli agenti intorno al suo valore minimo, è poi improbabile che nascano
agenti con metabolismo diverso da 1 o da 2. Un agente che vive con metabolismo 1 in un'area con
quantità di risorse pari a 1 non morrà per mancanza di risorse in quanto ogni anno perde un valore
unitario ma, allo stesso tempo, ogni anno lo riguadagna. Questo ipotetico agente non accrescerà mai
la sua quantità ricchezza e vivrà con quella che gli è stata assegnata in partenza, fino a quando non
muore di vecchiaia.
Nel nostro algoritmo genetico abbiamo definito la ricchezza iniziale di un'agente come la somma di
metà della ricchezza iniziale dei propri genitori. Dopo un certo numero di passi la selezione
all'interno del modello avrà portato ad avere degli agenti molto simili che saranno la conseguenza
del processo di selezione venutosi a formare nei primi 200 anni circa del modello. Da qui in poi la
quantità di risorse di partenza dei nostri agenti sarà molto simile quindi il nostro agente ipotetico la
porterà fino alla morte.
Le oscillazioni sono date dal fatto che nel sistema non ci sono solo agenti con metabolismo 1, il
valore medio del metabolismo (1,12) ci dice che, malgrado siano la stragrande maggioranza gli
individui con metabolismo 1, sono presenti anche agenti con metabolismo 2. Quando questi
nascono e vivono sulle collinette poco succede in quanto la loro posizione sullo sugarscape
permette loro di sopravvivere, ma quando qualcuno di questi finisce nella zona con risorse pari ad 1
lentamente comincia il proprio processo di avvicinamento alla morte. Una volta morto il sistema
tornerà ad avere come punto massimo di minimo il valore relativo alle scorte iniziali degli agenti
con metabolismo 1, ed ecco spiegato il perché di questo punto “massimo del minimo”.

- 43 -
 Distribuzione finale della ricchezza

Distribuzione della ricchezza


250

200

150
Frequency

100

50

0
0 20 40 60 80 100 120
Zucchero

Grafico 21: distribuzione finale della ricchezza degli agenti.

L’istogramma rappresentato nel grafico qui sopra mostra una distribuzione finale della ricchezza
che assomiglia ad una distribuzione a campana con una coda destra lunga e una coda sinistra
pressoché inesistente. Essa assomiglia alla “semi” curva a campana risultante dalla prima variante
dello SugarScape, quella con sostituzione degli agenti morti, con l’aggiunta – sebbene breve – di
una coda sinistra. Di conseguenza questa distribuzione essere un po’ più paritaria rispetto a quella
del modello precedente; questa osservazione ci è confermata dal coefficiente di Gini che, per questa
simulazione, è risultato 0,1662, ma che anche negli altri lanci è sempre risultato vicino a questo
valore e comunque sempre più basso rispetto ai coefficienti degli esperimenti con le altre versioni
del modello. Dato che il coefficiente di Gini è una misura di ineguaglianza, più il suo valore è
basso, più equamente è distribuita la ricchezza all’interno del nostro mondo; e 0,16 si può
considerare un buon risultato, almeno rispetto a quelli ottenuti precedentemente. Lo SugarScape con
riproduzione sessuata risulta quindi essere più equo nella distribuzione delle risorse di quanto lo sia
lo SugarScape con sostituzione degli agenti e molto più equo dello SugarScape base.
È da tenere in considerazione comunque che il coefficiente di Gini sopra riportato è stato calcolato
alla fine della simulazione, ma il suo andamento non è sempre costante all’interno della stessa.
Infatti, come tutti gli altri parametri considerati, anche il coefficiente di Gini ha un iniziale periodo
di assestamento, in cui il suo valore risulta più elevato (e quindi la ricchezza è meno equamente
distribuita), e raggiunge poi un sostanziale stabilità dopo circa 200 passi; stabilità che poi mantiene
nel tempo. L’andamento temporale del coefficiente di Gini è rappresentato nel grafico sottostante.

- 44 -
Andamento del coefficiente di Gini
0.26

0.24

0.22

0.2

0.18

0.16

0 50 100 150 200 250 300 350 400 450 500


passi

Grafico 22: andamento del coefficiente di Gini

Passiamo ora ad analizzare come varia il numero di agenti femmine e di agenti maschi nel corso
della simulazione. È facilmente prevedibile che essi siano molto simili tra loro, in primo luogo
perché ogni agente, sia quelli inizializzati e immessi nel sistema, sia quelli che nascono durante il
decorso della simulazione, hanno una equa probabilità (0,5) di essere maschi o femmine. In secondo
luogo, una disparità fra queste due misure darebbe luogo a meno nascite rispetto a quelle che il
sistema mostra. L’andamento della distribuzione dei sessi è riportato nel grafico 23.

Distribuzione dei sessi


600

500

400
Femmine
Maschi
Agenti

300

200

100

0
0 100 200 300 400 500 600 700 800 900 1000
passo

Grafico 23: andamento della distribuzione dei sessi.

Quello che avevamo previsto è quello che in effetti è successo, questi valori rimangono sempre
attorno alla media del 50%, ma dal grafico appare una informazione aggiuntiva che non avevamo
previsto a priori: l’andamento del numero di agenti maschi e quello di agenti femmina, se presi
singolarmente mostrano un semplice andamento oscillatorio, ma se considerati insieme è subito
visibile che essi si intrecciano e sembra che si rincorrano disegnando un andamento che ricorda la
dinamica del modello lineare di due popolazioni interagenti con β1 e β2 Numeri complessi,
immaginari congiunti.

- 45 -
Ovviamente le oscillazioni non sono regolari come quelle del modello lineare, ma presentano
comunque una vaga somiglianza.

 Visualizzazione dello stato dello SugarScape al termine della simulazione:

Sugarscape

10

15

20

25

30

35

40

45

50
5 10 15 20 25 30 35 40 45 50

Figura 9: Sugarscape

In questo grafico abbiamo voluto mostrare lo stato del nostro mondo dopo mille passi: le crocette
azzurre indicano gli agenti maschi non fertili, i cerchi azzurri indicano i maschi fertili, le croci rosse
le femmine non fertili e i cerchi rossi le donne fertili.
La distinzione fra le due collinette è ancora visibile, infatti il blu chiaro indica zucchero pari a 0, il
blu indica una unità di zucchero, il verde due, l’arancione tre e il rosso scuro (assente) quattro. Però
non sono più così ben distinguibili i gradini delle colline.
La popolazione è migrata sulle due colline e sembra essere equamente distribuita tra le due. Questo
risultato finale è quello tipico, ma è interessante informare del fatto che, dopo che gli agenti sono
paracadutati nel mondo – e che sono quindi sparsi in modo casuale occupando tutto il mondo – alle
volte è possibile osservare che inizialmente, quando sono ancora in pochi, è possibile osservare una
migrazione verso solo una delle due colline. Durante i nostri esperimenti è capitato più volte che gli
agenti, durante i primi passi, occupassero solo una delle due colline, lasciando la seconda inabitata,
e che successivamente, con l’aumentare del numero di agenti, andassero a popolare via via anche la
seconda collina.

Da una osservazione e un’analisi globale del sistema si può notare che nei primi 100-150 passi il
sistema ha un comportamento esplosivo, mentre subito dopo inizia a stabilizzarsi e a tendere verso i
suoi valori “ottimali”; ottimali ovviamente in relazione alle caratteristiche dell’ambiente che stanno
abitando.
All’inizio infatti la diversità tra agenti è più ampia mentre con il trascorrere simulato del tempo essi
tendono ad essere mediamente sempre più uguali.
Quando la diversità è alta si hanno valori di ricchezza esageratamente alti rispetto alla media, esiste
qualcuno che è effettivamente molto più ricco della media (250 unità di zucchero rispetto alle
successive 100 unità di zucchero come ricchezza massima quando essa si stabilizza), un numero di
agenti fertili pari a 500, quando successivamente la media si aggira intorno ai 400, e una
media/mediana della ricchezza che fa una specie di onda iniziale, cresce e si riabbassa nei primi
cento passi, per poi stabilizzarsi intorno a 40 unità di zucchero.

- 46 -
9.4. Sesto esperimento: capacità portante del sistema

Come abbiamo visto nel paragrafo predente, l’andamento demografico, dopo un primo periodo di
assestamento, presenta una continua oscillazione attorno al valore 850 agenti. In generale, anche
negli alti lanci, la capacità portante del sistema si aggira tra gli 800 e i 900 agenti. Più precisamente,
da un ciclo di cinque simulazioni è risultata una capacità portante del sistema pari a 836 ± 14 agenti.
Il nostro è dunque un sistema oscillante che presenta un andamento temporale simile a quello di un
pendolo.
Per verificare se l’oscillazione è smorzata come quella di un pendolo in presenza di attrito, che
tende allo stato di equilibrio, oppure è continua nel tempo (come quella di un pendolo che, in
assenza di attriti, continua le sue oscillazioni nel tempo senza che esse diminuiscano a poco a poco
la loro forza fino a fermarsi - comportamento tipico di un sistema dissipativo) abbiamo continuato
la stessa identica simulazione per altri mille passi, ottenendo così la stessa simulazione per un
maggior periodo di tempo, 2000 passi.

La possibilità di poter ripetere la stessa identica simulazione ci è data dall’utilizzo di una particolare
funzione di Matlab che permette di impostare un seme random che consente di riprodurre la stessa
serie di numeri casuali utilizzati nelle funzioni.
La possibilità, invece, di continuare la stessa simulazione dalle sue condizioni finali deriva
dall’implementazione di una nuova funzione che è identica a quella principale ma che invece di
inizializzate le matrice del mondo, della capacità e delle posizioni, il vettore di strutture relativo agli
agenti e tutti i vettori di interesse, li carica direttamente da file e riparte da quelli.
In altre parole alla fine della prima simulazione (quella che parte dal passo 1), anziché farci
restituire come output i grafici finali ed i valori di nostro interesse, ci facciamo scrivere su file di
testo come sono strutturate le matrici (inizializzate a inizio simulazione) in quell’istante di tempo
(ad esempio al passo 1000). Successivamente, se se ne presenta la necessità, possiamo caricare i file
scritti alla fine della “prima” simulazione e continuarla nel tempo (dal passo 1000 fino al passo di
nostro interesse).
Il risultato di questo continuo di simulazione è riportato di seguito di seguito (Grafico 15 b)11

AndamentoDemografico
1100

1000

900

800
Agenti vivi

700

600

500

400

300

200
0 200 400 600 800 1000 1200 1400 1600 1800
passi

Grafico 15 b: andamento degli agenti vivi ad ogni passo.


Sugarscape 2000 passi, 240 agenti iniziali, seme random 8765

11
Per rendere ripetibili gli esperimenti riportiamo di seguito le funzioni utilizzate:
sugarscape0 (1000, 240) con seme random 8765 e ContinuaSugarscape0 (2000,5000), stesso seme random.

- 47 -
L’immagine riportata fa pensare che questo sistema sia simile a quello di un pendolo senza attrito,
che continua ad oscillare nel tempo senza mai smorzarsi e tendere ad un punto di equilibrio.
È però da notare che in corrispondenza del passo 1200 c’è una specie di piccolo assestamento.
Dopo i primi passi in cui il sistema si assesta e fino a quel momento i valori continuano ad oscillare
tra 800 e 900 agenti, tra i passi 1100 e i 1300 invece la valle disegnata dall’andamento è meno
marcata delle precedenti. Successivamente poi il sistema ritorna ad oscillare tra gli 800 e i 900
agenti.
Per verificare se questo assestamento è un caso oppure se questo assestamento si ripete nel tempo, e
se si ripete nel tempo, se ha una regolarità nel ripetersi, abbiamo continuato la stessa simulazione
fino ad arrivare al passo 5000. Il risultato dell’andamento demografico è riportato di seguito.

Andamento demografico
1100

1000

900

800

700
Agenti vivi

600

500

400

300

200

100
0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000
Passi

Grafico 15 c: andamento demografico,


Sugarscape 5000 passi, 240 agenti iniziali, seme random 8765

Il continuo di questa simulazione ci mostra che piccoli assestamenti sono presenti più di una volta
durante la simulazione. Essi però non sembrano presentare nessun tipo particolare di regolarità.
È infine da notare che le oscillazioni non sono regolari ma presentano delle oscillazioni nelle
oscillazioni, anche se non queste oscillazioni per così dire “secondarie” sono anch’esse irregolari e
non possono certamente essere paragonate alle onde di Elliott.

- 48 -
9.4.1 Capacità portante al variare del numero di agenti iniziali

Per analizzare invece la capacità portante del sistema in relazione al numero di agenti inizialmente
immessi, lanciamo la stessa simulazione di quella precedente prima con 100 agenti poi con 400
agenti iniziali anziché i precedenti 240. I risultati sono riportati di seguito; gli stessi grafici sono
riportati prima per il lancio con 100 agenti e affianco la stessa caratteristica ma per il lancio con 400
agenti. Ricordiamo che questi due lanci possono essere singolarmente confrontati in quanto
rappresentano lo stesso esperimento in condizioni diverse.

Andamento demografico Andamento demografico


1200
1100

1000
1000
900

800 800

Agenti vivi
Agenti vivi

700
600
600

400 500

400
200
300

0 200
0 100 200 300 400 500 600 700 800 900 1000 0 200 400 600 800 1000
Passi Passi
24: Sugarscape 1000 passi e 100 agenti (a sinistra) 1000 passi e 400 passi (a destra), seme random 8765.
Andamento demografico.

L’andamento demografico della simulazione con 100 agenti oscilla intorno a 950 agenti e sembra
essere aumentato rispetto alla capacità portante della simulazione con 240 agenti – che d’ora in
avanti chiameremo “tipica”- che era di 850 agenti.
L’andamento demografico della simulazione con 400 agenti invece oscilla attorno a 900 agenti e
sembra essere diminuito rispetto alla precedente capacità portante, ma è comunque più elevata di
quella della simulazione tipica.
Sembra dunque che non ci sia una stretta correlazione tra il numero di agenti iniziali immessi nel
mondo e il numero di agenti che il mondo è in grado di ospitare.

Analizziamo ora le altre caratteristiche principali.

Andamento della Ricchezza Andamento della Ricchezza


250 200
Media Media
180 Mediana
Mediana
Minimo Minimo
200 160
Massimo Massimo
140

150 120
Ricchezza
Ricchezza

100

100 80

60

50 40

20

0 0
0 100 200 300 400 500 600 700 800 900 1000 0 100 200 300 400 500 600 700 800 900 1000
Passi Passi

Grafico 25: Sugarscape 1000 passi e 100 agenti (a sinistra), 400 agenti (a destra), seme randam 8765.
Andamento della ricchezza media (linea blu), mediana (linea nera), minima (linea rossa) e massima (linea arrurra).

- 49 -
La prima delle caratteristiche esaminate riguarda l’andamento della ricchezza nel tempo. Essa
sembra non subire rilevanti modifiche al variare del numero di agenti e, in entrambi i casi, dopo un
picco iniziale continua ad aggirarsi intorno al valore 30 per lo sugarscape con 100 agenti, 35 per lo
SugarScaper tipico e 40 per lo SugarScape con 400 agenti.
È presente un lievissimo aumento della ricchezza media all’aumentare del numero di agenti ma non
è proporzionale e probabilmente è dovuto al fatto che con pochi agenti iniziali, in questi
esperimenti, la capacità portante del sistema è lievemente maggiore delle altre e, maggiore è il
numero di agenti vivi, minore è la ricchezza di ognuno. Questo perché il mondo cresce
indipendentemente dal numero di agenti e, dopo un periodo di assestamento in cui gli agenti hanno
la possibilità di consumare le proprie scorte e raggiungere le colline, gli agenti sopravvivono con
quello che produce il mondo. Ovviamente quando si riproducono i nuovi agenti hanno una scorta
iniziale che sarà maggiore della media delle scorte degli agenti che sono già nati da alcuni passi.
Forse questo spiega anche il motivo delle oscillazioni della capacità portante del sistema:
compaiono delle crescite in concomitanza delle crescite dell’andamento delle nascite, e dei cali
quando compaiono dei cali nelle nascite.

Agenti nati, morti e fertili ad ogni passo Andamento dell nascite, della mortalità e della fertilità
600 600

500 500

400 400
Agenti
Agenti

300 300
Nati
Morti Nati
200 Fertili 200 Morti
Fertili

100 100

0 0
0 100 200 300 400 500 600 700 800 900 1000 0 100 200 300 400 500 600 700 800 900 1000
Passi Passi

Grafico 26: sugarscape con 1000 passi e 100 agenti iniziali (a sinistra), 400 agenti iniziali (a destra), seme random 8765.
Andamento della natalità (linea rossa), della mortalità (linea nera) e della fertilità (linea azzurra) degli agenti.

L’andamento della fertilità non subisce molte variazioni, nel senso che continua comunque ad
oscillare inizialmente tra i 300 e i 600 agenti per tendere poi sempre più verso i 400 agenti fertili.
Una differenza però è che con 100 agenti l’oscillazione si smorza più velocemente che non rispetto
all’oscillazione presentata nello SugarScape con 400 agenti. Questo comportamento è speculare a
quello dell’andamento demografico: il sistema con più agenti iniziali impiega più tempo a
raggiungere la sua stabilità.

Il successivo confronto riguarda la distribuzione finale della ricchezza e i relativi coefficienti di


Gini (Grafico 28 a e Grafico 28 b).

- 50 -
Distribuzione della ricchezza Distribuzione della ricchezza
350 350

300 300

250 250

Frequency
200 200
Frequency

150 150

100 100

50 50

0 0
10 20 30 40 50 60 70 80 90 0 20 40 60 80 100 120 140
Zucchero Zucchero

Grafico 27 a: sugarscape con 1000 passi e 100 agenti iniziali (a sinistra), 400 agenti iniziali (a destra), seme random 8765.
Distribuzione finale della ricchezza.
4 4
x 10 Ricchezza: curva di Lorenz e curva di equi-distribuzione x 10 Ricchezza: curva di Lorenz e curva di equi-distribuzione
3.5 3.5
Curva di Lorenz Curva di Lorenz
3 Curva ideale 3 Curva ideale

2.5 2.5

2 2
Ricchezza
Ricchezza

1.5 1.5

1 1

0.5 0.5

0 0
0 100 200 300 400 500 600 700 800 900 1000 0 200 400 600 800 1000
Popolazione Popolazione

Grafico 28 b: SugarScape 1000 passi, 100 agenti iniziali (a sinistra), e 400 agenti iniziali (a destra), seme 8765.
Coefficiente di Gini: 0,1677 (a sinistra) e 0,1655 (a destra).

Entrambi gli istogrammi mostrano una distribuzione finale della ricchezza con un andamento che
ricorda la distribuzione gaussiana. Nel primo caso però l’andamento ha una forma più a campana
rispetto al secondo, diciamo che nell’istogramma riguardante lo SugarScape con 100 agenti la coda
sinistra è più consistente rispetto a quella dell’istogramma riguardante lo SugarScape con 400
agenti. Tuttavia in entrambi i casi la maggior parte degli agenti ha una scorta tra le dieci e le
cinquanta unità di zucchero e il coefficiente di Gini ci da un’idea più chiara riguardo all’equità delle
distribuzioni. I due coefficienti di Gini sono molto simili: quello riguardante la prima simulazione è
pari a 1,677 e quello riguardante la seconda simulazione è 1,655. La ricchezza è equamente
distribuita in entrambi i casi, lievemente più nel secondo caso. La nostra ipotesi è che, essendoci più
agenti finali nella seconda simulazione, ed essendo le risorse del terreno date, la stessa quantità di
risorse è ripartita fra più agenti, e risulta quindi una distribuzione leggermente più equa.

- 51 -
Andamento visuale e metabolismo Andamento visuale e metabolismo
5.5 5

5
4.5
4.5
4
4
3.5
3.5
Visuale
3 3
Metabolismo Visuale
2.5 Metabolismo
2.5
2
2
1.5
1.5
1

0.5 1
-200 0 200 400 600 800 1000 1200 0 100 200 300 400 500 600 700 800 900 1000
Passi Passi

Grafico 29: Sugarscape 1000 passi, 100 agenti (a sinistra) e 400 agenti (a destra), seme random 8765.
Andamento della visuale media (linea nera nella errorbar e linea blu nel secondo grafico) e del metabolismo medio (linea rossa)

L’andamento della media del metabolismo e della media della visuale è pressoché invariato; anche
se mostrato con la barra di errore nel grafico relativo allo SugarScape con 100 agenti e senza barra
di errore nello SugarScape con 400 agenti, esso ha lo stesso andamento descritto in precedenza (cfr
9.3. grafico 16).

In conclusione si può supporre che, a differenza delle altre due versioni del modello, lo SugarScape
con riproduzione sessuata ha certe caratteristiche che non variano sensibilmente al variare del
numero di agenti immessi nel sistema. Queste caratteristiche sono:

 la capacità portante del sistema: la capacità di contenere un certo numero di agenti;


 una certa distribuzione delle risorse per agenti e il coefficiente di Gini;
 l’andamento evolutivo della vista e del metabolismo;
 l’andamento nel tempo della media delle ricchezze per agente;
 l’andamento nel tempo degli agenti nati;
 l’andamento nel tempo degli agenti morti;
 l’andamento nel tempo degli agenti fertili.

Riportiamo di seguito le misura di sintesi delle caratteristiche analizzate nelle tre simulazioni:

Agenti Capacità Ricchezza


Gini Vista Metabolismo Nati Morti Fertili
iniziali portante media
100 950 0,1677 5 1 30 12 12 450
240 850 0,1662 5 1 35 12 12 400
400 900 0,1655 5 1 40 12 12 410

Tabella 8: misure di sintesi delle caratteristiche principali per tre simulazioni dello Sugarscape.

Da questa tabella di sintesi possiamo concludere che, a parte variazioni non sensibili di alcuni dati,
il nostro sistema non sembra cambiare comportamento al variare del numero di agenti immessi
inizialmente nel mondo. Dall’osservazione dei grafici e dai risultati ottenuti, dopo un primo periodo
di assestamento le caratteristiche mostrate dagli esperimenti sono molto simili. Questo significa che
qualunque siano le condizioni iniziali del sistema questo porterà il numero degli agenti presenti
intorno a quella che possiamo ora definire la vera capacità portante del sistema. La capacità portante
definita durante i primi esperimenti era molto condizionata da un insieme di variabili e non era
probabilmente abbastanza significativa per poter verificare le capacità del sistema.

- 52 -
9.4.2 Capacità portante al variare delle risorse del terreno

Quello che emerge dalle analisi dei primi esperimenti ci ha fatto sempre più pensare che l’elemento
che è più in grado di far variare la capacità portante è il mondo stesso del nostro SugarScape. Il
mondo inteso come la quantità di risorse del terreno, in altre parole, la nostra matrice capacità. Per
verificare le nostre ipotesi lanciamo due simulazioni variando la capacità massima di zucchero per
ogni cella; andiamo ossia a variare la forma delle collinette.
Partiamo inizialmente da due collinette di altezza massima pari a tre e variamo poi questa misura
settandola a cinque. Successivamente proviamo a modificare anziché l’altezza, la base delle
collinette, variando quindi i parametri sigmax e sigmay che ne determinano la larghezza.
Effettuiamo dunque gli esperimenti con 100 agenti iniziali e per una durata di 500 passi (durata che
permette al sistema di raggiungere una sua stabilità).
Nel primo esperimento con colline basse gli agenti muoiono tutti nei primi 250 passi.
Analizzando il grafico delle nascite e delle morti verifichiamo che gli agenti fanno in tempo a
riprodursi perché le nascite esistono e hanno lo stesso andamento che hanno negli altri esperimenti
tipici, tuttavia la mortalità è più elevata e continua fino a che non muoiono tutti gli agenti; la natalità
invece finisce al passo 150. Le nascite dunque sono meno numerose delle morti.
Il grafico relativo alla fertilità ci dice che la fine delle nascite è concomitante alla fine degli agenti
fertili ed è quindi coerente con il precedente risultato: la fertilità muore e non rinasce più, di
conseguenza gli agenti rimasti vivi al passo 150 non sono in grado di raccogliere abbastanza
zucchero per potersi riprodurre e possono solo aspettare che la loro età sia equivalente a quella della
loro morte.
Le altre caratteristiche non riportano nulla di particolarmente interessante ai nostri occhi; seguono
gli andamenti previsti, di conseguenza riportare e spiegare i loro grafici sarebbe inutile.
Lo stesso esperimento è stato effettuato con colline più alte, pari a cinque, e i risultati ottenuti sono
in linea alle nostre aspettative. Anche in questo caso riportare i grafici e una loro descrizione
sarebbe ridondante, di conseguenza ci limitiamo a dire che la capacità portante del sistema ha un
andamento identico a quella degli esperimenti tipici, l’unica differenza è che raggiunge e oscilla
attorno ad un valore più alto. Essendo più alte le colline e maggiore la quantità di zucchero presente
sul territorio, il numero di agenti che il sistema è in grado di far sopravvivere è maggiore e si aggira
attorno ai mille agenti.
Lo stesso vale per la curva della fertilità: essa ha un andamento tipico ma oscilla attorno ai 450
agenti anziché sui 400 come nei precedente esperimenti.
L’andamento della ricchezza è speculare alle simulazioni tipiche, la distribuzione finale della
ricchezza è anch’essa analoga, come lo è il coefficiente di Gini, pari allo 0,1666.
Anche l’andamento delle medie della visuale e del metabolismo di tutti gli agenti del sistema ad
ogni passo e quello degli agenti fertili è identico a quello della simulazione tipica.
L’unica considerazione che si può trarre è che aumentando l’altezza delle colline aumenta la
capacità portante del sistema; aumentando il numero di agenti vivi del sistema aumenta anche il
numero di agenti fertili.
Questi risultati però ci aprono la strada ad altre due considerazioni, ossia:

 che relazione c’è tra l’andamento demografico e l’andamento delle risorse dello sugarscape?
 Che relazione c’è tra numero di agenti vivi e numero di agenti fertili? Il loro rapporto è
costante?

Per rispondere alla prima domanda abbiamo lanciato la stessa simulazione eseguita per studiare la
capacità portante del sistema con colline di altezza cinque e ci siamo fatti restituire l’andamento
delle risorse del terreno ad ogni passo. Il risultato è presentato nel grafico sottostante.

- 53 -
Ricchezza del terreno
6000

5500

5000

4500

Zucchero
4000

3500

3000

2500

2000

1500
0 50 100 150 200 250 300 350 400 450 500
Passi

Grafico 30: andamento delle risorse dello Sugarscape.


Sugarscape 500 passi, 100 agenti, seme random 8765.

Il Grafico 30 ci mostra come le risorse presenti sul territorio siano inizialmente molto elevate, ma
subiscano un brusco calo fin dai primi passi, per trovarsi poi ad oscillare tra 1500 e 2000 unità di
zucchero. Anche questo dato dunque è in linea con gli altri analizzati e segue il l’andamento degli
altri grafici. L’aumento nei primi passi delle risorse del territorio tende ad aumentare in relazione al
fatto che sono presenti le prime morti in assenza di nascite di nuovi agenti. Successivamente le
risorse del terreno subiscono un calo repentino per una durata di un centinaio di anni, periodo
corrispondente all’esplosione demografica. A questo punto esse raggiungono il punto di stabilità
attorno ad un valore molto inferiore di quello iniziale. Questo andamento oscillatorio è conforme al
fatto che il sistema non è sempre a pieno carico, in quanto gli agenti che si muovono mangiano tutte
le risorse del terreno ma il terreno ci impiega da 1 a 4 passi per tornare alla capacità massima in
quel punto.

Per rispondere alla seconda domanda abbiamo invece calcolato il rapporto tra agenti vivi ad ogni
passo e agenti fertili ad ogni passo, per verificare se esso è costante, come ci aspettiamo, oppure ha
un andamento regolare o caratteristico. Il grafico 31 mostra l’andamento nel tempo di tale rapporto.

Percentuale di agenti fertili


0.65

0.6

0.55

0.5
% Agenti

0.45

0.4

0.35

0 50 100 150 200 250 300 350 400 450 500


Passi

Grafico 31: andamento temporale del rapporto tra agenti fertili e agenti vivi.

Dal grafico si può capire che anche la percentuale di agenti fertili sugli agenti vivi ha bisogno di un
periodo di assestamento, per poi stabilizzarsi. Inizialmente la percentuale è bassa - 0,33 - perché gli
agenti sono appena stati paracadutati nel sistema, successivamente la percentuale aumenta

- 54 -
drasticamente fino ad un picco di 0,56% e coincide con le due curve vicine durante il boom
demografico. Infine anche questo rapporto va incontro alla sua stabilità che si aggira intorno al 47%
di agenti fertili rispetto al totale degli agenti e ci rimane per il corso di tutta la simulazione.

Andando invece a variare la larghezza delle collinette, otteniamo che la massima capacità che il
mondo può avere nei successivi due lanci è quella riportata nelle figure sottostanti.
5 5

10 10

15 15

20 20

25 25

30 30

35 35

40 40

45 45

50 50
5 10 15 20 25 30 35 40 45 50 5 10 15 20 25 30 35 40 45 50

Figura 10: Sugarscape sigmax = 7 e sigmay = 7. Figura 11: Sugarscape con sigmax = sigmay = 10.

Chiameremo, per semplificazione, il primo caso Sugarscape stretto e il secondo caso Sugarscape
largo. Dalle simulazioni effettuate, i risultati ottenuti sono i seguenti:

Caratteristiche Sugarscape stretto Sugarscape largo


Capacità portante 216 503
Andamento ricchezza media 43 40,1
Coefficiente di Gini 0,1913 0,1822
Visuale media 4,4 5
Metabolismo medio 1 1
Media fertili 93,7 218,4

Tabella 9: sintesi risultanti da due simulazioni con differente misura della larghezza delle colline.

Ciò che salta subito all’occhio è che, mentre abbassando la collina gli agenti non sono in grado di
sopravvivere, stringendola senza andare a modificare la sua altezza, permette la sopravvivenza degli
agenti con una capacità portante del sistema pari a 216 agenti. Evidentemente gli agenti con le
nostre caratteristiche per sopravvivere hanno bisogno di almeno un piccolo spazio in cui ci siano
almeno quattro unità di zucchero. Ovviamente, colline più larghe permettono una maggior capacità
portante del sistema, portandola fino a 503 in relazione allo SugarScape largo.
L’andamento della ricchezza media non varia sensibilmente perché non è variato solo il numero di
agenti vivi, ma è variata anche la quantità di risorse presenti nel terreno. Per quanto riguarda il
coefficiente di Gini, esso è più piccolo nello SugarScape largo ma in entrambi i casi mostra una
distribuzione della ricchezza pressoché paritaria.
La media del metabolismo, come era prevedibile, è pari a uno in entrambi i casi. Un dato su cui è
bene fermarsi a riflettere è invece quello che riguarda la media della vista: nel mondo largo essa è
pari a cinque ed è conforme alle altre simulazioni tipiche, mentre nel mondo stretto essa è pari a 4,4.
Questo ci fa pensare che non sia poi così necessario, in presenza di collinette strette, avere una
visuale molto lunga, per questo mondo basta averla pari a 4.
Infine il risultato riguardante la media degli agenti fertili varia come la capacità portante,
andamento prevedibile e conforme agli altri esperimenti.

- 55 -
9.4.3 Capacità portante al variare del tipo di agente

Riprendendo l’idea del nostro quarto esperimento, quello relativo al cambiamento della capacità
portante in relazione al tipo di agenti immessi nell’ambiente (cfr. 6.2), analizziamo ora come e se
varia la capacità portante del nostro sistema al variare della vista e del metabolismo dei nostri
agenti. Allo scopo di trovare sperimentalmente queste dipendenze abbiamo effettuato una serie di
simulazioni in cui supponiamo che tutti gli agenti abbiano una stessa visuale data ed un uguale
metabolismo anch’esso dato, anziché determinare questi due parametri in modo casuale come nelle
precedenti simulazioni. In questo modo è possibile analizzare come cambia la capacità portante al
variare di questi due parametri. L’esperimento ha queste caratteristiche:

o 100 agenti iniziali;


o 1000 passi, per permettere un assestamento del sistema;
o la visuale varia da 1 a 6 celle;
o il metabolismo varia da 1 a 5 unità di zucchero;
o tutti gli agenti hanno lo stesso valore del parametro interessato;
o si utilizza una matrice 16x5 (visuale x metabolismo). Per ogni coppia visuale-metabolismo
si effettuano 5 simulazioni. Ogni simulazione restituisce il numero di agenti finali, il numero
di agenti nati e il numero di agenti vivi. Ogni elemento delle matrici contiene il numero
medio di agenti finali/nati/vivi.

I risultati sono riportati nelle seguenti tabelle:

Matrice agenti vivi

Metabolismo
Visuale
1 2 3 4 5
1 638 230 0 0 0
2 783 283 0 0 0
3 835 293 0 0 0
4 928 267 0 0 0
5 1002 380 0 0 0
6 1024 373 0 0 0

Tabella 10.1: numero di agenti vivi a fine simulazione (1000 passi, 240 agenti, seme random 8765).
Gli agenti iniziali hanno vista e metabolismo fissati.

La prima considerazione che si può fare analizzando questi risultati è che gli agenti che hanno un
metabolismo uguale a uno e quelli con metabolismo uguale a due in generale sopravvivono nel
tempo. Inoltre, maggiore è la loro visuale, maggiore è il numero di agenti che sopravvivono.
Gli agenti con metabolismo superiore a due invece muoiono, qualsiasi visuale essi abbiano.
È da considerare il fatto che fissare vista e metabolismo ha poco significato in termini di algoritmo
genetico in quanto i nuovi nati avranno tutti la stessa visuale e lo stesso metabolismo dei genitori,
che sono uguali; tuttavia queste statistiche hanno lo scopo di capire come varia la capacità portante
del sistema, escludendo – solo per ora – i ragionamenti riguardanti la genetica.

- 56 -
La tabella 10.2 mostra il numero totale di agenti nati nel corso della simulazione.

Matrice agenti nati

Metabolismo
Visuale
1 2 3 4 5
1 3845 1111 5 0 0
2 4669 1627 15 0 0
3 4908 1848 17 4 0
4 5220 2003 25 0 1
5 5572 2191 39 1 0
6 5557 2210 25 2 0

Tabella 10.2: numero totale di agenti nati nel corso simulazione (1000 passi, 240 agenti, seme random 8765).
Gli agenti iniziali hanno vista e metabolismo fissati.

Coerentemente con la tabella relativa agli agenti vivi a fine simulazione, la tabella 7.2 mostra che
l’attività riproduttiva, e conseguentemente il numero di nascite, è considerevole quando il
metabolismo è basso, ed è pressoché inesistente quando il metabolismo supera le due unità di
zucchero. Inoltre quando il metabolismo è basso l’attività riproduttiva aumenta con l’aumentare
della visuale.

La terza tabella mostra, infine, il numero totale di agenti morti durante la simulazione.

Matrice agenti morti

Metabolismo
Visuale
1 2 3 4 5
1 3307 981 105 100 100
2 3986 1444 115 100 100
3 4173 1655 117 104 100
4 4392 1836 125 100 101
5 4670 1911 139 101 100
6 4633 1937 125 102 100

Tabella 10.3: numero totale di agenti morti nel corso simulazione (1000 passi, 240 agenti, seme random 8765).
Gli agenti iniziali hanno vista e metabolismo fissati.

Anche questa tabella conferma la caratteristica del sistema sopra descritta: con metabolismo 3, 4 e 5
gli agenti immessi nel sistema muoiono tutti e il numero di morti è vicinissimo a 100, ciò significa
che ne sono nati pochissimi durante i mille passi eseguiti. Ad esempio gli agenti morti con
metabolismo 3 e visuale 1 sono 105, ciò significa che i 100 iniziali sono tutti morti e sono morti
anche i 5 nati durante la simulazione.
Nel caso invece il metabolismo sia uno o due, il numero di morti è molto elevato ma è comunque
minore del numero di agenti nati; quindi possiamo affermare che c’è un certo ricambio
generazionale e che durante questi ricambi generazionali il metabolismo degli agenti tende al suo
livello ottimo: uno o due.

- 57 -
In conclusione a questa prima analisi possiamo affermare che il metabolismo ha un primario ed
essenziale peso a favore della sopravvivenza degli agenti e che solo in un secondo momento
interviene il fattore visuale, che incide sulla sopravvivenza degli agenti vivi per merito del basso
metabolismo, e che quindi ha un ruolo ma esso è secondario rispetto a quello del metabolismo.

- 58 -
9.5. La dinamica delle popolazioni

Un’osservazione che merita di essere fatta è che, considerando i risultati tipici ottenuti dallo
SugarScape con riproduzione sessuata, alcuni andamenti ricordano quelli studiati nella dinamica
delle popolazioni.
In particolare l’andamento demografico e quello della fertilità ricordano molto uno degli andamenti
possibili della dinamica del modello base di Lotka-Volterra.
Il modello base di Lotka-Volterra è un modello non lineare che ha lo scopo di descrivere in termini
matematici l’interazione fra due popolazioni diverse, una popolazione preda e una popolazione
predatori. Nel caso in cui le interazioni fra le due popolazioni siano presenti il modello prevede la
presenza di oscillazioni sfalsate tra le due popolazioni. Questo avviene perché nell’equazione che
descrive l’andamento della popolazione preda esiste una retroazione positiva proporzionale al
coefficiente associato al numero di prede (la riproduzione) e una retroazione negativa proporzionale
al coefficiente relativo all’incontro con la popolazione predatrice. Nell’equazione che descrive
l’andamento della popolazione predatrice, al contrario, esiste una retroazione positiva dovuta
all’incontro con la popolazione delle prede, e una retroazione negativa proporzionale al numero di
predatori (competizione interna). In altre parole, l’aumento del numero di prede provoca, attraverso
l’aumento della frequenza degli incontri con i predatori, un aumento del numero di predatori, il
quale comporta una diminuzione del numero di prede, che agisce negativamente sulla crescita del
numero di predatori.
La dinamica prevista da questo modello non ha punti di equilibrio stabile in quanto le due
popolazioni evolvono descrivendo cicli senza fine, senza mai tendere ad una situazione di stabilità;
l’equilibrio è solo dinamico.
Le oscillazioni previste da tale modello sono molto simili a quelle risultanti dalla dinamica della
demografia e della fertilità del nostro sistema.
Questo paragone però non è del tutto ottimale in quanto il modello di Lotka-Volterra prevede la
presenza di due popolazioni distinte, mentre le variabili considerate in questo luogo sono diverse:
una è la dinamica di una popolazione (l’andamento demografico) e l’altra (la fertilità) non
rappresenta una popolazione distinta, bensì una parte della prima popolazione.
Possiamo però considerare l’andamento del numero di agenti maschi fertili e quello di agenti
femmine fertili: pur facendo parte della stessa popolazione, possiamo dividerli in due insiemi
distinti in quanto gli elementi presenti in una non sono presenti nell’altra.
L’andamento delle donne e degli uomini fertili ha una dinamica che – fino ad un certo momento -
ben si avvicina a quella descritta dal modello Lotka-Volterra, come mostra il grafico seguente.

Distribuzione maschie e femmine fertili


350
Femmine fertili
Maschi fertili
300

250

200
Agenti

150

100

50

0
0 100 200 300 400 500 600 700 800 900 1000
passo

Grafico 32: andamento temporale del numero di donne fertili (linea rossa) e di uomini fertili (linea blu).
Sugarscape 1000 passi, 100 agenti, altezza collina = 5, seme random 8765.

- 59 -
È curioso notare come la dinamica delle due popolazioni (femmine fertili e uomini fertili) segua un
andamento simile, in cui le due curve differiscono per lo più sulla scala delle ordinate. Da un certo
istante di tempo (passo 600) in avanti le curve seguono un andamento tendenzialmente speculare.
Sarebbe interessante verificare come e se si stabilizza questo tipo di comportamento nel corso del
tempo. A questo scopo continuiamo questa simulazione fino al passo 5000 ma analizzeremo il
risultato al termine dello scritto, nell’Appendice: questioni aperte.

Rimane però un altro particolare che differenzia il nostro modello da quello di Lotka-Volterra: la
dinamica prevista dal modello base di LotkaVolterra non prevede una forte oscillazione iniziale
come quella che risulta dal nostro modello.
Una forte oscillazione iniziale si presenta invece in una delle possibili dinamiche studiate nel
modello lineare di due popolazioni interagenti. Queste due popolazioni (che non sono
necessariamente preda e predatori) interagiscono fra loro secondo l’ipotesi lineare: la velocità
istantanea di variazione della prima popolazione e della seconda popolazione (ossia la loro derivata
prima rispetto al tempo) è direttamente proporzionale ad una combinazione lineare dei valori stessi
delle popolazioni, secondo opportuni coefficienti.
A seconda dei valori dei coefficienti si possono avere situazioni di competizione, di cooperazione o
di parassitismo tra le due popolazioni. Il modello parte dalla descrizione della variazione rispetto al
tempo del numero di individui delle due popolazioni tramite un sistema di equazioni differenziali di
primo ordine. Risolvendo tale sistema le soluzioni sono costituite da combinazioni lineari di
esponenziali in cui gli esponenti β1 β2 hanno una importanza significativa in quanto a seconda che
siano reali crescenti, reali decrescenti o complessi si hanno delle situazione in cui le due
popolazioni si allontanano da una situazione di equilibrio, tendono ad uno stato di equilibrio oppure
compaiono oscillazioni periodiche. Quello che è di nostro interesse è il terzo caso.
Se gli esponenti sono numeri complessi, esistono tre possibilità:

1. sono immaginarie coniugate;


2. sono complesse coniugate (ossia β1 ha una parte reale comune a β2) e Re β > 0;
3. sono complesse coniugate (ossia β1 ha una parte reale comune a β2) e Re β > 0.

1. Il primo caso da luogo ad oscillazioni periodiche nel tempo, in cui la dinamica delle due
popolazioni nello spazio delle fasi da luogo a due orbite ellittiche (una per popolazione).
2. Nel secondo caso si presenta un equilibrio instabile.
3. Nel caso in cui la parte reale comune ai β è minore di zero, si presenta un equilibrio stabile.

I due comportamenti di nostro interesse sono il primo e il terzo.


Il primo infatti ricorda l’andamento della popolazione maschile e della popolazione femminile nel
nostro SugarScape. In effetti, se il numero di uomini aumenta rispetto a quello delle donne, ci sarà
più “competizione” tra gli uomini, che si traduce nel fatto che, essendoci meno donne disponibili
per riprodursi (perché magari le donne in età fertile, una volta generato il figlio e avergli dato metà
della loro scorta iniziale, non sono più fertili), alcuni uomini non ne avranno la possibilità e
moriranno di vecchiaia. Quando il numero di uomini torna ad essere abbastanza vicino a quello
delle donne invece la tendenza a morire sarà inferiore. Lo stesso vale per una crescita delle donne in
relazione a quella degli uomini.
Il terzo caso invece riprende l’andamento demografico, il quale presenta inizialmente onde molto
alte e che poi tende via via ad oscillare tra valori più vicini. Tuttavia, nella dinamica del modello
lineare di due popolazioni interagenti, quando si verifica, questa situazione tende ad un punto di
equilibrio stabile, mentre il nostro andamento, una volta ristretto il range di valori tra i quali oscilla,
continua ad oscillare, senza tendere ad un punto di equilibrio stabile.
Non sarebbe corretto affermare che l’andamento demografico presenta una stabilità dinamica in
quanto, come descritto precedentemente, l’andamento non è regolare. È però possibile dire che il

- 60 -
nostro modello mostra una dinamica che nel tempo tendere a raggiungere una specie di equilibrio
caratterizzato da una continua oscillazione tra due valori relativamente non molto lontani tra loro.
Di seguito riportiamo le immagini delle similitudini ritrovate e descritte in questo paragrafo.

Distribuzione dei sessi


600

500

400
Femmine
Maschi

Agenti
300

200

100

0
0 100 200 300 400 500 600 700 800 900 1000
passo

Figura 12 a:modello lineare di due popolazioni interagenti. Figura 12 b: Distribuzione dei maschi e delle femmine..
Dinamica possibile con β immaginarie congiunte. Sugarscape 1000 passi, 100 agenti, seme random 8765.

Andamento demografico
1200

1000

800
Agenti vivi

600

400

200

0
0 100 200 300 400 500 600 700 800 900 1000
Passi

Figura 13 a: modello lineare di due popolazioni interagenti. Figura 13 b: Andamento demografico.


Dinamica possibile con β complesse congiunte. Sugarscape 1000 passi, 100 agenti, seme rendom 1234.

Sebbene la ricchezza del territorio, considerata come la quantità di zucchero presente nel mondo,
non sia una vera e propria popolazione, è possibile astrarci momentaneamente dalla rigida
definizione di ‘popolazione’ e provare a considerarla come tale.
Confrontando l’andamento demografico e l’andamento della ricchezza del territorio è possibile
notare una similitudine con il modello non lineare dei processi sociali: il modello Lotka-Volterra
sopra descritto applicato nell’ambito delle scienze urbane. Si tratta del modello della dinamica
congiunta popolazione-reddito effettuato da Dendrinos e Mullally. Nel loro modello il reddito
medio disponibile nell’area urbana considerata configura l’offerta, mentre la popolazione dell’area
urbana “a caccia” del reddito configura la domanda. Il modello esprime la dinamica congiunta
popolazione – reddito che si sviluppa in un’area chiusa, senza influenze esterne, a seguito dei
continui aggiustamenti fra domanda (popolazione) e offerta (reddito) nelle diverse localizzazioni
entro l’area considerata.
L’ipotesi fondamentale alla base del modello è che un reddito medio disponibile in un’area, più
elevato che in altre aree, vi attira popolazione, dando origine ad una immigrazione in questa area.
Tuttavia, una popolazione che cresce in una determinata area – perché attratta da un elevato reddito
medio – provoca una diminuzione di tale reddito, facendo così diminuire l’attrattività dell’area
considerata.

- 61 -
Questo meccanismo dinamico-evolutivo è simile a quello del sistema preda predatore.
Considerando gli agenti come popolazione preda (o domanda) che vanno a caccia dello zucchero
che rappresenta la popolazione dei predatori (o l’offerta), l’analogia con il nostro modello è molto
forte.
La dinamica del reddito ha un coefficiente positivo che mette in relazione il reddito attuale con
quello futuro; esso può essere rappresentato nello SugarScape dal fatto che una cella contenente, per
esempio, quattro unità di zucchero, può essere svuotata, ma ha comunque la potenzialità di tornare a
contenere quattro unità di zucchero. La dinamica del reddito ha poi un coefficiente negativo che
mette in relazione il reddito e la popolazione e rappresenta l’effetto negativo che l’aumento della
popolazione ha sulla crescita del reddito medio (le prede diminuiscono con l’aumentare dei
predatori). Con più agenti ci sono sulla collinetta di zucchero, meno essa avrà la possibilità di
crescere.
La dinamica della popolazione ha un coefficiente negativo che mette in relazione la popolazione
attuale con quella futura, il quale esprime gli effetti negativi che l’aumento della popolazione,
riducendo l’attrattività della zona, esercita sulla velocità di crescita della popolazione. Esprime
quindi lo spontaneo declino della popolazione. La dinamica della popolazione ha poi un coefficiente
positivo che mette in relazione il reddito e la popolazione ed esprime la crescita della popolazione
dovuta all’immigrazione richiamata dal reddito medio disponibile. Esprime dunque l’attrattività
dell’area con una quantità di zucchero elevata.
Questo modello mostra una dinamica identica a quella del modello base di Votka-Volterra: cicli
periodici simili a quelli dell’oscillatore armonico.
Una delle varianti di questo modello prevede l’introduzione della capacità di carico: si tratta di
modelli nei quali le variabili (popolazione e reddito / agenti e zucchero presente sul territorio) non
solo compaiono moltiplicate fra di loro ma il reddito compare anche in un termine quadratico. Nello
SugarScape infatti le risorse di zucchero presenti sul territorio sono limitate dalla matrice capacità.
Applicando il modello base di Dendrinos e Mullally, in assenza di popolazione il reddito
aumenterebbe all’infinito, ma ciò non è applicabile al nostro modello, e nemmeno alla vita reale.
L’aggiunta della capacità di carico nell’equazione che descrive l’andamento del reddito si addice
pertanto al nostro modello e permette di tener conto dei fenomeni in modo meno rigido della
semplice proporzionalità diretta.
Senza entrare troppo nel dettaglio questa variante con capacità di carico del modello base presenta
due configurazioni di equilibrio: quella di nostro interesse mostra una dinamica nel tempo della
popolazione e del reddito del tipo raffigurato di seguito.

Figura 14: tipo di dinamica temporale prevista dalla variante del modello base di Dendrinos e Mullally;
variante con capacità di carico per il reddito.
Il reddito è rappresentato dalla linea verde, la popolazione dalla linea rosa.

Come si può vedere essa può essere comparata, non trasferita ma adeguata, alla dinamica temporare
del nostro reddito e dei nostri agenti (figura 15).

- 62 -
Ricchezza del terreno Andamento demografico
6000 1200

5500
1000
5000

4500 800

Agenti vivi
Zucchero

4000
600
3500

3000 400

2500
200
2000

1500 0
0 50 100 150 200 250 300 350 400 450 500 0 50 100 150 200 250 300 350 400 450 500
Passi Passi

Figura 15: andamento temporale della ricchezza presente sul territorio (a sinistra) e andamento demografico (a destra).
Sugarscape 500 passi, 100 agenti, altezza delle colline = 5, seme random 8765.

La presenza del temine quadratico nell’equazione che descrive la dinamica del reddito ha come
effetto la comparsa di uno stato di stabilità asintotica per l’evoluzione dinamica del sistema. La
dinamica descritta da questo modello è del tipo spirale convergente, con oscillazioni che si
smorzano intorno ad uno stato di equilibrio asintotico.

Un nuovo esperimento che si potrebbe effettuare in futuro è quello di simulare per mille passi lo
sugarscape con due colline, e di continuare la simulazione variando la matrice che determina la
massima capacità di ogni cella. È possibile, per esempio dare come input al continuo della
simulazione una matrice con tre o quattro colline, per verificare se gli agenti hanno una vista
abbastanza lunga per riuscire a vedere, e quindi anche a raggiungere, le due nuove colline,
popolandole e creando tre o quattro gruppi di agenti separati.

- 63 -
Conclusioni

L’esperienza appena terminata ci ha dato l’opportunità di analizzare un sistema di agenti che


interagiscono tra loro e con il mondo nel quale vivono.
Questa esperienza è iniziata con una sequenza di esperimenti che nel loro corso sono andati ad
aggiungere nuove caratteristiche o a modificarne delle vecchie; ma soprattutto da ogni esperimento
sono nate nuove ipotesi per gli esperimenti precedenti.
Partendo da un modello semplice abbiamo dapprima analizzato le sue caratteristiche peculiari, per
poi andarne a studiare la capacità portante.
Siamo arrivati alla conclusione che tale capacità è strettamente legata al numero di agenti si trovano
in esso all'anno 0 e abbiamo notato che la caratteristica della variabile metabolismo è primariamente
necessaria alla sopravvivenza degli agenti nel nostro mondo.
Questa conclusione riguardante le condizioni iniziali e il metabolismo ci ha indotto a concludere
che la capacità portante non può essere solo una caratteristica intrinseca dell'ambiente e delle sue
risorse ma è anche una caratteristica determinata dal numero di agenti che sfruttano tali risorse e da
quanto questi agenti siano in grado di adattarsi al mondo che popolano senza la possibilità di
riprodursi.
Nello studio della genetica applicata al sistema abbiamo ulteriormente rafforzato la nostra idea
riguardante la variabile di stato “metabolismo”. L'utilizzo della genetica ci ha permesso di scoprire
particolari comportamenti del sistema che lo riallacciano a comportamenti simili all'interno di
sistemi fisici quali ad esempio il pendolo. Questo risultato però viene raggiunto solo quando il
sistema riesce a tenere sotto controllo il metabolismo dei suoi agenti attraverso la selezione naturale
che in esso va ad operare.
La variabile di stato metabolismo assume quindi un valore fondamentale che va a modificare
continuamente la dinamiche del modello. Il sistema non ha modo di concepire nessun tipo di
equilibrio se tale variabile è libera di variare in modo arbitraria all'interno dei parametri di controllo
da noi attribuiti nella creazione di ogni agente.
Lo stesso vale per la variabile di stato visuale, la quale però, ha un’importanza solo secondaria, e va
a determinare la dinamica dell’evoluzione solo in minima parte.

Una delle prime conclusioni finali che possiamo trarre è che, seppur con innumerevoli limitazioni, il
nostro modello descrive abbastanza bene un sistema biologico.
Un sistema biologico, in generale, ha svariate caratteristiche che lo rendono estremamente adatto
all’ambiente in cui vive: esso ha un’alta capacità di adattamento e una robustezza nella conservazione
delle caratteristiche positive. Esso però non è il frutto di un progetto determinato a priori, bensì il
risultato di un processo evolutivo della durata di millenni e basato sulla riproduzione selettiva degli
individui migliori. Alla base della selezione naturale c’è il principio di conservazione delle variazioni
favorevoli ed eliminazione di quelle sfavorevoli alla sopravvivenza e alla riproduzione.
Nello SugarScape è possibile vedere come, nel trascorrere simulato del tempo, la popolazione che lo
abita ha un’elevata capacità di adattamento all’ambiente. L’ambiente in cui vivono i nostri agenti detta
le regole per la loro sopravvivenza: agenti con un alto metabolismo non sono in grado di sopravvivere a
lungo, di conseguenza hanno meno probabilità di essere scelti come genitori e di passare quindi le loro
caratteristiche ai figli. Con l’andare del tempo gli agenti che hanno le caratteristiche per sopravvivere si
riproducono e passano le loro caratteristiche ai figli, con il risultato che dopo qualche centinaia di “anni”
tutti gli agenti hanno quasi le stesse caratteristiche: quei geni che sono necessari per la sopravvivenza.
Il nostro modello dimostra di essere anche robusto: una volta ottenuto il risultato migliore, lo mantiene
nel tempo. Il principio di conservazione delle variazioni favorevoli a sopravvivere e riprodursi e di
eliminazione delle variazioni sfavorevoli a sopravvivere e a riprodursi è stato correttamente seguito: nel
nostro mondo gli agenti arrivano ad un genotipo ottimale e continuano a vivere e a riprodursi.

- 64 -
La domanda dalla quale eravamo partiti all’inizio di questa nostra esperienza era se da un mondo
molto semplice, composto da entità elementari che interagiscono con semplici regole locali e da un
ambiente molto semplice, potessero emergere comportamenti complessi.
Gli esperimenti proposti ci fanno pensare ad una risposta negativa perché partendo da situazioni
iniziali note, il comportamento della dinamica è stimabile a priori. Conoscendo gli stati iniziali e le
regole con cui il sistema evolve, si può prevedere un parco di possibili soluzioni finali. Quello che
si può prevedere è il comportamento globale, l’andamento generale, la direzione che prenderà il
sistema. Quello però che non è prevedibile sono quelle micro-oscillazioni che compongono le
oscillazioni primarie. Esse sembrano essere sempre diverse e sembrano non ripetersi mai all’interno
di una singola simulazione, o almeno questo è quello che emerge dai nostri esperimenti e –
soprattutto – è quello che abbiamo potuto notare dai nostri esperimenti. Un’ipotesi può essere che
quelle micro-oscillazioni siano date dalle variabili casuali che sono in gioco nel corso
dell’evoluzione. Esse non giocano un ruolo principale nella nostra dinamica; un esempio è dato dal
fatto che la variabile sesso ha uno 0,5 di probabilità di assumere valore 0 (corrispondente a
femmina) e un’uguale probabilità di assumere un valore pari a 1. Su una media di 1024 agenti che
entrano a far parte dello sugarscape nel corso di una simulazione di 1000 passi, la distribuzione dei
sessi è prevedibilmente equamente distribuita. Lo stesso vale, per fare un altro esempio, per quanto
riguarda il metabolismo: dopo i primi cento passi esso ha valori pari a uno o a due.
In altre parole, le variabili casuali del sistema potrebbero incidere sulle micro-oscillazioni del
sistema ma non sono abbastanza importanti per incidere sull’andamento generale del sistema. Per
dirla in parole povere: il sistema deve andare in quella direzione con un andamento che disegna una
oscillazione sporca, la “sporcizia” è determinata dalle variabili casuali in gioco.

L’ultima, ma non per questo meno importante conclusione riguarda il fatto che la dinamica del
nostro sistema ha tutte le caratteristiche per essere paragonata alla dinamica dei modelli non lineari
nei processi sociali.

- 65 -
Appendice: questioni aperte

Distribuzione maschie e femmine fertili


350
Femmine fertili
Maschi fertili

300

250

200
Agenti

150

100

50

0
0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000
Passo

Grafico 33: Andamento femmine e maschi fertili.


Sugarscape 5000 passi, 100 agenti, seme random 8765.

Analizzando l’andamento degli uomini fertili e quello delle donne fertili, era emerso (cfr. 9.5) che
essi avevano, nei primi mille anni di vita, un andamento simile. Essi infatti crescono e decrescono
insieme. Allungando la stessa simulazione possiamo osservare che questo comportamento non dura
nel tempo ma, anzi, solo fino al passo 1100. Da quel momento le due curve sembrano cambiare
totalmente e iniziano ad evolvere in modo speculare: quando una cresce l’altra decresce e viceversa,
e nel momento in cui si incontrano sembrano respingersi vicendevolmente. Ovviamente questo
comportamento è una tendenza e non è regolare.
Sarebbe interessante, in un futuro, studiare questo andamento e valutarne le caratteristiche.

- 66 -