Abbiamo tutti osservato in cielo il volo di stormi di uccelli. In maniera apparentemente guidata, disegnano spesso delle bellissime coreografie, e si fa fatica ad immaginare che non esista un coordinamento, un leader, una “intelligenza superiore” che coordini queste evoluzioni come quelle fatte da un gruppo storni a Utrecht in Olanda e riprese da Herbert Schroer e pubblicate su Vimeo
Murmuration of starlings in Utrecht, The Netherlands from Herbert Schroer on Vimeo.
Come è possibile che ogni singolo uccello decida di volare insieme e di virare contemporaneamente? Esiste un leader che tutti seguono? E se anche esistesse, come riescono a comunicare?
La risposta è sorprendentemente semplice: la “combinazione” di tre semplici comportamenti, adottati in isolamento da ciascuno degli uccelli, fa “emergere” un comportamento del “sistema” degli uccelli presi nel loro insieme, che è dovuto esclusivamente alle loro interazioni. Quindi, niente leader, e niente comunicazione tra di loro.
Vediamoli questi tre comportamenti. Innanzitutto, un uccello impara a non collidere con gli altri uccelli attorno e quindi cerca di mantenere una certa separazione con quelli immediatamente più vicini. Ma un uccello isolato è facile preda di uccelli predatori e quindi tutti cercano anche di mantenere l’allineamento con gli altri e di mantenere la coesione nel gruppo, cioè cercando di tenersi al centro perché quelli all’esterno sarebbero facile preda.
Lo studio di questi fenomeni è stato utilizzato in contesti inaspettati, quali quello della grafica. Uno dei primi a studiare questi modelli procedurali (implementati in programmi) per simulare fenomeni complessi è stato Craig Reynolds, applicandoli in diversi contesti, dai banchi di pesci agli stormi di uccelli (da vedere la sua pagina http://www.red3d.com/cwr/boids/ sui “boids” (birdoids) come li ha battezzati, che raccoglie i primi esempi). Queste tecniche sono state usate, sin dagli albori della computer graphic nei film di animazione, per animare una carica di gnu infuriati, oppure uno stormo di pipistrelli e un gruppo di pinguini.
Ok, a questo punto una domanda è d’obbligo: come si può provare che questi semplici comportamenti “locali” (cioè operati da ogni singolo uccello in isolamento) generano il comportamento complesso dello stormo? La risposta sta nell’informatica. È possibile, infatti, scrivere semplici programmi che, a partire da un insieme casuale di “uccelli” simulati, applicando ad ogni passo i 3 comportamenti di separazione, allineamento e coesione, partendo dal caos di posizioni e comportamenti a caso, genera stormi di uccelli che si sono allineati e che volano in “formazione”. Questo è possibile usando qualsiasi linguaggio di programmazione, ma esistono strumenti più facili da usare, con librerie di “modelli” (torniamo su questa parola tra poco) da poter utilizzare, come NetLogo. Con questo ambiente, ad esempio, è possibile usare una simulazione degli uccelli, che si può vedere nel video qui sotto.
Si mettono in posizione casuali 400 uccelli e si fanno “volare” in uno spazio toroidale (cioè gli uccelli che escono a sinistra, rientrano da destra e viceversa, e lo stesso per alto/basso). Bastano pochi passi della simulazione del modello (ancora un attimo e spiegheremo anche questi termini) piccoli stormi si formano e iniziano ad ingrandirsi, ed ad allinearsi. I pochi uccelli che volano “da soli”, piano piano, incontrano stormi di uccelli e si adeguano, “seguendoli”. Dopo un po’, la situazione sembra essere stabile e appare il comportamento emergente, apparentemente “intelligente” e coordinato, che viene mantenuto nel tempo.
Questo uso del computer come strumento generativo per spiegare, a partire da un modello, comportamenti complessi, attraverso la generazione del comportamento stesso è una delle più interessanti applicazioni dei cosiddetti “modelli basati ad agenti”, che permettono di spiegare e di studiare generandoli, fenomeni della nostra vita reale che permettano di comprendere meglio quello che ci circonda.
Come, ad esempio, l’epidemia di influenza che, ogni anno, arriva puntualmente, preannunciata dai telegiornali. Come potremmo comprendere come si diffonde una malattia come l’influenza e magari cercare di capire come limitarne la diffusione e, specialmente, l’effetto che queste misure hanno?
All’inizio dello scorso secolo, Kermack e McKendrick hanno proposto un modello detto SIR che prevede che la popolazione sia divisa tra Suscettibili all’infezione, quelli Infetti (che possono trasmettere l’infezione), e quelli che, avendo avuto l’infezione, sono Recovered (guariti) e che non possono essere più infettati. Una persona che è Suscettibile ad essere infettata, se incontra in maniera ravvicinata un Infetto può sviluppare la malattia, e diventare Infetto, con una probabilità, che dipende dal virus ma anche dalle condizioni generali (età, stato di salute, etc.) e dalle buone prassi per limitare la diffusione. Ora, studiando su una popolazione di grande dimensione con una simulazione ad agenti, che simula per ogni persona, il normale tragitto lavorativo, secondo i dati del censimento ISTAT, possibile vedere come si diffonde la malattia, tra la popolazione Suscettibile (mostrati in giallo), quelli Infetti (in rosso) e quelli Recovered (in verde). Una simulazione prototipale di questo tipo, realizzata da Gennaro Cordasco, da Carmine Spagnuolo e dal sottoscritto, è stata presentata per la Regione Campania al convegno Big Data in Health 2018, e si può vedere qui:
A cosa serve questo strumento? Ad esempio, a capire in che maniera insistere sulla profilassi contro l’influenza (ad esempio, convincere a lavarsi le mani 2 volte in più al giorno) può avere effetti quantitativamente misurabili su una popolazione, limitando il numero di popolazione Infetta, cioè di quella il cui trattamento, in una certa percentuale, ricade sul Sistema Sanitario Nazionale con costi ed impatti su tutta la nostra società. Uno strumento che, basato su un modello ad agenti basato sulla analisi dei dati storici di diffusione e sulle caratteristiche del virus, utilizzando un sistema di simulazione massivo, che permetta la esecuzione di questi modelli per popolazioni ampie, offre ai policy-makers gli strumenti per valutare in maniera sperimentale (si dice spesso “in silico”) la efficacia delle politiche sanitarie.
In pratica, possiamo dire che le Simulazioni di Modelli basati su Agenti permettono di dire, oggi, che le nostre mamme facevano bene a dirci, una volta tornati da scuola, “Lavati le mani!”.