di Carlo MORABITO
Possiedo un meraviglioso Ficus Reginaldo la cui crescita seguo con una certa attenzione da un pò di tempo. La pianta, allorchè l'acquistai, aveva un aspetto alquanto panciuto ed era carica di luminose foglie soprattutto nella parte bassa del fusto, nelle vicinanze del vaso. Portatala in casa, la sistemai in corridoio, dove esiste un' unica fonte luminosa attraverso una finestrella posta in alto. Molti di voi hanno sicuramente già sentito parlare di evoluzione e considereranno un pò ingenue le semplici osservazioni "scientifiche" che seguono. Vi chiedo, tuttavia, di permettermene la descrizione perchè così potrò trasmettervi quel sentimento di meraviglia che ha accompagnato, tra occhiate fugaci affogate in ben altri pensieri, la mia attenzione per lo sviluppo del Ficus. D'altronde, la meraviglia è assolutamente comune nei bambini, ma gli anni pian piano ci portano inesorabilmente via occasioni e voglia di meravigliarci. E da bambino vi racconto.
La pianta cominciò a soffrire la nuova condizione di illuminazione e quindi iniziò un lento depauperamento e irrigidimento delle foglie, le quali, per di più, perdevano via via vivacità nei colori e il verde brillante delle originarie foglie veniva sostituito, in apparenza, da un verde più cupo, profondo. La pianta aveva perso il suo aspetto fiero e rigoglioso, quasi sfrontato, del primo giorno e, insomma, sembrava sopportare malamente la nuova collocazione. Il processo, non voglio rinviare l'assunto, evolutivo continuò secondo una direzione che soltanto col senno di poi posso definire attesa: la pianta cresceva in altezza e fui costretto a cambiare il vaso originario per allargare la sua base e dare sfogo alle radici. Il risultato? Ulteriore crescita in altezza, restringimento della base sino alla rarefazione e, da ultimo, ripresa di colore nella parte che ormai nel suo sviluppo verticale aveva raggiunto l'apertura alla luce! Allora soltanto fui in grado di formulare una ipotesi che spiegasse la dinamica del colore delle foglie! Il colore scuro era proprio di foglie vecchie, probabilmente adattatesi alla condizione di sfavorevole illuminazione passando da un colore più riflettente ad un altro più assorbente. Le foglioline neonate della parte alta del fusto, godendo della luce, presentavano un aspetto decisamente giovanile e, appunto, più disponible alla riflessione della luce stessa. Vi sarete chiesti a questo punto perchè non provai a spostare la pianta? In effetti l'ho fatto, ma solo quando il fusto ha cominciato a dare segni di cedimento, cioè a flettersi sotto il peso della parte alta, assumendo un aspetto tutt'altro che gradevole. Si stava piegando come la spina dorsale degli anziani! Spostata la pianta all'aperto e non direttamente sotto luce del sole, essa ha ripreso a svilupparsi più coerentemente e si è raddrizzata.
Perchè questo semplice esempio di evoluzione e adattamento biologico? La teoria evoluzionistica è da attribuire con certezza a Darwin e corrisponde piuttosto a un pacchetto di teorie da analizzare separatamente. L'origine della specie, di Darwin, pubblicata nel 1859, è una composizione di cinque sottoteorie costituenti un paradigma di elevata complessità. Non sorprende, quindi, che i filosofi e gli scienziati dell'evoluzione tornino ai suoi scritti originali per dirimere dubbi e difendersi dagli avversari, ancora oggi numerosi. Non posso e non sono in grado di entrare nello specifico dettaglio della teoria, essendo obiettivo di questo scritto il calcolo evoluzionistico, ovvero l'applicazione di alcune idee "evoluzionistiche" alla ricerca scientifica. Cercherò di sintetizzare i cinque cardini del paradigma, rinviando il lettore interessato alle splendide opere di Ernst Mayr, Professore Emerito dell'Università di Harvard (tradotto in Italia da Bollati Boringhieri, per esempio in Il lungo ragionamento, 1994, e, prima, Biologia ed evoluzione). Alla base vi è la critica alla concezione di un mondo immutabile, creato di recente, ciclicamente di ritorno alle condizioni di origine. Gli organismi si trasformano (1, evoluzione) e tutti (2, discendenza comune) discenderebbero da un antenato comune (piante, animali, plancton, ...). La specie si moltiplica (3) suddividendosi in specie figlie o per gemmazione. L'evoluzione è graduale (4) e non contraddistinta da salti mutazionali e, infine (5), l'evoluzione si sviluppa attraverso il progresso e la riproduzione di individui con caratteri ereditari combinati in sequenze meglio adattatesi: hanno più probabilità di sopravvivere e di riprodursi i meglio adattati. Non stupisce la forte avversione della Chiesa dell'epoca a queste teorie e appare evidente, in nuce, il paradigma pericolosissimo quanto affascinante dell'ingegneria genetica. E' una teoria che comunque ha fornito una spiegazione di numerosi eventi importanti nella storia del nostro pianeta, ed è ovviamente anche stata utilizzata talvolta impropriamente, quando non a sproposito. Anche la scienza ha le sue mode, che rappresentano il tempo in cui viviamo. Viene da sè che anche il mondo del calcolo e dell'informazione si sia proposto di verificare l'utilità della metafora evoluzionistica al fine di risolvere problemi aperti.
Con il termine calcolo evoluzionistico viene generalmente indicato un insieme di strumenti di calcolo sviluppati negli ultimi anni dai ricercatori di tutto il mondo e dai nomi piuttosto affascinanti, per esempio algoritmi genetici, programmazione evolutiva, strategie evolutive. Questi algoritmi sono utilizzati con qualche successo in problemi di ottimizzazione e di ricerca, cioè dove i comuni algoritmi e programmi di calcolo mostrano spesso la corda. Questi metodi sono innanzitutto molto generali, e ciò deriva dalla natura degli operatori utilizzati, che non utilizzano per la soluzione del problema alcuna conoscenza a priori. La conoscenza di qualche aspetto di un problema da risolvere può aiutarci nella scelta di opportune categorie a cui la nostra soluzione può appartenere. Ciò implica una riduzione dello spettro delle soluzioni possibili e quindi una ricerca in ambiti più ristretti. La ricerca facilitata nasconde spesso l'insidia di trascurare aspetti incogniti o non chiari di un problema. D'altronde la ricerca della soluzione ottima di un problema senza vincoli è spesso un'operazione troppo costosa anche per il più veloce dei computer. Sfortunatamente, in parecchie situazioni realistiche dove si richiede un calcolo evolutivo, non è data alcuna informazione circa le qualità della popolazione da sottoporre a evoluzione. Per popolazione, un termine tecnico, si intende l'insieme dei possibili candidati alla soluzione del problema. Se, per esempio, la soluzione del nostro problema è una stringa di bit (una sequenza di numeri binari del tipo 01001101...), il numero di scelte possibili scala come 2n , che per stringhe di 3 bit vuol dire 8 e per stringhe di 8 significa 256, e così via. Se vi sembra grande una scelta tra 256 possibilità, pensate alla scelta di un numero sulla retta reale! Il calcolo evolutivo affronta il problema della mancanza di informazione sulla soluzione mediante il concetto di sviluppo adattativo. Ciò significa adattarsi dinamicamente al fine di anticipare le regolarità dell'ambiente in cui la soluzione evolve al fine di migliorare o velocizzare l'acquisizione di dati dall'ambiente stesso. Pensate all'esempio della pianta: è sopravvissuta solo in quanto ha capito la natura del problema e vi si è adattata con adeguata velocità. E lo ha fatto due volte, prima rincorrendo la luce e quindi variando la sua base per stabilizzarsi!
Vediamo di prepararci una sorta di glossario del calcolo evoluzionistico, che prende spunto dalla genetica, la scienza dei computer e l'evoluzione Darwiniana in un mix altamente specialistico, quasi da adepti. Questi algoritmi cercano ovviamente di emulare l'evoluzione biologica naturale. Non tutto è chiarito a questo proposito. Alcuni meccanismi appaiono tuttavia ormai definitivamente accettati: 1) l'evoluzione è un processo che opera su cromosomi e non su organismi; 2) la selezione naturale procede col criterio di favorire la generazione di entità meglio adattate all'ambiente; 3) il processo evolutivo ha luogo durante la fase riproduttiva. Abbiamo parlato in precedenza di popolazione, che è composta da individui (nell'esempio precedente l'insieme delle sequenze binarie di lunghezza n). Ciascun individuo può subire modifiche sulla base di operatori quali la mutazione e il crossing-over (incrocio). La mutazione si riferisce alla modifica, guidata dal caso, di alcuni aspetti di un individuo. Nel caso delle stringhe di bit ciò si sostanzia nella trasformazione di un bit nel suo complementare (0->1 o 1->0) con scelta arbitraria della posizione del bit nella stringa. Cross-over vuol dire scambio di sottostringhe tra due genitori con l'obiettivo di utilizzare pezzi di valore di entrambi producendo una stringa "figlia" (discendente, o offspring) che auspicabilmente migliori la specie! Se per esempio il padre è 11100|01110 e la madre 10100|11111 si tagliano le stringhe in corrispondenza del quinto bit e si ricombinano i pezzi ottenendo 11100|11111 e 10100|01110. Le stringhe vengono spesso dette cromosomi e gli operatori introducono informazione nel processo evolutivo dei cromosomi. La scelta dei migliori cromosomi viene fatta valutando la loro adeguatezza (fitness) al problema. Se l'algoritmo funziona bene, e le strategie evolutive sono scelte con oculatezza, i cromosomi inefficienti vengono scartati e sostituiti via via dalle migliori scelte fino a che non si produce una soluzione altamente evoluta. E' naturale che alcuni parametri influenzino la bontà dell'evoluzione, per esempio, la frequenza di cross-over e la severità della mutazione. Se cambiamo i bit troppo spesso soltanto basandoci sul caso possiamo perdere aspetti positivi degli individui non ancora assestati al punto da caratterizzare la popolazione. D'altronde l'intervento del caso favorisce la ricerca in regioni eventualmente inesplorate in caso di prematura convergenza. La scelta di questi parametri è proprio una strategia evolutiva. Le strategie evolutive determinano tipicamente una polarizzazione nella creazione della discendenza. L'obiettivo è sempre evidentemente generare una progenie predisposta alla soluzione ottimale, il miglioramento cioè del fitness.
Quanto fino adesso succintamente discusso fa riferimento soprattutto agli aspetti genetici dell'evoluzione, cioè, in termini di calcolo, agli algoritmi genetici. Più in generale, definirei un algoritmo evoluzionistico come un procedimento stocastico, iterativo e adattativo che opera su un insieme prescritto di individui costituenti nella loro totalità una popolazione di potenziali soluzioni del nostro problema di ottimizzazione o ricerca. La soluzione è determinata attraverso meccanismi di codifica e decodifica. La popolazione iniziale è generata in maniera completamente aleatoria, eventualmente riducendo le possibili regioni di evoluzione attraverso regole empiriche o euristiche. L' adeguatezza degli individui alla soluzione è misurata da una funzione di fitness che misura quantitativamente l'informazione che l'algoritmo usa per effettuare la ricerca, rappresentando quindi un criterio di evoluzione.
Gli algoritmi evolutivi più propriamente ricercano una soluzione e si muovono in spazi a valori reali e la mutazione avviene per correzione della distribuzione attuale mediante funzioni di probabilità, ad esempio funzioni gaussiane con deviazione standard selezionata come parametro di mutazione. Qui la discendenza viene creata operando la mutazione indipendentemente su ogni individuo della popolazione attraverso strategie del tipo appena accennato. E' interessante osservare che la forma della funzione di fitness esprime in un certo senso la difficoltà di individuare una soluzione ottimale al nostro problema. La dinamica di generazione di offspring dovrebbe in qualche modo essere relazionata a questa forma in maniera adattativa. Peraltro, la ricerca della soluzione mediante algoritmi evolutivi non richiede informazioni differenziali circa la funzione fitness e funziona bene anche con dati inquinati da rumore. Le tecniche algoritmiche descritte sono dunque ispirate alla natura, come del resto le tecniche neurali (discusse in Helios Magazine n.2). La più grave limitazione di questo approccio è, ancora oggi con calcolatori potentissimi, il tempo richiesto per arrivare alla fine del procedimento evolutivo. Come descritto brillantemente da Eugenio Montale in un suo famoso componimento, l'evoluzione biologica è così lenta che una lumaca al suo cospetto è un treno! Ciò nondimeno, e concludendo, mi sembra che la metafora evoluzionistica apra la via a un'idea del calcolo meno criptica e basata su concetti del tutto innovativi. Non a caso, questo argomento è oggi al centro dell'interesse della comunità scientifica internazionale.
Legenda:
Bit: Unità elementare del sistema binario, in grado cioè di assumere solo i valiri 0 e 1.
Algoritmo: Complesso ben definito di istruzioni o di richieste operative che regolano il comportamento di un operatore (meccanico, elettronico o anche umano) per la risoluzione di un problema.
Procedimento stocastico: Serie di probabilità sistematicamente varianti della ricorrenza di un pariticolare evento nel tempo.
Euristico: Attributo di un procedimento che affronta problemi che è impossibile o eccessivamente oneroso risolvere con procedimenti esatti e deterministici. Tale procedimento, procedendo per tentativi su una parte dei dati disponibili, non pretende di giungere a risultati precisi e definitivi, ma si accontenta di ottenere valutazioni approssimate dei risultati, impiegando risorse ridotte.