domenica 15 febbraio 2015

Storni a stormi

Questo è il periodo. YouTube è piena di filmati di storni, io ne ho scelto uno tra tanti.

Non è infrequente osservare nei cieli delle nostre città e campagne, stormi di migliaia di storni che vengono a svernare da noi e che all’avvicinarsi del tramonto escono in massa a consumare l’ultimo pasto a base di insetti. E non è infrequente vedere gabbiani od altri predatori, qui a Roma anche falchi pellegrini, tentare l’assalto al singolo cercando di isolare e dividere il gruppo allo scopo di isolare un singolo uccello. Anche quei predatori esperti manovrano con attenzione, spesso anche loro a gruppi di tre o quattro che cercano di collaborare. Una cosa simile si osserva anche in molte specie di piccoli pesci che agiscono, come gli storni, come fossero un singolo individuo ben coordinato da un qualche capo stormo, un eccellente coreografo a capo di una squadra di ottimi esecutori.

Nulla di tutto questo. Non c’è nessun capo, nessun coreografo. Ogni individuo agisce per proprio conto, individualmente, obbedendo ad una serie di regole locali e coadiuvato da un sistema nervoso evolutosi in modo da riuscire a controllare i movimenti dei propri vicini, fino a circa sette di loro, e reagire di conseguenza. Come?

Per capirlo facciamoci aiutare da Richard Dawkins, da un brano preso da uno dei suoi libri più belli: “Il più grande spettacolo della Terra”.

A colpirci nel comportamento degli storni è che, nonostante tutte le apparenze, non vi sia nessun coreografo e, a quanto ne sappiamo, nessun capo. Ogni uccello agisce individualmente e si limita a seguire regole locali.

Gli storni sono composti da migliaia di individui, i quali però non si scontrano quasi mai. E’ un bene, perché, alla velocità a cui volano, rimarrebbero gravemente feriti nell’impatto. Spesso l’intero stormo si comporta come un singolo individuo, volteggiando e virando all’unisono. Sembra quasi che stormi distinti penetrino l’uno dentro l’altro volando in direzioni opposte e conservando intatta la coesione interna. Pare un’impresa quasi miracolosa, ma in realtà sono a distanze diverse dalla video camera e non penetrano gli uni negli altri. Lo spettacolo incanta anche per i netti contorni degli stormi, senza sfocature. La densità degli uccelli subito prima del contorno non è inferiore a quella rilevabile al centro, mentre è zero all’esterno. Non è meravigliosamente sorprendente?

Una simile sequenza sarebbe assai elegante come salvaschermo del computer. Ma non dovremmo cercare un filmato di storni, perché il salvaschermo ripeterebbe più volte le stesse identiche movenze di danza e quindi non userebbe allo stesso modo tutti i pixel. Dovremmo invece elaborare una simulazione al computer e, come sa qualsiasi programmatore, c’è il modo giusto e il modo sbagliato di farlo. Non cercate di coreografare l’intero balletto: sarebbe un pessimo stile di programmazione per quel tipo di compito. Devo illustrare la maniera migliore di procedere perché è quasi sicuramente così che gli uccelli sono programmati nel cervello. E, per venire al punto, è una splendida analogia con il funzionamento dell’embriologia.

Ecco come programmare il comportamento di aggregazione degli stormi. Concentratevi quasi esclusivamente sul comportamento del singolo uccello. Incorporate nel vostro robostorno regole dettagliate che gli insegnino a volare e a reagire agli altri storni in base alla loro distanza e posizione relativa. Incorporate regole sull’importanza da dare al comportamento dei vicini e all’iniziativa individuale nel mutamento di traiettoria. Queste regole modello devono ispirarsi a un attento studio dei veri uccelli in azione. Dotate il robostorno di una certa tendenza a variare a caso le proprie regole. Dopo che si è scritto un complicato programma in cui si specificano le regole comportamentali del singolo storno, si compie il passo finale, che è il fulcro del presente capitolo. Non si deve programmare il comportamento dell’intero stormo, come avrebbe fatto la generazione precedente di programmatori di computer, ma si deve clonare il robostorno appena programmato. Fatene un migliaio di copie, mantenendo le regole tutte uguali oppure variandole leggermente a caso da un individuo all’altro. Poi liberate migliaia di storni modello nel computer, in maniera che possano interagire tra loro obbedendo tutti alle stesse regole.

Se le regole comportamentali di ciascuno storno sono giuste, mille robostorni, ognuno rappresentato da un punto sullo schermo, si comporteranno come gli uccelli veri che si aggregano in stormi d’inverno. Se l’aggregazione non è del tutto corretta, tornate sul singolo uccello e correggetegli il comportamento, magari alla luce di un’ulteriore analisi del comportamento degli storni veri. Poi clonate la nuova versione un migliaio di volte e mettetela al posto di quella precedente sbagliata. Reiterate la programmazione del singolo storno clonato finché il comportamento di aggregazione dei mille uccelli virtuali non costituisca un salvaschermo abbastanza realistico.

Il concetto chiave è che non ci sono né coreografi né capi. Ordine, organizzazione, struttura emergono come effetti collaterali di regole a cui si obbedisce molte volte localmente, non globalmente. E’ così che funziona l’embriologia. Si procede in base a regole locali, a vari livelli ma in particolare al livello della singola cellula. Non c’è nessun coreografo, nessun direttore d’orchestra, nessuna pianificazione centrale, nessun architetto. Nel campo dello sviluppo o della manifattura, l’equivalente di questo tipo di programmazione è noto come autoassemblaggio.