Gli sviluppi dell' Intelligenza Artificiale hanno
mostrato che nell'affrontare problemi complessi la chiave
per il successo è la capacità di scomporli
in sottoproblemi più semplici, creando una struttura
gerarchica e modulare che permette di raggiungere un
livello di difficoltà affrontabile.
Sia che si consideri la Programmazione Genetica
come una effettiva possibilità per giungere in
futuro ad una programmazione completamente automatica,
sia che la si consideri solo un metodo alternativo per la
ricerca di soluzioni di tipo algoritmico per una vasta
gamma di problemi, l'importanza della gestione delle
subroutine risulta quindi fondamentale.
La Programmazione Genetica nella sua versione originaria non
riesce ad attuare un reale processo di scomposizione
gerarchica dei problemi, ma attraverso l'introduzione della
scoperta automatica delle subroutine si realizza
questo obbiettivo. Scopo primario del lavoro svolto è
quindi l'analisi di come tale meccanismo possa essere
implementato in modo efficiente, di quali siano le effettive
prestazioni osservate, e quali le possibilità di
miglioramento.
Il primo capitolo presenta la
Programmazione Genetica inquadrandola nell'ambito degli
Algoritmi Evolutivi, illustrando le numerose
varianti presenti in letteratura, le attuali direzioni di
ricerca e le possibili applicazioni del modello.
Il secondo capitolo illustra gli aspetti teorici
della Programmazione Genetica, con particolare attenzione ai
teoremi che cercano di modellarne il comportamento (Teorema
degli Schemi e di Price), evidenziandone i limiti
intrinseci.
Il terzo capitolo analizza le diverse
possibilità riguardanti l'introduzione delle
subroutine nella Programmazione Genetica, per arrivare ad
individuare come più promettente il modello
ARL. Sono quindi passate in rassegna le varie
euristiche per la scoperta automatica delle subroutine, per
poi proporne una nuova (salienza). Infine
viene rivisto l'algoritmo ARL criticandone alcuni aspetti e
proponendo alcune varianti, quali l'uso della mutazione per
la diffusione delle subroutine (diffusione per
mutazione) ed un metodo alternativo per l'epoca
dinamica (Maxfit).
Il quarto capitolo illustra l'estesa analisi
sperimentale svolta, articolata in tre fasi: la prima
riguarda il confronto diretto tra le euristiche di selezione
delle subroutine, la seconda valuta l'efficacia
dell'aggiunta automatica degli argomenti alle nuove
subroutine, la terza analizza il problema di quando sia
opportuno inserire nuove subroutine nella popolazione dei
programmi (epoca dinamica). Vengono in tal modo
analizzati gli aspetti fondamentali dell'algoritmo ARL e
l'efficacia delle proposte avanzate in tesi: al termine del
capitolo sono riportate le relative conclusioni e le
possibili direzioni di ricerca futura.
L'appendice riporta ulteriori dati sperimentali ed il
sorgente del programma sviluppato appositamente per
le esigenze della tesi.