twitter-bot-773461330149933056

Il mio primo bot generativo ossessivo (ITA)

Finalmente posso dire che ho finito un primo prototipo funzionante di bot generativo (ossessivo)!
Il bot in sé fa parte uno studio che sto conducendo riguardo il concetto di emergenza, che trovo abbastanza affascinante.
Come wikipedia saggiamente dice (anche se consiglio la pagina in inglese):

“Il comportamento emergente è la situazione nella quale un sistema esibisce proprietà inspiegabili sulla base delle leggi che governano le sue componenti prese singolarmente”

Facciamo un passettino alla volta.

Nel nostro caso, le immagini generate dal bot sono la somma di tutte le interazioni che avvengono all’interno di una boids simulation. Boid è un termine piuttosto intraducibile in italiano, quindi se non ne conoscete il significato, vi rimando qui http://www.red3d.com/cwr/boids/ e su https://www.youtube.com/watch?v=QbUPfMXXQIY per capire le origini del termine e consiglio di vedere questo video per avere chiaro a livello visivo quello di cui stiamo parlando.
Per ora, vi basterà sapere che la parola boid è la storpiatura di bird-oid object, che in italiano suona tipo “oggetto simil-uccello” che non è proprio carino carino da dire (wiki per chiarezza). Comunque, un boid è un elemento parte di una simulazione di molti elementi che si coordinano, come ad esempio può essere uno stormo/gregge/etc. Ecco, prendete uno stormo che vola nel cielo: ora creiamo un modello matematico che riproduce il loro comportamento. Ogni uccello lo chiamiamo boid.

*respiro*

Al momento in cui scrivo, CCRTDROID (il bot in questione) ha nella propria simulazione 32 boid . 32 uccelletti.
Ogni boid è invisibile, ma lascia dietro di sé una traccia visibile (immaginate una lavagna su cui dipinge una mano invisibile).
Ovviamente, a seconda del tragitto e dei movimenti compiuti dal nostro piccolo boid, la traccia lasciata sarà completamente diversa: un bel segmento dritto, morbide curve, andamenti a zig-zag, etc..
(su un piano poetico, ogni traccia racconta la storia di un boid).
Perfetto, dal punto di vista strettamente concettuale abbiamo finito!

Il bot (che è un programma, semplicemente) viene mandato in esecuzione una volta all’ora (al momento, dato che l’app è compilata solo per macOs e gira in locale sul mio computer) e ogni volta genera 10 parametri differenti che regolano il suo comportamento.
Questi 10 parametri, questi 10 valori, sono randomizzati ogni volta, e questo modifica radicalmente le regole che determinano l’evolvere della simulazione. L’intersezione di queste semplici regole di convivenza dei boids crea ogni volta un risultato visivo diverso e ovviamente non prevedibile (e vedremo tra poco come).

( pic: screenshot dell’app e 10 parametri visibili a lato)

Screen Shot 2016-09-07 at 15.01.05

Da un punto di vista più tecnico, questi 10 valori vengono usati come input per 3 funzioni elementari che determinano il comportamento del nostro stormo di boid. Man mano che la simulazione diventerà più complessa, si aggiungeranno ulteriori funzioni (ovvero, ulteriori regole che i boid devono rispettare).

Tutto questo bell’insieme di funzioni, valori e boids è regolato da una formula semplicissima, teorizzata dal grande Craig Reynolds:

steering = desire – velocity

Ovvero, un boid curva in base alla sottrazione tra desiderio e velocità.

Analizziamo meglio la questione, per farla sembrare meno esoterica possibile.. ognuno di questi termini rappresenta un vettore 2d.

La formula dice questo: lo steering è quanto un boid curva in una certa direzione, e possiamo vederlo come un vettore che punta da dove sta attualmente andando (il vettore velocity) a dove vuole andare (desire). Per chiarire ancora meglio, velocity è la direzione verso cui il boid sta andando attualmente, desire è quella in cui vorrebbe andare, e quanto il boid curva nel prossimo istante dipende dalla seconda meno la prima.

Infatti, il vostro prof di matematica del liceo vi ricorderà molto semplicemente che se sottraiamo un vettore A da un vettore B otteniamo un vettore che punta da A a B.

vector_subtraction

Facile, no?

Inoltre, allo stato attuale, nella simulazione sono inserite 3 funzioni (leggi: regole di comportamento dei boid):

1.  Allineati: ogni boid ha il desiderio di muoversi nella stessa direzione degli altri

2. Separati: ogni boid ha il desiderio di avere una certa distanza dagli altri boid

3. Vieni attratto da un campo vettoriale: ogni boid ha il desiderio di seguire il campo vettoriale sottostante (su questo ci fermeremo dopo, pensiamolo come una matrice 2d piena di vettori 2d con valori casuali, o ancora meglio, come una scatola di cioccolatini dove al posto di ogni cioccolatino abbiamo una coppia casuale di numeri e questa coppia indica quanti passi fare in una direzione, tipo 3 passi a dx e 2 in alto).

(nello screenshot si vede il campo vettoriale sottostante: ogni linea indica una direzione diversa in cui il boid potrebbe muoversi)

boids_flow_field

La percentuale, o meglio il grado di desiderio che i boid hanno dipende dai 10 valori che prima abbiamo incontrato, che fungono da moltiplicatori.

Personalmente, la questione diventa molto interessante quando iniziamo ad accorgerci che queste regole di convivenza elementari mixate con un numero esiguo di parametri permettono di ottenere ogni volta un “dipinto” (le virgolette sono d’obbligo) assolutamente diverso e non prevedibile. Questo ci riporta all’emergenza: l’interazione di piccole entità semplici porta alla creazione di un’entità complessa con proprietà emergenti.

Insomma, guardate l’immagine qui sotto: ha delle proprietà che sono emerse dall’interazione dei boid, e che prima non c’erano.

twitter-bot-773521835233345536

Per ora è tutto, folks, ma dato che si tratta di uno studio molto personale che sto effettuando nel tempo, è probabile che questo articolo verrà aggiornato, magari anche con materiale più tecnico.

Se vi interessasse esplorare maggiormente il concetto di emergenza, non posso che raccomandare questo video di Casey Reas, uno dei creatori del software Processing.

Infine, ecco il link a tutte le immagini generate dal caro CCRTDROID:  http://twitter.com/ccrtdroid/media .

Namasté

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Immagine CAPTCHA

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">