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.