DOCUMENTS

elab.immagini
galileo
realtà virtuale
vrml
biomeccanica
esapodi
formula1
intelligenza







Papers
meccanica
sistemi
robotica

 

INTRODUZIONE ALLA PROGRAMMAZIONE GENETICA

La rappresentazione della conoscenza

Un risvolto interessante della ricerca logica e psicologica sulla natura dei processi conoscitivi risiede nella possibilità di individuare degli elementi utili alla realizzazione di procedure informatiche "intelligenti" in grado cioè di apprendere direttamente dall'esperienza le categorie e le regole necessarie alla rappresentazione della conoscenza.

Un metodo molto collaudato di rappresentazione della conoscenza - la cui articolazione si rispecchia nei linguaggi naturali ed in quelli formalizzati - è quello di classificare degli oggetti in base alle loro proprietà (stati variabili) e di definire per ciascuna configurazione di stati delle regole di transizione che descrivono come gli stati si trasformano nel tempo; una siffatta rappresentazione è tanto più corretta quanto maggiore è la corrispondenza tra la trasformazione reale dell'ambiente rappresentato e la trasformazione "simulata" ovverosia dedotta mediante regole.

Ovviamente il numero di dettagli di un contesto reale disponibili alla rappresentazione è praticamente illimitato mentre un sistema cognitivo è costretto a circoscrivere l'ambito degli aspetti operativamente rilevanti; scrivono J.Holland et Al. Nell'opera "Induction", uno dei punti di riferimento nell’indagine attuale sull’evoluzione delle strutture concettuali: "In generale, il sistema cognitivo tenta di costruire vari modelli semplificati adeguati al conseguimento di determinati scopi. Ciò è realizzabile aggregando gli stati ambientali in utili categorie ed ignorando i dettagli irrilevanti per i propositi perseguiti."



Conoscenza ed adattamento: l’ottimizzazione evolutiva

Nello studio testè menzionato ciò che di un modello per la rappresentazione della realtà viene indicato come determinante è la sua adattabilità, la capacità di modificare le proprie strutture in funzione dell'efficacia previsionale ed operativa; le categorie e le regole in cui si articola un modello vengono selezionate in funzione dell'errore commesso nel raggiungimento di uno scopo prefissato.

Il concetto di selezione di per sé non è sufficiente a garantire che tra le tante ipotesi che un sistema può generare ve ne sia una adeguata a risolvere un problema dato: spesso il numero delle possibili soluzioni è così vasto che risulta impraticabile uno scandaglio esaustivo; un'esplorazione intelligente dello spazio delle soluzioni implica che da ciascun tentativo sia possibile ricavare un'indicazione utile ad orientare la ricerca.

Se concepiamo ciascuna soluzione come un'organizzazione di elementi che partecipano della qualità della soluzione complessiva, possiamo immaginare di assortire in una nuova struttura solo i componenti migliori (cioè quelli che appartengono alle soluzioni migliori); avremmo così ottenuto una nuova ipotesi da vagliare che non ha disperso i caratteri qualificanti delle soluzioni di cui è sintesi.

Selezionare e ricombinare delle informazioni facendo evolvere delle soluzioni adatte ai problemi affrontati: entro questi termini è stato possibile ridescrivere dei processi conoscitivi in termini di metafora biologica e realizzare concreti modelli operativi i più noti dei quali restano gli Algoritmi Genetici proposti da J.Holland a partire dal 1975.

Fin da subito questi algoritmi si rivelarono dei formidabili ottimizzatori, grazie ad una loro peculiarità, il parallelismo implicito; insisto parecchio in genere su questo punto affinchè non se ne trascuri la portata.

I G.A. esplorano ampie porzioni dello spazio delle soluzioni pur manipolando un numero relativamente esiguo di strutture (cioè, nella nostra metafora, di cromosomi); infatti, in virtù della ricombinazione, quando valuto una struttura, è un po' come se valutassi in un sol colpo tutte le strutture da questa rappresentate, aventi cioè degli elementi in comune con essa.

A tal proposito Holland introduce il concetto di "schema" per indicare le possibili configurazioni di elementi all'interno di una struttura: considerando di replicare i cromosomi di una popolazione in misura proporzionale al loro successo nel delineare una corretta soluzione, le parti di cui sono costituiti - cioè gli "schemata" - prolifereranno di conseguenza; per l'esattezza si propagheranno in proporzione alla media dei valori adattativi delle strutture a cui originariamente appartengono, e questa media può essere assunta come misura del contributo apportato da ciascuno schema all'emergere della struttura sub-ottimale.

Il prefisso cautelativo "sub" è d'obbligo, poiché la robustezza ed il parallelismo intrinseco dell'algoritmo operano a discapito della sua precisione: ciò che interessa, come in natura, non è l'affermazione di un super-individuo, ma la sopravvivenza di una specie accettabile e diversificata quanto basta a sopportare le trasformazioni del contesto.

Un’efficace procedura di ottimizzazione costituisce dunque la premessa necessaria per affrontare il problema della rappresentazione della conoscenza in termini di elaborazione di modelli finalizzata al minimo errore previsionale ed alla massima efficacia operativa.

La programmazione genetica: il computer impara a programmarsi

L'ambito privilegiato per la rappresentazione artificiale della conoscenza è notoriamente quello della computer science: attraverso programmi per computer viene oramai automatizzata una enorme quantità di processi decisionali, le macchine sono in grado di prevedere e di scegliere perché degli analisti hanno saputo riconoscere e classificare termini e regole determinanti nella soluzione di molti problemi.

Tuttavia i programmi ai quali siamo abituati, sono basati sul concetto di "istruzione", non godono del requisito dell'autonomia nell'organizzazione dei propri modelli, non hanno alcuna capacità di apprendimento, elemento qualificante della conoscenza del quale stiamo trattando.

Un importante passo verso l'autoprogrammazione, basato proprio sull'idea di fare evolvere geneticamente dei programmi per computer in funzione del problema da risolvere, è quello che sta compiendo la Genetic Programming i cui presupposti vengono sintetizzati da J.Koza con queste parole:

- molti problemi apparentemente diversi possono essere riformulati in termini di ricerca induttiva di programmi

- l’adattamento fornisce la struttura del programma necessario.

Un buon modo per esemplificare i vari momenti di un algoritmo GP è applicarlo al problema della regressione simbolica, della determinazione cioè della funzione che meglio approssima una serie di dati sperimentali; l'esempio possiede un buon grado di generalità se si considera che in linea di principio tutti i problemi - basti pensare alla nozione di funzione caratteristica - possono essere interpretati in termini di funzione da calcolare (in breve, di associazione di output ad input).

Supponiamo dunque di disporre di una serie finita di quantità, e di voler conoscere la "legge" matematica che vincola queste quantità; immaginiamo quindi di scomporre e ricomporre degli insiemi di operazioni, variabili e costanti fino ad ottenere quella funzione che, applicata, generi dei valori simili a quelli della serie di partenza.

Nella Genetic Programming, la struttura tradizionale per la rappresentazione delle procedure che costituiscono le possibili soluzioni di un problema è l'albero binario; essa riproduce la notazione simbolica premessa la quale consente di prevenire agevolmente ambiguità nell'interpretazione della formula una volta poste alcune restrizioni in particolari fasi di elaborazione dell'algoritmo.

Questa scelta sintattica ha reso particolarmente agevole l'adozione del Lisp quale ambiente tradizionale per l'implementazione di questi algoritmi ma nulla ovviamente impedisce l'utilizzo di altri linguaggi.

Il ciclo esecutivo è così articolato:

Generazione di una popolazione di alberi binari

Per ciascun albero che si desidera generare, a partire da un simbolo di operazione (+,-,*,/) innescare il seguente processo di crescita:

- se un nodo contiene un simbolo di operazione, ramificare due nodi ciascuno contenente uno dei seguenti simboli sorteggiati casualmente:

Simbolo di operazione

Simbolo per costante casuale (0,…,n)

Simbolo per variabile (x)

- altrimenti blocca la crescita in quel nodo.

E' importante scegliere le funzioni in maniera che il possibile valore appartenga sempre all'insieme dei possibili argomenti (requisito della chiusura); per tale ragione, si evita ad esempio di considerare lo zero un possibile divisore, imponendone la trasformazione in valore 1 qualora comparisse come denominatore.

Valutazione

La probabilità di conservazione di ciascun albero nella popolazione viene stabilito attribuendo allo stesso un valore adattativo inversamente proporzionale allo scarto complessivo tra gli output originati dall'applicazione della formula generata, ed i dati empirici da approssimare.

Selezione

Dalla popolazione si sorteggiano due coppie di alberi e per ognuna si sceglie l'albero col valore adattativo maggiore - quello, come si è appena visto che da luogo al margine di errore più ridotto - e si scarta il rimanente.

Crossover

Si troncano gli alberi così selezionati ognuno in un punto casuale e se ne ricombinano gli elementi, il materiale dell'uno va a sostituire il materiale dell'altro e viceversa. Come nel caso della generazione, l'innesto delle parti nuove può avvenire solo in corrispondenza di un simbolo di operazione.

Nuova valutazione e rimpiazzamento

Ottenuti in questo modo due nuovi individui se ne registra il valore adattativo e si collocano al posto degli individui scartati durante la selezione.

Reiterazione

Il ciclo viene ripetuto a partire dalla selezione sino al raggiungimento di una soglia accettabile di precisione nell'approssimazione della funzione.

L'esito dell'elaborazione è rappresentato dal polinomio approssimante la serie di valori di input.


ss
sss Generazione di alberi binari:
per ciascun albero innesta un simbolo di operazione o variabile o costante s se l'ultimo innestato contiene un simbolo di operazione
Valutazione:
applica agli input ciascuna delle funzioni rappresentate dagli alberi e calcola lo scarto
Selezione:
sorteggia tra gli alberi valutati delle coppie e per ognuna conserva l'albero con il valore maggiore
Ricombinazione:
scambio di porzioni tra coppie di alberi
Rimpiazzamento:
adozione dell'insieme di strutture risultato della ricombinazione come popolazione da avviare ad un nuovo ciclo