Un sistema complesso è costituito da una pluralità di attori che interagiscono tra di loro mediante semplici regole. Si ha il fenomeno dell’emersione quando le interazioni a livello locale producono una complessità organizzata a livello globale. Quando il tutto è più della somma delle parti.
Spesso gli animali (incluso l’uomo) si muovono in gruppo generando un comportamento emergente. Un tipico esempio è lo stormo di uccelli. Ogni volatile segue tre semplici regole locali:
- Separazione. Non avvicinarti troppo ai tuoi vicini. E’ una repulsione a breve distanza.
- Allineamento. Segui la direzione media dei tuoi vicini.
- Coesione. Non allontanarti troppo dai tuoi vicini. E’ una attrazione a lunga distanza.
Il risultato, inaspettato, è quello di un’unica entità che si muove nell’aria, cambiando sovente forma. Questo comportamento di gruppo è tipico anche di altri animali come formiche, api, termiti, pesci e uomini (folle): Craig Reynold’s Boids.
L’aspetto interessante dei sistemi complessi è che non esiste un centro che regola il comportamento del sistema; al contrario, gli attori si muovono in autonomia e hanno una conoscenza locale del solo contesto che li circonda. Spesso le interazioni tra gli attori vengono modellate attraverso una struttura a grafo detto rete complessa. Esempi di reti complesse sono: Internet, Web, reti sociali, reti biochimiche e reti neurali.
Per esempio, nella rete complessa di Twitter i nodi sono gli utenti della rete sociale e esiste un arco orientato dal nodo A al nodo B se l’utente A è un seguace di B. Gli utenti di Twitter operano con regole di una semplicità disarmante: cinguettano in autonomia, al più ispirati dal ristretto numero di utenti che seguono. I pochissimi (una volta 140) caratteri di un cinguettio, moltiplicati per la moltitudine di utenti e veicolati attraverso la rete complessa sottostante, possono trasformarsi in fenomeni globali, quali opinioni, mode, rivoluzioni.
Un sistema complesso si presta bene ad essere realizzato usando la programmazione orientata agli oggetti: ogni attore viene rappresentato da un oggetto appartenente ad una classe che ne descrive le caratteristiche (campi) e i comportamenti (metodi). Vediamo un paio di esempi di sistemi complessi:
- net: gli attori sono dei cerchi caratterizzati da una posizione, una dimensione, un colore, una direzione e velocità di movimento. Ogni cerchio si muove, disegna sé stesso, e si connette mediante una linea con altri cerchi che si sovrappongono. Ciò che emerge dal sistema complesso è la rete delle connessioni tra cerchi sovrapposti, frutto delle interazioni degli attori. E’ possibile isolare il solo sistema senza interazioni oppure il solo comportamento emergente.
- Modificare net facendo in modo che i cerchi rimbalzino sulle pareti
- complexity 211
- gol: il Gioco della Vita (Game of Life in inglese) è un automa cellulare sviluppato dal matematico inglese John Conway sul finire degli anni sessanta. Il suo scopo è quello di mostrare come comportamenti complessi simili alla vita possano emergere da regole semplici di interazione tra molti corpi. Il gioco si svolge su una griglia infinita di caselle quadrate (celle) detta mondo. Ogni cella ha 8 vicini, che sono le celle ad essa adiacenti, includendo quelle in senso diagonale. Ogni cella può trovarsi in due stati: viva o morta. Lo stato della griglia evolve in intervalli di tempo discreti. Gli stati di tutte le celle in un dato istante sono usati per calcolare lo stato delle celle all’istante successivo. Tutte le celle del mondo vengono quindi aggiornate simultaneamente nel passaggio da un istante a quello successivo: passa così una generazione. Le regole di transizione di stato dipendono unicamente dal numero di vicini vivi:
- una cella viva con 2 o 3 vicini vivi sopravvive, altrimenti muore (per isolamento o sovraffollamento);
- una cella morta con esattamente 3 vicini vivi rinasce, diventando viva.
- Provare a modificare le regole del gioco cercando di ottenere un comportamento interessante del sistema
- organic randomness