Parlo dello Sugarscape, il famoso modello sviluppato a suo tempo da Joshua M. Epstein e Robert Axtell, accuratamente descritto nel loro celebre libro Growing Artificial Societies: Social Science from the Bottom Up (divertente, tra l’altro, la recensione estremamente critica pubblicata su Amazon da un tizio, il quale si perde in una strampalata analogia con gli atomi che interagiscono tra loro dando vita ad esempio ad un pendolo, tralasciando quel sottotitolo “Social Science” presente nel volume). Dopo averci speso innumerevoli ore ai tempi della specialistica, ho deciso che e’ bene che anche gli studenti di Laboratorio II facciano lo stesso. E cosi’ e’ proprio allo Sugarscape che ho dedicato il testo per l’appello del prossimo 9 settembre.

Specifiche del progetto da realizzare
Come tema d’esame, si richiede allo studente di scrivere un programma, in linguaggio C, in grado di implementare una versione semplificata del modello Sugarscape originariamente sviluppato da Epstein ed Axtell (Epstein, J.M. & Axtell, R., Growing Artificial Societies, MIT Press, 1996).
Il modello Sugarscape e’ un sistema multi-agente simulato via software, all’interno del quale vive e si sviluppa una vera e propria societa’ artificiale composta da individui (agenti) che interagiscono con l’ambiente seguendo semplici regole di interazione locale. Come ampiamente dimostrato da Epstein ed Axtell, nonche’ da innumerevoli studi che ne sono conseguiti, anche da modelli semplici come questo possono emergere numerosi fenomeni interessanti. Nel caso specifico, una delle cose che si potra’ studiare e’ la “capacita’ di carico” dell’ambiente (il quale puo’ essere considerato una sorta di nicchia ecologica) all’interno del quale vivono gli agenti.
L’ambiente dove la simulazione si sviluppa e’ lo Sugarscape, una griglia bi-dimensionale di dimensione 50×50 (2,500 celle totali). Ciascuna di queste celle, identificate dalle loro coordinate x, y, e’ caratterizzata da un livello corrente di zucchero ed una capacita’ massima di zucchero che questa cella e’ in grado di contenere al suo interno (entrambi i valori interi e compresi tra 1 e 4). La figura riprodotta qui sotto mostra come la capacita’ massima delle varie celle sia distribuita nell’ambiente.

Un certo numero di agenti vive all’interno di questo ambiente, ha un proprio metabolismo che lo porta a consumare ad ogni time-step (il modello si sviluppa infatti su una scala di tempo discreta) un certo ammontare di riserve energetiche, le quali assumono un certo valore all’inizio della simulazione e possono poi essere ricostituite raccogliendo zucchero dall’ambiente. Il metabolismo e’ diverso da agente ad agente e corrisponde all’ammontare di zucchero consumato ad ogni time-step. Ciascun agente e’ inoltre dotato di un particolare sistema sensoriale (strettamente legato a quello motorio) che lo informa dell’ammontare di zucchero presente nelle celle che circondano quella all’interno del quale si trova. Ciascun agente puo’ “vedere” le celle disposte in direzione dei quattro punti cardinali (nord, sud, est, ovest) fino ad una certa distanza. Se ad esempio un certo agente si trova nella cella di coordinate x, y ed ha un range visivo pari a 2, sara’ in grado di misurare l’ammontare di zucchero presente nelle celle di coordinate: x+1, y; x+2, y; x-1, y; x-2, y; x, y+1; x, y+2; x, y-1; x, y-2. Una volta raccolte queste informazioni, l’agente si muovera’ direttamente nella cella contenente la maggior quantita’ di zucchero. Nel caso in cui due o piu’ celle sulle quali e’ possibile muoversi contengano lo stesso ammontare di cibo, l’agente muovera’ sulla prima di quelle individuate. Ogni agente occupa lo spazio di una singola cella e non possono mai esservi due agenti all’interno della stessa cella.
Ad ogni time-step, tutti gli agenti svolgono le loro azioni in sequenza (tale sequenza e’ pero’ casuale ad ogni iterazione del modello). Ciascuno di essi si guarda attorno, sceglie la direzione nella quale muoversi, si sposta e raccoglie infine tutto lo zucchero eventualmente presente nella cella in cui si e’ mosso (e non da quelle che ha eventualmente solo attraversato). L’ambiente e’ toroidale. Questo significa che un agente che fuoriesce da uno dei bordi dell’ambiente riapparira’ dal lato opposto. La percezione sensoriale degli agenti deve tenere in considerazione tale caratteristica dell’ambiente. Quando tutti gli agenti hanno effettuato la loro azione, lo zucchero presente nell’ambiente si rigenera. Ciascuna cella aumenta di un’unita’ la quantita di zucchero presente al suo interno, a patto che non venga superata la sua capacita’ massima. Se in un dato momento le riserve energetiche di un agente raggiungono un valore minore o uguale a zero, l’agente muore ed e’ rimosso dall’ambiente.
All’avvio del programma, attraverso un menu a scelta rapida l’utente dovra’ scegliere una tra le seguenti opzioni:
- Avvia una nuova simulazione
- Scegli la directory dove salvare i risultati
- Esci dal software
L’utente dovra’ scegliere l’operazione da eseguire digitando il numero corrispondente e premendo il tasto INVIO. Si tenga presente che l’utente non dovra’ avere sempre accesso a tutte le funzionalita’ offerte dal programma. In particolare, la funzione 1 non sara’ attiva fino a quando l’utente non avra’ selezionato una directory valida (esistente e con privilegi di scrittura per l’utente corrente) attraverso la funzione 2.
Ulteriori note
- Il progetto dovra’ essere realizzato individualmente.
- Il programma dovrà essere scritto in codice ANSI C standard, al fine di garantirne il più ampio livello di portabilità possibile. Non e’ ammesso, a meno che tale possibilità non sia esplicitata nel testo d’esame o nelle FAQ pubblicate su Dolly, l’utilizzo di comandi propri del sistema operativo in uso. Il programma dovra’ essere in grado di “girare” allo stesso modo su qualsiasi piattaforma.
- Il programma dovra’ essere adeguatamente commentato. Non abbiate paura di essere eccessivamente prolissi nei vostri commenti.
- Il programma dovra’ rispettare in maniera assolutamente rigorosa le specifiche illustrare in questo documento. Qualsiasi modifica rispetto allo schema ivi delineato ed apportata in maniera arbitraria verra’ considerata un errore. Per qualsiasi dubbio o chiarimento si prega di utilizzare il forum.
- La simulazione si sviluppa in 500 iterazioni. Per iterazione si intende il movimento di tutti gli agenti e la conseguente ricrescita dello zucchero.
- La simulazione ha inizio con tutte le celle dell’ambiente contenenti un livello di zucchero pari alla loro capacita’ massima.
- All’inizio della simulazione vengono introdotti nell’ambiente 400 agenti, distribuiti in maniera casuale.
- Il metabolismo degli agenti e’ un valore discreto diffuso in maniera uniforme nella popolazione tra i valori 1 e 4 (100 agenti avranno metabolismo pari a 1, 100 metabolismo 2, ecc…). Stessa cosa vale per il range visivo.
- Ciascun agente inizia la simulazione con una riserva di zucchero pari a 10 unita’.
- Non c’e’ limite all’ammontare di zucchero che un agente puo’ raccogliere e conservare.
- L’ordine di ricerca delle celle da parte degli agenti non ha importanza. Questo deve pero’ essere omogeneo per tutti gli agenti.
- Quando l’agente si muove, prima raccoglie lo zucchero presente nella cella nella quale si e’ spostato e soltanto al termine di questa operazione detrae dalle riserve l’ammontare di zucchero pari al proprio metabolismo.
- Al termine di ogni iterazione, il programma deve salvare alcune statistiche in appositi e separati file di testo (contenuti nella directory specificata attraverso la funzione 2 del menu principale). Queste statistiche sono: numero di agenti vivi, media del metabolismo degli agenti vivi, media del range visivo degli agenti vivi, quantita’ totale di zucchero presente nell’ambiente. La struttura di questi files di testo deve essere estremamente semplice: si consiglia di scrivere semplicemente un valore per riga.