Politecnico di Milano

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Politecnico di Milano"

Transcript

1 Politecnico di Milano Facoltà di Ingegneria dell Informazione Corso di Laurea in Ingegneria Informatica Dipartimento di Elettronica e Informazione Framework per lo sviluppo di descrizioni HW basato su ImpulseC tramite l uso di algoritmi evolutivi Relatore: prof.ssa Anna Antola Correlatore: ing. Marco Domenico Santambrogio Tesi di Laurea di: Marco CASTAGNA matr Anno Accademico

2

3 Ringraziamenti In primo luogo vorrei ringraziare la relatrice,prof.ssa Anna Antola, e il correlatore, l ing. Marco Domenico Santambrogio. In particolare quest ultimo sia per la pazienza e attenzione col quale ha supervisionato il lavoro di stesura della tesi sia per i preziosi spunti e consigli riguardanti il progetto sviluppato. In secondo luogo, ma non certo per importanza, vorrei ringraziare Laura sia per i piccoli consigli riguardo alcune porzioni dell eleborato che, soprattutto, per l inestimabile valore della sua presenza in grado, al contempo, di fungere da efficacissimo sprono che da dolcissimo e insostituibile supporto morale nei momenti piú duri. Ringrazio di cuore tutta la mia famiglia, papá Sergio, mamma Mariagrazia, mia sorella Chiara e mio fratello Tommaso per avermi sopportato durante questo periodo di intenso lavoro. Un altro ringraziamento va ad alcune persone speciali e che stimo in particolar modo, che con la loro simpatia hanno saputo fornire le giuste distrazioni nei periodi peggiori. I miei piú sinceri ringraziamenti vanno quindi a Christian, Francesco (e tutta la sua famiglia), Alessio, Andrea, Marco, Carla e a tutta la famiglia Pirovano. Ringrazio inoltre tutti coloro che hanno fatto si che questi primi anni di studi siano passati in maniera spensierata e allegra: Tommaso, Gabriele, Matteo, Enrico, Andrea, Roberto, Matteo e tutti i colleghi matematici. Milano, 27 Settembre 2006 Marco iii

4

5 Indice 1 Introduzione Introduzione all Evolvable Hardware L hardware da evolvere: FPGA Algoritmi Evolutivi Terminologia Algoritmi Genetici Evolution Strategies Simulated Annealing Genetic Programming Sommario Analisi delle possibili configurazioni implementative CGA + Extrinsic Evolution SA + Intrinsic Evolution Pc Driven Hardware Driven CGA + Intrinsic Evolution Confronto tra le soluzioni presentate Soluzione Proposta Introduzione ai Circuiti Virtuali Riconfigurabili Il VRC per il caso di studio Definizione e disposizione del genotipo Dettagli di progettazione in ImpulseC Possibili problematiche relative all implementazione Considerazioni finali v

6 4 Implementazione Dettagli dell Algoritmo Evolutivo Composizione della popolazione Selezione Crossover Mutazione Valutazione degli individui Dettagli dell implementazione dei processi in ImpulseC Il processo Produttore I processi CFB I processi RB Osservazioni finali Analisi dei Risultati Evoluzione di un semplice edge detector Eliminazione del rumore da semplici immagini Evoluzione di un Edge Detector per semplici immagini contenenti rumore Riduzione del rumore da immagini complesse Conclusioni e Sviluppi Futuri 107 Elenco delle figure 111 Bibliografia 115

7 Sommario Lo scopo di questo elaborato é quello di esporre una possibile configurazione implementativa (hardware/software) per realizzare un Algoritmo Evolutivo che permetta di evolvere la configurazione Hardware di una FPGA. Quello che si intende descrivere viene definito con il nome di Evolvable Hardware (EHW ). L EHW é hardware realizzato su dispositivi logici programmabili e riconfigurabili (nel nostro caso una FPGA) la cui architettura viene riconfigurata ed ottimizzata mediante Algoritmi Evolutivi[29]. Il particolare caso di studio consiste nell evoluzione a livello funzionale (mediante Circuiti Virtuali Riconfigurabili proposti da Sekanina) di un modulo hardware/software per Digital Image Processing, in particolare un filtro 3x3. Tutto il modulo verrá implementato facendo uso del tool chiamato ImpulseC. Questo permetterá di descrivere al contempo la struttura hardware e software per creare il circuito riconfigurabile utilizzando il linguaggio C (con alcune limitazioni). In questo modo si semplifica e velocizza il processo di progettazione del Circuito Virtuale Riconfigurabile potendo facilmente definire la granularitá del circuito e le connessioni interne. Di seguito verranno innanzitutto introdotte alcune nozioni generali sull Evolvable Hardware (sez 1.1) presentandone le caratteristiche salienti e ponendo particolarmente in rilievo le caratteristiche della FPGA che risultano fondamentali per il processo di evoluzione dell hardware (ma anche alcune limitazioni di questo tipo di hardware riconfigurabile). Quindi, verranno presentati gli Algoritmi Evolutivi principalmente usati nel campo dell Evolvable Hardware(sez 1.3) oltre che la terminologia frequentemente utilizzata nella descrizione di questi algoritmi (sez 1.3). Nel capitolo 2 saranno esposte tre possibili configurazioni Hardware/Software per la realizzazione di Evolvable Hardware evidenziandone i rispettivi vantaggi/difetti. Nel capitolo 3 verrá illustrata in dettaglio la particolare configurazione proposta per la realizzazione dell Evolvable Hardware in particolare, verrá in-

8 trodotto il concetto di Circuito Virtuale Riconfigurabile (sez 3.1) e, in seguito, verrá presentato il particolare VRC utilizzato nel caso di studio (sez 3.2) oltre che alcune considerazioni sulla struttura del genotipo(sez 3.3). Di seguito, nel capitolo 4, verrano illustrate le scelte implementative fatte per la realizzazione del modulo utilizzando ImpulseC. Il capitolo 5 contiene invece alcuni esperimenti effettuati per testare le potenzialitá dell Evolvable Hardware nel caso di studio. Infine nel capitolo 6 verranno tirate le somme degli espetimenti svolti e saranno proposte delle possibili migliorie o approfondimenti. 2

9 Capitolo 1 Introduzione 1.1 Introduzione all Evolvable Hardware L EHW é hardware realizzato su dispositivi logici programmabili e riconfigurabili(nel nostro caso una FPGA) la cui architettura viene riconfigurata ed ottimizzata mediante Algoritmi Evolutivi[29]. L idea 1 é quindi appunto quella di codificare la configurazione del circuito che si vuole evolvere (per esempio i bit di configurazione di una FPGA) all interno di strutture concettualmente simili a cromosomi e controllarne l evoluzione mediante degli Algoritmi Evolutivi. Il comportamento di ogni configurazione candidata viene misurato e ad ognuna viene assegnato un punteggio 2 secondo un certo criterio di valutazione (fitness function o funzione obiettivo) in modo che quelle con il punteggio piú elevato vengano selezionate per essere manipolate dagli operatori genetici utilizzati nell Algoritmo Evolutivo. Il ciclo di valutazione, selezione e manipolazione viene ripetuto finché non si ottiene una configurazione con il comportamento voluto o finché l esecuzione non viene arbitrariamente sospesa. Esistono molti aspetti del procendimento appena esposto che possono essere leggermente modificati dando cosí origine a moltissime varianti dello stesso processo di evoluzione. Le principali differenziazioni riguardano: 1 I primi studi sull EHW risalgono al 1992 anche se uno tra i primi circuiti evoluti mediante evoluzione artificiale in grado di sfruttare in maniera significativa le potenzialitá offerte da questo approccio risale al 1996 (Thompson [30]) 2 Questo punteggio é tanto piú alto tanto piú il comportamento del circuito analizzato si avvicina a quello desiderato 3

10 Introduzione Il livello al quale si vuole effettuare l evoluzione. La scelta tra valutazione degli individui tramite simulazione o valutazione degli individui una volta implementati come circuiti fisici. L imposizione o meno di vincoli allo Spazio delle Configurazioni 3 Per quanto rigurada il livello al quale effettuare l evoluzione, esistono due possibli scelte che vanno a definire due differenti approcci (o livelli) all evoluzione hardware. Questi due approcci sono detti Gate Level e Function Level[29]. Per quanto riguarda l approccio Gate Level le unitá fondamentali (nel caso Figura 1.1: Evolvable Hardware con evoluzione Gate Level di hardware digitale) sono le semplici porte logiche e, cambiando il valore dei bit di configurazione, si modificano il numero, il tipo e i collegamenti delle porte logiche incluse nella configurazione (vedi fig 1.1). Nel caso di approccio Function Level le unitá fondamentali non sono piú delle semplici porte logiche ma bensí unitá capaci di funzioni di livello piú elevato (per esempio sommatori, sottrattori, moltiplicatori...). Modificando i bit della configurazione si vanno a modificare i collegamenti tra input, unitá elementari e output in modo da definire il comportamento del circuito. In fig 1.2 é riportato un modello proposto da Higuchi et al.[29]. 3 Per Spazio delle Configurazioni o anche Design Space si intende quello spazio immaginario in cui ogni punto rappresenta la configurazione di un circuito elettronico [32]. In esso sono presenti tutti i possibili circuiti ottenibili, fissati i singoli componenti disponibili e le limitazioni tecnologiche su quanti componenti possono essere presenti nello stesso circuito e su come interagiscono tra di loro. In questa metafora é possibile immaginare che circuiti simili siano vicini l un l altro[32]. 4

11 1.1 Introduzione all Evolvable Hardware Figura 1.2: Modello di una FPGA per evoluzione Function Level Per quanto riguarda la scelta di quando valutare le configurazioni in esame esistono due soluzioni pure e una mista. La prima é quella di effettuare la valutazione mediante una simulazione realizzata al computer. Questo tipo di approccio é noto come Extrinsic Evolution [7]. Al contrario, il secondo approccio puro prevede che la valutazione avvenga solo dopo che le configurazioni siano state implementate come circuiti reali. Questo approccio prende il nome di Intrinsic Evolution. Ciascuno dei due approcci presenta vantaggi e svantaggi, per esempio nel caso di Extrinsic Evolution la simulazione puó in certi casi essere piú veloce (per esempio nel caso della sintesi di controllori per robot autonomi dove é necessario che il robot si possa muovere nell ambiente casuale e solo dopo che é avvenuta l esplorazione é possibile valutare la bontá del controllore) ma puó anche essere che, a causa delle approssimazioni effettuate nella simulazione, alcuni aspetti della realtá non presi in considerazione (il cosiddetto reality gap) possano alterare il comportamento della configurazione una volta implementata come circuito reale. Per contro invece, nel caso di Intrinsic Evolution si elimina del tutto il reality gap in quanto si permette agli algoritmi evolutivi di sfruttare tutta la serie di effetti secondari che non é possibile (o non si vuole) riprodurre in simulazione ma che sono presenti nella realtá. Questa caratteristica é molto importante nel caso di Evoluzione non vincolata o Unconstrained Evolution (vedi prossimo paragrafo). Vi é infine un terzo approcio, meno utilizzato, che consiste nel valutare parte degli individui in simulazione e parte dopo essere stati implementati. Questo tipo di approccio prende il nome di Mixtrinsic Evolution. Prima di descrivere i due approcci con e senza vincoli e bene definire cosa si intende per vincolo. Nel caso di Evolvable Hardware un vincolo é una limitazione dello spazio delle configurazioni. Per esempio, nel caso di Extrinsic 5

12 Introduzione Evolution si introducono una notevole serie di vincoli dati dagli aspetti della realtá non considerati nella simulazione, impedendo di fatto l esplorazione di una parte dello spazio delle configurazioni (per esempio tutte le possibili configurazioni che fanno implicitamente uso di questi effetti secondari). Allo stesso modo si introducono vincoli nel caso in cui, per esempio, nell evoluzione di una rete neurale artificiale si permette l evoluzione dei soli pesi associati ai dendriti (w) pittosto che la struttura della rete stessa (nota: questi vincoli sono introdotti indipendentemente dal fatto di far uso si Extrinsic Evolution o Intrinsic Evolution). Thompson et al. hanno inoltre ipotizzato ([32]) che tutti i metodi di progettazione circuitale classici considerano solo zone limitate dello Spazio delle Configurazioni. Nel caso invece che non vengano imposti vincoli 4 (Unconstrained Evolution) si lascia completa libertá di esplorazione all Algoritmo Evolutivo il che permette di ottenere dei considerevoli risultati. In particolare sempre Thompson et al. in [32] hanno fatto altre due importanti ipotesi: Gli Algoritmi Evolutivi, se non sottoposti a vincoli, potrebbero esplorare zone dello Spazio delle Configurazioni non raggiungibili con i metodo di progettazione classici. Questo fatto aumenterebbe la probabilitá di trovare soluzioni migliori. Gli Algoritmi Evolutivi in pratica producono delle soluzioni al di fuori della portata dei metodi tradizionali e che possono essere, sotto alcuni aspetti, considerate migliori. Una conferma pratica delle potenzialitá dell evoluzione senza vincoli é stata ottenuta da Thompson [30] che, utilizzando una piccola porzione di una FPGA 5 (10x10 CLB) é riuscito a far evolvere un circuito in grado di discriminare tra due segnali in ingresso a frequenza diversa (in particolare due onde quadre con frequenza 1kHz e 10kHz) il tutto senza fornire al circuito nessun segnale di clock esterno. Un altro aspetto notevole é che, sempre nel circuito cosí evoluto, sono presenti alcune CLB scollegate dal resto del circuito la cui presenza é comunque fondamentale ai fini del funzionamento. 4 ad essere precisi nel caso si usi una FPGA esistono sempre dei vincoli impliciti dati dalla limitatezza dei circuiti primitivi disponibili sulla scheda, ovvero la granularitá del chip. 5 Xilinx XC6216 6

13 1.2 L hardware da evolvere: FPGA E naturale, di fronte ad esempi come questo, porsi domande sulla robustezza di tali circuiti. Cosa succede cambiando FPGA? o semplicemente cambiando la temperatura di esecizio della stessa scheda, o traslando la configurazione in un altra area della stessa FPGA? Thompson e Layzell [2] hanno cominciato a dare risposta a queste domande mostrando che, includendo queste fonti di disturbo nella fase di evoluzione, i risultati ottenuti presentano una notevole robustezza ai cambiamenti citati. 1.2 L hardware da evolvere: FPGA Per quanto riguarda l EHW digitale l uso delle FPGA sembra essere una scelta quasi obbligata grazie ad alcune caratteristiche che rendono questa soluzione ideale per l Evoluzione Artificiale. In particolare per la possiblitá di riconfigurare in tempi brevi tutta o solo parte della sua area, dalla sua elevata flessibilitá oltre al fatto di essere disponibile commercialmente. Gli elementi principali di una FPGA sono dei blocchi logici configurabili (CLB) connessi insieme in una struttura a griglia da connessioni anch esse configurabili. Inoltre al perimetro del chip sono disposti una serie di blocchi configurabili per l input/output (IOBs) connessi alla griglia interna [22]. La complessitá delle CLB varia dai Figura 1.3: Schema generale della struttura di una FPGA semplici blocchi logici con multiplexer a tredici ingressi (Xilinx 6200) fino a 7

14 Introduzione piccoli processori (Matrix, Garp). Di fatto la soluzione piú di frequente utilizzata dai ricercatori era la serie 6200 della Xilinx. Questa famiglia di FPGA possiede alcune caratteristiche che ne hanno fatto l hardware ideale per gli esperimenti sull evoluzione artificiale. Queste caratteristiche sono[6]: Elevata velocitá di riconfigurazione : le FPGA appartenenti a serie precedenti alla 6200 erano giá in grado di riconfigurarsi ma i tempi impiegati per eseguire questa operazione erano nell ordine di alcuni secondi il che le rendeva inadatte nel caso di Intrinsic Evolution dove é necessario istanziare complessivamente anche alcune migliaia di configurazioni. La serie 6200 conserva i bit che ne descrivono la configurazione all interno di una RAM statica il che riduce di molto i tempi di accesso, lettura e modifica della configurazione stessa. C é da dire peró che l unica via per riconfigurare rapidamente la FPGA accedendo ai bit di configurazione custoditi nella RAM é quella di effettuare una riconfigurazione esterna ovvero da una unitá esterna alla FPGA (i.e. un PC o un altra FPGA). Questo fatto in pratica limita la possiblitá di implementare un sistema evolvibile su di un unico chip, infatti la riconfigurabilitá interna risulterebbe troppo lenta per questo tipo di applicazioni[27]. Riconfigurabilitá parziale : ovvero la capacitá di riconfigurare solo una porzione dell area disponibile senza alterare il funzionamento del resto del circuito. Configurazione Sicura : considerato che gli operatori di mutazione utilizzati negli Algoritmi Evolutivi utilizzano delle mutazioni casuali ignorando quasi sempre la struttura del corrispondente circuito elettrico, é possibile che mediante una di queste mutazioni si ottengano delle configurazioni illegali tipicamente per la presenza di corto circuiti che rappresentano condizioni pericolose per l integritá dell FPGA. La serie 6200 della Xilinx fa uso si CLB la cui architettura (vedi fig 1.4) rende impossibile la creazione di situazioni pericolose rendendo di fatto sicura qualsiasi configurazione. Formato del bitstream aperto : contrariamente alle serie precedenti il formato del bitstream per la serie 6200 era aperto. In questo modo era 8

15 1.2 L hardware da evolvere: FPGA Figura 1.4: Configurazione delle CLB nelle FPGA della serie XC6200 facile agire direttamente sui bit di configurazione per modificare i singoli elementi. Purtroppo, proprio a causa di alcuni incovenienti legati a queste caratteristiche (per esempio la possiblitá di effettuare reverse engineering delle configurazioni o il fatto che, proprio per rendere sicura la configurazione, si era deciso di ridurre la connettivitá delle singole CLB di fatto limitando il numero di applicazioni complesse che il dispositivo sarebbe stato in grado di implementare[6]) la Xilinx nel 1998 ha annunciato la fine della produzione della serie 6200 per passare alle FPGA della serie Virtex. Queste, pur conservando alcune delle caratteristiche che avevano reso la serie 6200 cosí popolare tra i ricercatori interessati all Evolvable Hardware, come per esempio la capacitá di riconfigurarsi rapidamente o la possiblitá di una riconfigurazione parziale, ha di fatto reintrodotto delle caratteristiche che complicano il processo di evoluzione. Tra queste, le piú rilevanti sono: Reintroduzione del routing multi-direzionale reintroducendo quindi la possibilitá di realizzare delle configurazioni illegali che possono danneggiare la FPGA (per esempio, collegare tra di loro due uscite di due CLB adiacenti). Per ovviare a questo problema si potrebbe semplicemente impedire di evolvere la configurazione delle connessioni (che viene fissata a priori) modificando solo le funzioni svolte dalle singole CLB. Questa soluzione é utilizzata per esempio nella realizzazione di semplici controllori per robot [23]. Nel caso invece sia indispensabile evolvere anche la configurazione delle connessioni tra le CLB bisogna adottare una strategia differente. Una possibile soluzione é quella proposta da Hollingworth 9

16 Introduzione et al. [6] che consiste nel simulare le CLB della serie 6200 all interno di quelle della serie Virtex. Un altra soluzione piú recente consiste nella realizzazione di circuiti virtuali riconfigurabili o VRC mappati sulle risorse della FPGA[10]. Ritorno al bitstream con formato chiuso : rendendo quindi difficoltosa la modifica del bitstream. Alcuni ricercatori ([6]) hanno fatto uso di una serie di API (prima free, poi diventate di proprietá della Xilinx) per la modifica del bitstream chiamate JBits. Oltre il fatto che tali librerie sono disponibili solo per pochi modelli (la versione 3.0 é disponibile solo per Virtex-II) il loro utilizzo risulta troppo difficoltoso [12] [4] e quindi sono poco utilizzate. Ancora un volta una soluzione a questo inconveniente sembra essele l utilizzo dei VRC. Da quanto detto sembra che le FPGA si prestino abbastanza bene (a meno di piccoli accorgimenti come nel caso della serie Virtex) all Evoluzione Artificiale. Purtroppo peró esistono degli inconvenienti non trascurabili insiti nella tecnologia utilizzata nelle FPGA attuali. Principalmente esistono almeno 3 problematiche[14]: in primo luogo attualmente non esiste una vasta scelta negli elementi base che costituiscono una FPGA di tipo commerciale, dove tipicamente tale elemento base é rappresentato dalle CLB. Questo fatto é particolarmente restrittivo nel caso in cui si vogliano implementare dei circuiti analogici. Sebbene sia pur vero che tali circuiti sono evolvibili anche su FPGA grazie alle possiblitá offerte dall Evoluzione Artificiale é anche vero che proprio questi circuiti soffrono di una serie di incovenienti come per esempio una eccessiva dipendenza dalla temperatura e, in generale, di una scarsa portabilitá delle configurazioni. Esistono in commercio dei dispositivi programmabili analogici ma anche in questo caso non é ben chiaro quale possa essere l elemento base in quanto é fortemente dipendente dal tipo di circuito che si vuole ottenere. Per esempio, per applicazioni abbastanza semplici questo elemento base potrebbe essere semplicemente il transistor, in altri casi potrebbero essere componenti piú complessi come amplificatori operazionali o combinazioni di resitori e capacitá. In secondo luogo nelle FPGA attuali lo schema delle connessioni tra le CLB é realizzato seguendo i principi di progettazione modulare classici. Potrebbe essere invece che l evoluzione artificiale possa essere in grado di sfruttare altre tipologie di connessioni in maniera molto piú efficiente di 10

17 1.3 Algoritmi Evolutivi quanto faccia ora. Purtroppo peró non esistono ancora sufficienti conoscenze per poter stabilire certamente questa possiblitá. Infine alcuni circuti, evoluti su FPGA, presentano un funzionamento difficilmente spiegabile (benché coerente col comportamento desiderato) ma soprattutto difficilemente analizzabile a causa del fatto che non é possibile accedere ai singoli elementi base che costituiscono il circuito, proprio per come é fatta la FPGA. Per questi motivi alcuni ricercatori hanno proposto nuove tipologie di hardware che dovrebbero essere piú adatte all Evoluzione Artificiale a allo studio di questo settore. Tra queste nuove proposte ce ne sono alcune, come quella proposta da Haddow e Tufte [22], che adottano un approccio ancora molto simile a quello delle FPGA ed altre come quella proposta e realizzata da Layzell [13] propongono invece un approccio nuovo come quello di una scheda madre evolvibile. 1.3 Algoritmi Evolutivi La famiglia degli Algoritmi Evolutivi comprende una vasta serie di metodi di ottimizzazione tutti aventi una caratteristica comune cioé quella di basarsi su un fondamentale principio evolutivo: la sopravvivenza dell individuo piú forte. Tali algoritmi usano delle tecniche stocastiche di ricerca che ricalcano alcuni fenomeni naturali come l ereditarietá del materiale genetico e, appunto, il principio di sopravvivenza del piú forte[17]. Come detto esistono molti metodi che fanno parte della famiglia degli Algoritmi Evolutivi, tra questi, i piú utilizzati nel campo dell Evolvable Hardware sono: gli Algoritmi Genetici, le Evolution Strategies e il metodo di Genetic Programming. A questi metodi se ne aggiunge un altro, utilizzato meno di frequente, che é il metodo di Simulated Annealing. Questo metodo peró sfrutta un altro principio naturale differente peró da quello di evoluzione delle specie e quindi piú che tra gli Algoritmi Evolutivi appartiene alla famiglia piú generale dei metodi di Ottimizzazione Combinatoria[33]. In particolare il metodo prende spunto dal processo di raffreddamento e solidificazione che si presenta in alcune sostanze come i metalli (vedi sez 1.3.4). Tutti i metodi presentati hanno dei punti in comune come la rappresentazione di una possibile soluzione sotto forma di cromosoma, la presenza di operatori di mutazione casuale e il fatto che tutti i metodi richiedono la definizione di una funzione obiettivo o 11

18 Introduzione funzione energia. Il valore di tale funzione é direttamente legata alla bontá di una specifica soluzione[33]. Prima di presentare con maggior dettaglio i metodi nominati in precedenza, viene riportata di seguito una serie di termini appartenenti al lessico della biologia ma anche usati nella descrizione degli Algoritmi Evolutivi [15] Terminologia Tutti gli organismi viventi sono composti da cellule, e ogni cellula contiene un insieme di uno i piú cromosomi che rappresentano una sorta di schema di costruzione dell organismo. Un cromosoma puó essere concettualmente diviso in geni ognuno dei quali codifica una particolare proteina. In maniera molto approssimativa é possibile pensare che un gene definisca un carattere come, per esempio, il colore degli occhi di una persona. Le differenti possibili configurazioni di un carattere (continuando l esempio del colore degli occhi saranno, per esempio, blu, marrone, verde...) sono chiamate alleli. Ogni gene si trova in un particolare locus (posizione) all interno del cromosoma. Molti organismi hanno piú cromosomi in ogni cellula. L insieme di tutto il materiale genetico (tutti i cromosomi presi insieme) é chiamato genoma dell individuo. Il termine genotipo indica un particolare insieme di geni contenuti in un genoma. Due individui che hanno lo stesso identico genoma hanno anche lo stesso genotipo. Il genotipo da origine, attraverso lo sviluppo di un individuo, al fenotipo di un organismo ovvero le sue caratteristiche fisiche e mentali come, per esempio, il colore effettivo degli occhi, l altezza, il peso e l intelligenza. Gli organismi in cui i cromosomi sono distribuiti a coppie sono detti diploidi al contrario degli organismi in cui non esiste questo accoppiamento che sono detti aploidi. Gli uomini, come molte specie in natura con riproduzione sessuata, sono organismi diploidi. In particolare l uomo ha 23 coppie di cromosomi. Durante la riproduzione sessuata si presenta una ricombinazione del materiale genetico dei genitori (anche detta crossover). I nuovi individui generati vanno incontro inoltre ad un processo di mutazione in cui i singoli nucleotidi (i bit elementari del DNA) vengono cambiati rispetto e quelli dei genitori. Tali cambiamenti sono spesso il risultato di errori di copia del materiale genetico. Il fitness di un individuo é di solito definito come la probabilitá che un individuo riesca a sopravvivere fino a riuscire a riprodursi. 12

19 1.3 Algoritmi Evolutivi Negli Algoritmi Evolutivi, il termine cromosoma si riferisce ad una soluzione candidata per un certo problema, spesso codificata come una stringa di bit. I geni possono essere sia i singoli bit che piccoli blocchi di bit adiacenti che codificano un particolare elemento della soluzione candidata (nell esempio di Evolvable Hardware puó essere la configurazione di una CLB). I due unici alleli di un gene rappresentato da un bit sono semplicemente lo 0 o l 1, per alfabeti piú grandi, ovviamente, possono esserci piú alleli per un singolo locus. Il crossover tipicamente consiste nello scambio di bit tra i due cromosomi dei cromosomi genitori. La mutazione invece consiste nell inversione di uno o piú bit appartenenti ad un locus scelto a caso. Nella maggioranza delle applicazioni degli Algoritmi Evolutivi vengono usati degli individui aploidi, in particolare, individui con un unico cromosoma. Il genotipo di questi individui, il cui cromosoma é rappresentato come una stringha di bit, é semplicemente la configurazione dei bit di tale cromosoma. Spesso non esiste alcuna distinzione tra genotipo e fenotipo (quindi tutti gli individui con lo stesso genotipo hanno lo stesso fenotipo, ammesso che abbia senso parlare di fenotipo) anche se alcuni ricercatori hano fatto uso di Algoritmi Evolutivi che presentano un livello genotipico ed uno fenotipico (ad esempio, la codifica come stringa di bit di una rete neurale e la rete neurale stessa) Algoritmi Genetici Gli Algoritmi Genetici (AG), inventati da John Holland attorno agli anni 60, furono sviluppati dallo stesso Holland e da alcuni suoi strudenti presso l Universitá del Michigan tra gli anni 60 e 70. Tali algoritmi rappresentano delle tecniche non lineari di ottimizzazione che utilizzano dei meccanismi analoghi a quelli presenti nel processo di selezione naturale al fine di condurre una ricerca all interno di un certo spazio dei parametri assegnato in modo da indentificare il minimo (o massimo) globale di una certa funzione obiettivo[33]. Gli AG mantengono in memoria una popolazione di soluzioni candidate, chiamate anche individui. Ad ogni iterazione, anche chiamata generazione, ogni individuo viene valutato e ricombinato con gli altri individui in base al valore della funzione obiettivo valutata per quella specifica soluzione. Il numero di volte che un certo individuo viene scelto per effettuare la riproduzione dipende dal suo fitness e da quello degli altri individui. Ovvero, gli individui con i valori 13

20 Introduzione piú alti di fitness avranno maggiori possibilitá di riprodursi (e quindi trasmettere il proprio materiale genetico) per dare origine alla prossima generazione. Questo assicura la proliferazione di soluzioni ottimali nonché l aumento del valore medio di fitness su tutta la popolazione. I nuovi individui vengono creati per mezzo di tre operatori: selezione, mutazione e crossover. L operatore di selezione é quello che sceglie dalla popolazione attuale gli individui per la riproduzione e ne copia (anche piú di una volta) il materiale genetico in modo da formare la prossima generazione. La scelta, come detto, avviene in modo che gli individui con un elevato valore di fitness abbiano una maggior probabilitá di riprodursi. L operatore di crossover seleziona un locus in maniera casuale e concatena il materiale genetico dei due genitori in modo che i geni appartenenti a locus precendenti a quello scelto provengano dal primo genitore mentre quelli successivi dal secondo.per esempio, se i genotipi di due individui genitori sono rispettivamente e se il crossover viene effettuato dopo il quinto bit si avranno come risultato i due cromosomi e L operatore di mutazione interviene inserendo delle modifiche casuali all interno dei cromosomi degli individui appartenenti alla nuova generazione. Tale operatore ha la doppia funzione di (re)introdurre dei genotipi nuovi o andati persi e di garantire l esplorazione il piú esaustivo possibile dello spazio di ricerca. Gli algoritmi genetici sono particolarmente adatti allo studio di problemi aventi un grande numero di parametri e con funzioni obiettivo che presentino molti punti di minimo (o massimo) locali. Lo pseudo algoritmo di un AG é il seguente: 14

21 1.3 Algoritmi Evolutivi procedure Algoritmo Genetico t = 0; InizializzazioneCasuale(P(t)) Valutazione(P(t)) while not Terminazione(P(t)) do t = t + 1 P(t)=Selezione(P(t 1)) Crossover(P(t)) Mutazione(P(t)) Valutaione(P(t)) end end Per ognuno dei tre operatori citati esistono diverse implementazioni ciascuona delle quali segue il comportamento riportato in precendenza. Piú avanti, nella sezione relativa all implementazione della soluzione trovata, verranno spiegati piú in dettaglio gli operatori effettivamente utilizzati in questa esperienza Evolution Strategies Il metodo chiamato delle Evolution Strategies (ES) venne inventato nel 1963 da due studenti della Technical University di Berlino, precisamente da Ingo Rechenberg e Hans-Paul Schwefel, nel corso di alcuni studi sulla forma ottimale di un corpo immerso in un flusso aerodinamico. In seguito il metodo venne esteso ad altri problemi di ottimizzazione dei parametri. Le prime ES si basavano su una popolazione composta da un singolo individuo ed un solo operatore genetico: la mutazione. L idea di base che differenzia le ES dagli Algoritmi Genetici é che ogni individuo viene ora rappresentato come un vettore v = ( x, σ ) dove il vettore x identifica un punto nello spazio di ricerca (l idea originaria era quella che x fosse un vettore di numeri reali) mentre σ é un vettore di numeri reali che rappresentano delle deviazioni standard. Le mutazioni sono realizzate sostituendo x con x t+1 = x t + N(0, σ ) 6 dove N(0, σ ) é un vettore di numeri casuali con distribuzione Gaussiana con media 0 e deviazione standard σ (piú in generale l idea é quella che la mutazione 6 Questo in accordo con l osservazione fatta dai biologi che mutazioni piú piccole hanno una probabilitá maggiore di accadere rispetto ad altre mutazioni piú consistenti 15

22 Introduzione possa incidere di piú nel caso i valori di σ siano piú grandi). I nuovi individui cosí ottenuti vengono accettati se e solo se il loro fitness é maggiore rispetto a quello della soluzione di partenza ( x t ). E da notare che, sempre nelle prime ES, il vettore σ rimaneva costante. Le ES si sono in seguito evolute per dare origine alle (µ + λ)-evolution Strategies e alle (µ, λ)-evolution Strategies[26]. Nelle (µ + λ)-es µ individui producono, per mutazione, λ nuovi individui formando una nuova popolazione temporanea di dimensione µ + λ. All interno di questa popolazione vengono scelti µ individui (in base al loro fitting) in modo da riportare la popolazione alla dimensione originaria. Nelle (µ, λ)-es µ individui producono λ nuovi individui con λ > µ e tra questi il processo di selezione ne sceglie poi µ. Cosí facendo, la vita di un individuo si riduce ad una singola generazione il che permette alle (µ, λ)-es di prestarsi bene a problemi in cui la soluzione ottima puó variare nel tempo o situazioni in cui la funzione obiettivo sia affetta da rumore. Sia nelle (µ + λ)-es che nelle (µ, λ)-es i parametri di controllo σ non restano piú costanti ma bensí vengono sottoposti anch essi al processo evolutivo, proprio come il vettore x. In particolare il processo per produrre un nuovo individuo segue alcuni passi base[17]: Selezione di due individui ( x 1, σ 1 ) = ((x 1 1,..., x 1 n),(σ 1 1,..., σ 1 n )) e ( x 2, σ 2 ) = ((x 2 1,..., x 2 n),(σ 2 1,..., σ 2 n )) e applicazione dell operatore di crossover. Esistono principalmente due tipi di crossover: crossover discreto in cui il nuovo individuo é della forma ( x, σ ) = ((x q 1 1,..., x q n n ),(σ q 1 1,..., σ q n n )) dove q i =1 se la componente proviene dal primo individuo o q i = 2 nel caso opposto. crossover medio in cui il nuovo individuo é ( x, σ ) = ( ((x 1 1+x 2 1)/2,..., (x 1 n+x 2 n)/2),((σ 1 1+σ 2 1)/2,..., (σ 1 n+σ 2 n)/2)) Mutazione del nuovo individuo ottenendo cosí: σ = σ e N(0, σ ) 16

23 1.3 Algoritmi Evolutivi x = x + N(0, σ ) in cui σ é un parametro fissato Simulated Annealing Il metodo di Simulated Annealing é un metodo di ottimizzazione stocastica con un campo di applicazione molto vasto che si é dimostrato molto efficiente in molti problemi riguardanti la progettazione CAD di circuiti elettronici [8]. Questo tipo di algoritmo si presta bene alla risoluzione di problemi in cui lo spazio N-dimensionale su cui bisogna effetuare la minimizzazione funzione obbiettivo non é uno spazio di N variabili continue ma bensí un insieme discreto composto da moltissime configurazioni [5].Inoltre, tra le caratteristiche piú importanti possedute dal metodo di Simulated Annealing, c é quella di non essere un metodo greedy per questo motivo é molto adatto alla minimizzazione di funzioni che presentino molti minimi locali [5]. Alcuni problemi efficacemente risolti con algoritmi di SA sono, per esempio, il problema del commesso viaggiatore (una soluzione é proposta su [5]) o, come detto, problemi come la progettazione della disposizione di componenti all interno di circuiti integrati ([24]). Questo metodo prende spunto dal processo termodinamico che regola il raffreddamento di un corpo e fu inizialmente proposto nel 1953 da N. Metropolis [16] proprio per simulare il comportamento delle molecole di un metallo durante il processo di raffreddamento. Il cuore del metodo si basa sul fatto che, dato un sistema termodinamico in equilibrio alla temperatura T, la distribuzione di propabilitá dell energia (E) di una singola molecola si approssima alla distribuzione di Boltzmann: P (E) e E K b T dove K b é la costante di Boltzmann. Come si nota anche dalla fig 1.5 quindi, a temperature maggiori sará anche possibile che certe molecole abbiano una elevata energia. Man mano che si fa calare la temperatura peró la probabilitá di trovare molecole con una elevata energia diminuira progressivamente. In natura questo si traduce nel fatto che, raffreddando lentamente una sostanza come un metallo fuso, si partirá da uno stato di disordine molecolare caratterizzato da elevata energia per giungere in uno stato in cui le molecole tendono 17

24 Introduzione Figura 1.5: Andamento della distribuzione di Boltzmann a disporsi in strutture regolari a bassa energia (cristalli). Questo non avviene peró raffreddando bruscamente il metallo. Il metodo proposto da Metropolis e ripreso in seguito da Kirkpatrick [24] si propone proprio di sfruttare questa peculiaritá ponendo come energia del sistema la funzione obbiettivo da minimizzare e introducendo alcuni elementi stocastici ovvero le variazioni casuali delle soluzioni esaminate. In particolare Metropolis et al.[21] hanno realizzato un algoritmo che puó essere usato per ottenere una efficiente simulazione del comportameno di un insieme di atomi in equilibrio ad una data temperatura T. In ogni passo di questo algoritmo, un atomo viene leggermente perturbato in maniera casuale ottenendo quindi una variazione dell energia del sistema pari a E. Se E 0 la variazione viene eccettata e la nuova configurazione del sistema cosí ottenuta viene usata come punto di partenza per il prossimo passo. Il caso in cui E > 0 viene trattato in maniera probabilistica: la probabilitá che la nuova configurazione venga accettata é pari a P ( E) = e E/T.Questo criterio di accettazione é detto Metropolis Step[25]. Ripetendo questo passo base piú volte é possibile simulate il movimento termico degli atomi di un corpo a contatto con un serbatoio di calore alla temperatura T. Inoltre la scelta di P ( E) ha come conseguenza che la distribuzione di probabilitá delle enegie degli atomi del sistema tende proprio alla distribuzione di Boltzmann [24]. Sostituendo quindi alla nozione di configurazione quella di soluzione candidata e a quella di pertubazione quella di variazione casuale della soluzione si ha idea di come possa funzionare il metodo di Simulated Annealing. Nelle prime 18

25 1.3 Algoritmi Evolutivi fasi di esecuzione, dato che T é elevata, viene praticamente accettata qualsiasi variazione positiva di enegia (e quindi un peggioramento della soluzione) permettendo cosí l esplorazione di praticamente tutto lo spazio delle possibili soluzioni. Man mano che la temperatura viene abbassata viene ridotta la probailitá di accettare variazioni positive di energia con la conseguenza che il sistema evolve verso uno stato finale con energia minima. Un altra peculiaritá di questo metodo é che la sua implementazione é relativamente semplice e si compone di quattro passi fondamentali: Definizione di un metodo per la rappresentazione delle soluzioni: nel caso di Evolvable Hardware, per esempio, il bitstream o una sua rappresentazione Implementazione di un metodo per modificare casualmente le soluzioni: questo metodo deve permettere di generare tutte le possibili soluzioni appartenendi allo spazio su cui si vuole effettuare la minimizzazione. Definizione un mezzo per determinare efficacemente l energia di una soluzione: ovvero definire una funzione f di fitting rapida da calcolare Definizione di una Cooling Schedule o Schema di Raffreddamento: ovvero definizione della temperatura iniziale (T 0 ) dalla quale far partire la simulazione e di una politica di abbassamento della temperatura. La temperatura T 0 é anche detta temperatura di fusione e deve essere tale che, nelle prime fasi della simulazione, l algoritmo accetti praticamente qualsiasi cambiamento positivo di energia. Per ottenere questo, tipicamente, si effettuano una serie di modifiche casuali alla configurazione iniziale e si cerca il massimo salto energetico positivo in base al quale calcolare T 0. La politica di abbassamento della temperatura riveste un ruolo fondamentale negli algoritmi di SA in quanto il risultato ottenibile con questo tipo di algoritmi dipende dalla velocit con la quale si abbassa le temperatura del sistema. Esistono sostanzialmente due categorie di Schemi di Raffreddamento: statici e dinamici. Nella prima categoria tutti i parametri come T 0 e velocitá di abbassamento sono fissati a priori e non vengono ricalcolati durante l esecuzione dell algoritmo. Negli Schemi di Raffreddamento dinamici invece, tutti i parametri possono essere adattati dinamicamente a run-time. I due Schemi di Raffreddamento piú 19

26 Introduzione semplici e di comune utilizzo sono lo Schema di Raffreddamento Esponenziale o Exponential Cooling Schedule (ECS) (T k+1 = α T k, α < 1) e lo Schema di Raffreddamento Lineare o Linear Cooling Schedule (LCS) in cui la temperatura viene decrementata linearmente (evitando di raggiungere valori negativi). In fig 1.6 sono presentate altri possibili Schemi di Raffreddamento, dove con N viene indicato il numero totali di passi di riduzione e con T 0 e T N rispettivamente le temperature iniziali e finali ([3]). Figura 1.6: Altri possibili Schemi di Raffreddamento Uno pseudo-codice generale dell algoritmo potrebbe essere il seguente:[28] 20

27 1.3 Algoritmi Evolutivi procedure Simulated Annealing n 0; Impostazione di T 0 s SoluzioneCasuale; s best s while condizione di loop esterna do while condizione di loop interna do ŝ Mutazione(s) s CriterioDiAccettazione(T n, s, ŝ) if(f(s best ) < f(ŝ)) s best s end T n+1 DiminuisciTemperatura(T n );n n + 1 end return s best end Dove,come criterio di accettazione di una configurazione si usa il metodo proposto da Metropolis[16]: ŝ se f(ŝ) <= f(s) f(ŝ) f(s) ( (f(ŝ) > f(s) R(0, 1) <= e Tn CriterioDiAccettazione(T n, s, ŝ) = s altrimenti (1.1) nella quale si é usato R(0, 1) per indicare un numero scelto con probabilitá uniforme su [0,1]. Per quanto riguarda i criteri di terminazione dei due cicli, quello piú interno deve garantire il raggiungimento dell equilibrio alla temperatura T mentre il criterio esterno viene usato per determinare la fine dell esecuzione e quindi il raggiungimento del costo minimo. Tipicamente entrambi i criteri vengono ridotti semplicemente al conto del numero di iterazioni dei due cicli. ) ) Genetic Programming Un altro interessante approccio all evoluzione artificiale é stato proposto da Koza[9]. Questi propose che a sottostare al processo di evoluzione potessero anche essere i programmi stessi, o meglio, la loro struttura. Nel campo dell evoluzione di reti neurali per robot autonomi, per esempio, molto spesso la soluzione piú veloce consiste nello specificare la struttura di una rete neurale 21

28 Introduzione artificiale e quindi far evolvere solo i pesi delle connessioni. Il successo o meno di questa strategia peró stá nella capacitá di chi progetta la struttura della ANN di scegliere uno schema di connessioni adeguato. Esistono approcci, proprio come nel caso di Genetic Programming, dove invece é anche possibile evolvere la struttura dell unitá che si vuole ottenere. Questo metodo prevede la costruzione di alberi (tipicamente alberi binari) composti da operatori elementari e terminatori. Gli operatori elementari richiedono un certo numero di dati in ingresso mentre i terminatori non ne richiedono nessuno. Per esempio, l operatore + richiede due parametri in ingresso mentre l operatore sin() ne richiede uno solo. Le tecniche standard di GP prevedono innanzitutto la definizione, da parte del programmatore, di un set di operatori elementari e terminali. Per esempio, in un problema riguardante l approssimazione di funzioni un possibile set di operatori potrebbe essere {+,-,*,/,exp(),sin(),cos(),ln()} e come terminali potrebbero essere numeri reali e la variabile x. Se il problema invece é quello di evolvere una strategia di navigazione e ricerca di un oggetto in un robot autonomo, si potrebbero scegliere gli operatori {SeOggettoInVista(,), Gira(), CambiaVelocit()} dove l operatore SeOggettoInVista accetta due parametri, uno indicante cosa fare quando l oggetto é in vista e l altro cosa fare in caso contrario mentre i terminatori potrebbero essere i numeri reali utilizzati per identificare l intensitá delle variazioni in velocitá e direzione. Definiti questi set, il metodo prevede la generazione casuale di una popolazione di alberi (e quindi di programmi ). Fatto questo la loro struttura viene fatta evolvere mediante delle operazioni di mutazione e crossover particolari che operano direttamente a livello fenotipico, ovvero modificando la struttura degli alberi stessi. Nel particolare la mutazione consiste nello scegliere un nodo interno o una foglia dell albero e cambiarlo in maniera casuale (verificando sempre la validitá della struttura) mentre il crossover consiste nello scegliere arbitrariamente due nodi e costruire i due alberi ottenuti scambiando i sottoalberi dei nodi scelti come mostrato in fig 1.7. Anche nel caso di GP esistono numerosissime varianti una delle quali, chiamata Cartesian Genetic Programming verrá introdotta piú avanti nella sezione relativa alla soluzione individuata. 22

29 1.4 Sommario 1.4 Sommario Figura 1.7: Operazione di Crossover nel caso di GP Giunti a questo punto viene spontaneo chiedersi: ma qual é il perché dell Evolvable Hardware? Si é giá detto che l evoluzione non vincolata offre la possiblitá di andare oltre i limiti dei processi di progettazione classici per esempio in termini di dimensione dell hardware, di consumo, emissioni elettromagnetiche e qualsiasi altra grandezza che é possibile includere nella funzione obiettivo ottimizzata dagli Algoritmi Evolutivi. Ma oltre questo, perché lasciare evolvere un componente hardware per tempi che nei casi piú estremi arrivano a delle settimane([1][30])? Oltretutto un analisi precisa del circuito evoluto é spesso molto problematica. L Evolvable Hardware ha un utilitá pratica oltre all indiscusso fascino di vedere come la natura riesce a sfruttare al massimo i mezzi che le mettiamo a disposizione (ma che a sua volta proprio essa ci ha dato indirettamente) producendo soluzioni che spesso sfuggono la nostra completa comprensione? La risposta é ovviamente si e l interesse verso l Evolvable Hardware ma anche in generale verso i Sistemi Evolvibili in generale é abbastanza diffuso in campi come il settore aerospaziale o la robotica autonoma. Ed é anche semplice capirne il perché con un esempio, proprio preso dal settore aerospaziale. Durante la navigazione spaziale esiste la possibilitá di attraversare aree con forti campi magnetici o comunque esposti ad una notevole quantitá di radiazioni, tutte condizioni che possono danneggiare seriamente i circuiti di un mezzo spaziale. Nel caso di un danno allora, per esempio, una FPGA potrebbe essere in grado di rilevare il guasto e riconfigurarsi autonomamente in modo da sfruttare i componenti ancora non danneggiati oppure riutilizzare componenti solo parzialmente malfunzionanti. Affidabilitá ed efficienza il tutto ottenibile in-loco e con costi relativamente contenuti. Ed é per questo che enti come la NASA dispongono di una sezione dedicata proprio allo studio dei Sistemi 23

30 Introduzione Evolvibili. Certo, non esistono pasti gratis, come detto non sempre l affidablitá dei circuiti evoluti é molto elevata, in alcuni casi non é possibile (o non si vuole) effettuare una valutazione in simulazione, rendendo necessario un test sul circuito che richiede molto piú tempo e le FPGA attuali non si prestano bene al processo di evoluzione (anche se esistono altri dispositivi che meglio si adattano a questo tipo di applicazioni). Nonostante tutto lo sviluppo attuale sembra ricalcare il parere moderatamente ottimista di Thompson [31] secondo cui esitono (e vengono via via confermate) delle buone ragioni per pensare che questo campo possa progredire fruttuosamente. 24

31 Capitolo 2 Analisi delle possibili configurazioni implementative Di seguito saranno presentate 3 possibili configurazioni per l implementazione di un Algoritmo Evolutivo (EA) per l evoluzione di una configurazione hardware di una FPGA. Ad ogni configurazione sono associati diversi ruoli per PC e FPGA che verranno descritti di seguito. 2.1 Canonical Genetic Algorithm + Extrinsic Evolution Figura 2.1: Schema della configurazione CGA+EE La soluzione schematizzata dalla fig 2.1 prevede che tutta l implementazione ed esecuzione dell algoritmo di evoluzione avvenga in software su PC. Una volta conclusa l evoluzione offline della configurazione Hardware, questa viene scaricata su FPGA la quale, di fatto, viene riconfigurata una unica volta. 25

32 Analisi delle possibili configurazioni implementative Questa soluzione richiede quindi che la FPGA venga divisa in due aree, una dedicata alla comunicazione con il PC e alla gestione della riconfigurabiltá, e l altra usata per contenere la configurazione ottenuta in software. Schematizzando, il ciclo di esecuzione del GA potrebbe essere quello presentato in fig 2.2. Figura 2.2: Schema del flusso di esecuzione di un GA canonico I vantaggi legati a questa soluzione derivano dalla (realtivamente) ridotta complessitá della sezione hardware(la cui configurazione é schematicamente presentata in fig 2.3). Esistono infatti giá molte librerie software che implementano dei GA, l unico lavoro richiesto sarebbe quello di integrare l algoritmo con delle informazioni relative al problema specifico come la definizione di una funzione di fitting e di come possa essere calcolata simulando la configurazione hardware. Ed é proprio dal fatto di dover simulare la configurazione hardware per farne la valutazione che nasce la principale limitazione di questa soluzione. Di fatto l uso di un GA per la sintesi di una configurazione hardware dovrebbe permettere di ignorare i dettagli piú a basso livello quali le connessioni tra le CLB o le funzioni svolte dai singoli blocchi, per concentrarsi invece sulla specifica del funzionamento complessivo che si vuole ottenere. Effettuando la valutazione di una configurazione effettivamente realizzata in hardware permette di sfruttare tutte le dinamiche nascoste derivanti da effetti secondari che tipicamente non vengono presi in considerazione in un approccio di progettazione classico. Si capisce quindi che, simulando piuttosto che realiz- 26

33 2.2 SA + Intrinsic Evolution zando una configurazione hardware, si eliminano tutti questi effetti secondari eliminando ogni possiblitá per GA di sfruttarle per l evoluzione. Figura 2.3: Configurazione della FPGA nel caso di CGA Extrinsic 2.2 Simulated Annealing + Intrinsic Evolution La caratteristica di questa configurazione é l utilizzo di algoritmi che evolvono un singolo individuo alla volta (in particolare gli algoritmi di Simulated Annealing) piuttosto che una popolazione piú numerosa come nel caso di un GA canonico. In particolare a seconda della localizzazione dell unitá evolutiva che controlla l evoluzione si distinguono due particolarizzazioni di questa soluzione: PC driven: Nel caso in cui l evoluzione venga controllata da un software su PC. Hardware driven: Nel caso l evoluzione venga controllata direttamente da un modulo hardware,eliminando quindi la necessit di avere un PC collegato alla FPGA. Un altra notevole differenza rispetto alla precendente configurazione é che, in questo caso, la valutazione avviene sulle configurazioni implementate piutto- 27

34 Analisi delle possibili configurazioni implementative sto che simulandole in software. Questo implica che, per ogni generazione, é necessario riconfigurare la FPGA con un singolo individuo e quindi effettuarne la valutazione. Vediamo quindi come si differenziano piú in dettaglio le due particolarizzazioni presentate: Pc Driven Anche in questo caso si utilizza una configurazione identica a quella schematizzata in fig 2.1. Ció che differenzia le due soluzioni peró é che in questo caso é necessario effettuare la valutazione degli individui in hardware. Il flusso di esecuzione dell algoritmo in questo caso é presentato in fig 2.4. Figura 2.4: Flusso di esecuzione per SA PC Driven Alla luce di quanto detto quindi la complessitá delle operazioni da svolgere in hardware aumenta leggermente in quanto, questa volta, é necessario inserire quantomeno un modulo per la valutazione, di conseguenza bisogna anche fare in modo che i risultati della valutazione siano resi disponibili al PC per governare l esecuzione dell algoritmo. In questo caso lo schema della FPGA é quello presentato in fig 2.5. Come giá accennato nell introduzione di questa sezione, questo tipo di soluzione permette all algoritmo di evoluzione di sfruttare a pieno tutte le caratteristiche dell hardware dal momento che la valutazione non viene simulata. Si introduce peró un nuovo inconveniente. Il fatto di dover implementare per ogni generazione l individuo candidato obbliga a doverne trasferire ogni volta tutto il genotipo (che puó direttamente essere il bitstream o una sua qualche codifica il che obbliga peró ad avere un modulo di 28

35 2.2 SA + Intrinsic Evolution Figura 2.5: Configurazione della FPGA nel caso di Simulated Annealig PC Driven mapping tra genotipo e fenotipo ossia il bitstream effettivo). Tenuto conto che il numero di generazioni per ottenere un individuo ragionevolmente evoluto é mediamente nell ordine di 10 2 si intuisce che sará necessario parecchio tempo solo per trasferire le configurazioni da valutare alla FPGA. Per eliminare tale problema bisognerebbe quindi eliminare questa necessitá trasferendo tutta l implementazione dell algoritmo in hardware, come proposto di seguito Hardware Driven Questa soluzione prevede che tutto il processo evolutivo avvenga in hardware eliminando cosí la necessitá di avere un PC collegato alla FPGA e quindi i problemi legati ai tempi di trasferimento delle configurazioni da valutare. Questo obbliga peró a dover implementare tutto l algoritmo di evoluzione direttamente in hardware ottenendo cosí un flusso di esecuzione simile a quello schematizzato in fig 2.4 dove peró non esisterá piú una parte software (fig 2.6). Bisogna introdurre quindi nella configurazione della FPGA un nuovo modulo dedicato alla gestione di tutte le operazioni legate all algoritmo di evoluzione indicato di seguito come Unitá Evolutiva [UE]. Poiché la struttura della 29

36 Analisi delle possibili configurazioni implementative Figura 2.6: Flusso di esecuzione per Simulated Annealing UE é ovviamente determinata dal tipo di algoritmo evolutivo utilizzato, di seguito verranno proposte le funzionalitá richieste dalla UE che implementa un algortimo di Simulated Annealing 1. Osservando il flusso di esecuzione riportato in fig 2.6 é possibile estrapolare le funzioni fondamentali per l esecuzione dell algoritmo ovvero: Una Unitá di Mutazione, UMut : Per la generazione della configurazione 1 Vedi sezione

37 2.2 SA + Intrinsic Evolution di test Una Unitá di Valutazione (e quindi riconfigurazione) UV : Per valutare l energia della configurazione di test Una Unitá di Accettazione UA : Che permette di applicare il criterio di accettazione proposto da Metropolis (eq1.1) Una Unitá di Abbassamento temperatura UAb : Per realizzare la politica di raffreddamento prescelta Alle quali vengono affiancate tre unitá aggiuntive non direttamente estraibili osservando il flusso di esecuzione: Una Unitá di Controllo UC : che gestisce il flusso di esecuzione e quindi controlla le condizioni di equilibrio e fine raffreddamento Una Unitá di Memorizzazione UM : che servirá per contenere tutte le informazioni temporanee indispensabili per l escuzione dell algoritmo. Queste in particolare saranno: la Temperatura attuale,eventualmente il passo di raffraddamento attuale, il Genotipo della configurazione attuale, il Genotipo della configurazione di test, l energia della configurazione attuale, l energia della configurazione precedente, il Genotipo della configurazione migliore e l energia della configurazione migliore. Un Generatore di numeri casuali RNG Un possibile schema per l implementazione é proposto in fig 2.7. Similmente a quanto proposto in [34], l unitá di controllo si preoccupa di attivare le altre unitá tramite gli appositi segnali (contrassegnati dal colore verde nello schema presentato), seguendo il flusso di esecuzione e controllando sia le condizioni di equilibrio (ridotte al conto del numero di mutazioni ad una temperatura fissata) sia quelle di fine esecuzione (osservando l energia minima registrata). A loro volta, le altre unitá, segnalano alla UC la terminazione dei rispettivi compiti attraverso gli appositi segnali (contrassegnati in nero) Scendendo piú nel dettaglio vediamo ora il funzionamento delle altre unitá. L unitá di memorizzazione, come detto, é l unitá preposta a contenere tutti i dati necessari all esecuzione dell algoritmo. Un altra funzione svolta da questa unitá é quella di inizializzare la configurazione (casuale) di partenza e tutti i 31

38 Analisi delle possibili configurazioni implementative parametri. Questo avviene quando la UC fa uso del segnale Init. Per la generazione casuale della configurazione iniziale la UM interroga direttamente il RNG facendo uso del segnale RNGReq e prelevando il dato generato su ROut. Conclusa l inizializzazione la UM segnala la cosa alla UC tramite il segnale InitOK L unitá di valutazione e riconfigurazione, attivata attraverso il segnale Valuta, per prima cosa si deve occupare di reperire il genotipo della configurazione di test quindi deve fare in modo di riconfigurare l apposita area della FPGA. Fatto questo deve eseguire la valutazione dell individuo per esempio, sottoponendo dei segnali di training e osservado la risposta del sistema (in questo caso l energia del sistema potrebbe essere il numero di errori riscontrati). Conclusa la fase di test, non rimane altro che fornite alla UM l energia della configurazione analizzata e segnalare la fine della valutazione alla UC tramite il sengale ValutazioneOK. L unitá di mutazione, attivata tramite il segnale Muta, preleva il genotipo della configurazione attuale dalla UM e lo modifica in maniera casuale per ottenere il genotipo della configurazione di test quindi va a memorizzarlo nell apposita area della UM 2. Per la modifica casuale l unitá fa uso del RNG in maniera identica a quando fatto in precedenza dalla UM ovvero, segnala la richiesta tramite il segnale RNGReq e ottiene il dato su ROut. L unitá di accettazione (attivata tramite il segnale Accettazione) deve reperire dalla UM tre elementi, ovvero: Energia della configurazione di Test, Energia della configurazione attuale e Temperatura attuale del sistema. Fatto questo deve implementare un certo criterio di accettazione e, nel caso il criterio fosse soddisfatto 3, comunicare l accettazione alla UM (tramite il segnale Accetta) la quale si occuperá di copiare i dati della configurazione di test (genotipo ed energia) al posto di quelli della configurazione attuale. Inoltre la UM si occupa di verificare se la configurazione appena accettata é la migliore confrontandone l energia con quella della configurazione migliore precedente- 2 Nota: questa unitá, come tutte le altre, non si deve preoccupare di eventuali problemi di corse critiche sull accesso alla UM in quanto é la UC che si preoccupa di attivarle solo quando é sicuro fare accesso alla memoria condivisa. 3 Nel nostro caso, volendo implementare il criterio di accettazione di Metropolis, osservando la eq 1.1 il segnale di accettazione sará attivo sse CriterioDiAccettazione(T n, s, ŝ) = ŝ 32

39 2.2 SA + Intrinsic Evolution mente salvata (e quindi eventualmente aggiornandone genotipo ed energia). Concluse queste operazioni (se sono state effettivamente richieste) la UM lo segnala alla UA tramite il sengale AccettaOK la quale a sua volta segnala alla UC la fine della fase di accettazione tramite il segnale AccettazioneOK. Nota: questa unitá come l altra contrassegnata dal colore rosso (la UAb) deve fare uso di operazioni su numeri reali. Infatti, osservando la eq 1.1 si nota che il criterio di accettazione é soddisfatto quando f(ŝ) <= f(s) f(ŝ) > f(s) R(0, 1) <= e f(ŝ) f(s) ( ) Tn é necessario quindi effetture una divisione e in seguito calcolarne l esponenziale. Infine bisogna anche confontare due numeri in virgola mobile. L unitá di abbassamento della temperatura, attivata tramite il segnale Raffredda, deve prelevare il valore della temperatura attuale applicare la politica di abbassamento della temperatura e quindi restituire il nuovo valore di temperatura alla UM per la memorizzazione. Concluse queste operazioni la UAb lo segnala alla UC facendo uso del segnale RaffreddamentoOk. In precedenza si era detto che anche questa unitá avrebbe dovuto compiere operazioni su numeri reali. Questo é solo in parte vero, infatti anche se tipicamente le funzioni che descrivono l abbassamento della temperatura non sono banali (vedi fig 1.6) é anche vero che se si tiene fissa la temperatura iniziale tutte le varie temperature intermedie risultano fissate e quindi non é necessario calcolarle ma solo memorizzarle tutte. Questo potrebbe sembrare poco conveniente ma a conti fatti potrebbe essere piú agevole che dover implementare una unitá di calcolo. L unitá di generazione di numeri casuali deve essere in grado di generare un numero casuale ogni volta che viene richiesto tramite il segnale RNGReq e di renderlo disponibile su Rout. 33

40 Analisi delle possibili configurazioni implementative Figura 2.7: Un possibile schema per l implementazione in hardware di un algoritmo 34 di SA

41 2.3 CGA + Intrinsic Evolution 2.3 Canonical Genetic Algorithm + Intrinsic Evolution Questa soluzione é concettualmente molto simile alla soluzione Hardware Driven presentata in precedenza. Si tratta infatti anche in questo caso di implementare tutto l algoritmo di evoluzione delle configurazioni in hardware. La differenza fondamentale é peró che in questo caso non si dovrá gestire l evoluzione di un singolo individuo (cioé una singola configurazione) per ogni generazione bensí una popolazione di individui. Cambieranno quindi le esigenze di memorizzazione dei dati dei singoli individui (genotipo e fitting), le modalitá di valutazione degli stessi e le operazioni da applicare agli individui. Come fatto in precedenza quindi, si proporrá un possibile schema per l implementazione di un GA con Intrinsic Evolution partendo dall analisi del flusso di esecuzione di questo tipo di algoritmi. Un primo ipotetico schema di flusso é giá stato presentato in fig 2.2. E necessario ora andare ad approfondire ulteriormente tale schema caratterizzando in maniera piú precisa le operazioni denominate in precedenza come calcolo della nuova generazione. Il tipo piú semplice di algoritmo genetico fa uso di 3 operatori applicati in cascata ([15]): Selezione : questo operatore sceglie i cromosomi della popolazione per la riproduzione in modo casuale. Ogni cromosoma ha una probabilitá di essere scelto legata al valore della funzione di fitting (ovvero quanto bene risolve il problema che si stá trattando) Crossover : questo operatore (tipicamente attivato con probabilitá p c ) sceglie casualmente un punto (punto di crossover) appartenente al genotipo descritto da due cromosomi e scambia le sotto-sequenze prima e dopo tale punto. Per esempio, se i genotipi di due individui sono rispettivamente e se il crossover viene effettuato dopo il quinto bit si avranno come risultato i due cromosomi e Mutazione : questo operatore inverte in maniera casuale alcuni bit in un cromosoma. Tipicamente ogni bit ha una probabilitá p m di essere invertito molto piccola, sotto l 1%. 35

42 Analisi delle possibili configurazioni implementative Il flusso di esecuzione diventa quindi quello presentato in fig 2.8. Figura 2.8: Flusso di esecuzione pi preciso per CGA In maniera del tutto simile a quanto fatto in precendenza quindi, lo schema proposto si compone di alcune unitá derivabili direttamente dallo schema presentato e cioé: 36

43 2.3 CGA + Intrinsic Evolution Unitá di valutazione (e riconfigurazione) UV : che deve essere in grado di valutare ogni individuo della popolazione corrente Unitá di selezione US : in grado di scegliere gli individui per la riproduzione in maniera proporzionale al loro valore della funzione di fitting valutata dalla UV. Unitá di Crossover UCr : utilizzata per effettuare il crossover delle configurazioni genitori per ottenere gli individui della nuova generazione. Unitá di Mutazione UMut : anche in questo caso deve essere in grado di poter produrre (anche per mutazione successive) tutte le possibili configurazioni. A queste unitá si aggiungono ancora altre 3 utili per l esecuzione dell algoritmo, cioé: Unitá di controllo UC : che regola il flusso di esecuzione e verifica le condizioni di fine esecuzione dell algoritmo Unitá di memorizzazione UM : in grado di contenere i dati necessari all esecuzione dell algoritmo. In particolare: le informazioni sulla popolazione corrente (genotipo e fitting) e la popolazione temporanea (che diverrá la nuova popolazione attuale). Questa unitá deve inoltre essere in grado di generare in maniera casuale la popolazione iniziale. Generatore di numeri casuali RNG Come per la configurazione presentata per gli algoritmi di Simulated Annealing anche in questo caso la sincronizzazione tra le unitá avviene utilizzando un meccanismo di doppia segnalazione. Prima la UC attiva l unitá che serve facendo uso si un particolare segnale (indicati in verde), quando infine l unitá cosí attivata ha finito il suo compito lo segnala alla UC facendo uso di un altro segnale dedicato (indicati in nero). Allo stesso modo, tutte le richieste al RNG seguono lo schema proposto in precedenza ovvero: l unitá richiedente segnala la sua necessitá mediante il segnale RNGReq e in seguito, quando viene segnalato tramite il segnale RNGOk, preleva il dato da ROut. La configurazione proposta é raffigurata in fig 2.9. Oltre alle giá citate convenzioni sull uso dei colori per i segnali di sincronizzazione, in questo caso sono anche stati usati colori diversi 37

44 Analisi delle possibili configurazioni implementative per indicare il tipo di dati prelevato/fornito dalla/alla UM. In particolare si é usato il colore blu scuro per indicare l accesso al materiale genetico ovvero i cromosomi degli individui della popolazione, mentre il colore marrone é stato usato per indicare l accesso ad altre variabili che regolano l algoritmo come, per esempio, i valori della funzione di fitting degli individui. Veniamo ora ad un analisi piú approfondita del funzionamento delle singole unitá e di come venga seguito il flusso di esecuzione proposto in fig 2.8. In primo luogo la UC si preoccupa di attivare, tramite il segnale Init, l unitá di memorizzazione e, in particolare, richiede a questa di generare casualmente i cromosomi della popolazione iniziale. Per fare questo, la UM fa affidamento al RNG. Una volta terminata l inizializzazione, la UM segnala la cosa alla UC tramite il segnale InitOk. A questo punto la UC attiva una prima volta l unitá di valutazione facendo uso del segnale Valuta. Quest ultima unitá si preoccupa di reperire il genotipo di tutti gli individui della popolazione e, una volta implementate le configurazioni corrispondenti, ne effettua la valutazione. Conclusasi anche questa fase, la UV comunica i risultati ottenuti alla UM nella quale vengono memorizzati. Infine l unitá comunica alla UC il termine della fase di valutazione tramite il segnale ValutazioneOk. La UC puó quindi accedere al valore migliore della funzione di fitting ed, eventualmente, decidere di sospendere l esecuzione dell algoritmo di evoluzione. Di seguito viene quindi attivata l unitá di selezione tramite il segnale Selezione. Come giá detto in precedenza, questa unitá deve essere in grado di scegliere dalla popolazione attuale gli individui candidati per la riproduzione in maniera che le configurazioni con un valore piú elevato della funzione di fitting abbiano una probabilitá maggiore di essere selezionate. Tutti gli individui selezionati vengono trasferiti in una popolazione temporanea e in seguito verranno sottoposti alle altre operazioni di crossover e mutazione. Anche in questo caso, data la stocasticitá dell operazione, la US fará uso del RNG. Una volta conclusa anche questa fase, la US lo segnala alla UC mediante il sengale SelezioneOk. La UC passa quindi all attivazione del unitá di crossover facendo uso del segnale Crossover. Questa prende coppie di individui dalla popolazione temporanea e, con una certa probabilitá p c, effettua il crossover dei rispettivi cromosomi, ottenendo due nuovi individui (che possono essere identici ai due 38

45 2.3 CGA + Intrinsic Evolution genitori nel caso non fosse applicato alcun crossover). I nuovi individui cosí ottenuti vengono inseriti nella popolazione attuale 4. Anche in questo caso l unitá fa uso del RNG. La fine di questa fase viene notificata alla UC tramite il sengale CrossoverOk. In ultimo viene attivata l unitá dedicata alla mutazione degli individui (sengale Muta) al fine di ottenere la nuova generazione. Questa unitá quindi modifica casualmente le configurazioni dei singoli individui con probabilitá p m. Gli individui eventualmente mutati vengono direttamente reinseriti nell aera dedicata alla popolazione attuale. Al termine dell operazione la UMut sengala la cosa alla UC usando il segnale MutazioneOk. A questo punto la UC riprende il ciclo di attivazioni di Valutazione-Selezione-Crossover-Mutazione finché non viene raggiunta la condizione di fine esecuzione. 4 Durante questa fase (e anche la successiva, quella di mutazione) la popolazione attuale é in uno stato inconsistente in quanto contiene parte di individui appartenenti alla generazione passata e parte di individui della nuova generazione (che eventualmente non sono ancora stati sottoposti al processo di mutazione). Il problema di accedere in lettura a questa popolazione é nuovamente (banalmente) evitato dal fatto che la UC semplicemente evita di attivare le unitá che potrebbero fare accessi illegali. 39

46 Analisi delle possibili configurazioni implementative Figura 2.9: Genetic Algorithm Possibile configurazione per implementazione Hardware di un 40

47 2.4 Confronto tra le soluzioni presentate 2.4 Confronto tra le soluzioni presentate Di seguito verranno riporati i maggiori vantaggi e svantaggi delle soluzioni presentate: Extrinsic Evolution + AG Vantaggi: Implementazione semplice in quanto sono richieste poche nozioni di hardware Estrema libertá di scelta per quello che riguarda l algoritmo evolutivo da utilizzare Minori rischi legati al download su scheda di configurazioni illegali con conseguenti danni alla FPGA Svantaggi: Impossibilitá di sfruttare la potenzialitá dell evoluzione non vincolata. Infatti la simulazione, come detto, vincola di fatto lo spazio delle configurazioni. Intrinsic Evolution + Simulated Annealing : Pc Driven Vantaggi: L evoluzione Intrinseca permette di sfruttare tutte le potenzialitá offerte dalla valutazione direttamente in hardware degli individui. Il fatto che solo la valutazione sia effettuata in hardware fa si che sia possibile implementare delle politiche di abbassamento della temperatura piú complesse. Inoltre, sempre per lo stesso fatto, é possiblie usare la stessa configurazione anche con altri Algoritmi Evolutivi per esempio con degli Algoritmi Genetici o Genetic Programming. Di fatti questa é una delle configurazioni piú utilizzate nei primi esperimenti sull Evolvable Hardware. Svantaggi: E sempre necessario scaricare il bitstream per riconfigurare la FP- GA. Nel caso di genotipi di dimensione elevata il processo di trasmis- 41

48 Analisi delle possibili configurazioni implementative sione delle informazioni necessarie alla riconfigurazione puó incidere significativamente sulla durata della valutazione. Intrinsic Evolution + Simulated Annealing : Hardware Driven Vantaggi: Non é piú necessario trasmettere il genotipo da pc a FPGA Il fatto di dover gestire un singolo individuo alla volta riduce le esegienze in termini di area di memorizzazione. Inoltre, le varie unitá risulteranno piú semplici proprio perché dovranno operare su un solo individuo memorizzato in un area ben precisa. Trasportando tutto l algoritmo in hardware si ottiene un aumento di prestazioni in quelle che sono le operazioni interne agli algoritmi evolutivi (ad esempio le procedure di selezione, crossover e mutazione) Svantaggi: E necessario implementare tutto l algoritmo evolutivo in hardware. Inoltre gli algoritmi di Simulated Annealing richiedono operazioni matematiche complesse su numeri reali. Di fatto quindi sará impossibile implementare politiche di abbassamento della temperature piú complesse di quella lineare o tutt alpiú esponenziale. E necessario realizzare un generatore di numeri casuali in hardware. Algoritmi Genetici + Intrinsic Evolution Vantaggi: Si sfrutta l evoluzione non vincolata per l esplorazione dello spazio delle configurazioni. Le operazioni matematiche da utilizzare in un algoritmo genetico possono, nella maggior parte dei casi, essere operazioni solo su numeri interi (dipende dalla funzione obiettivo). Svantaggi: E necessario mantenere in memoria 2 popolazioni (quella attuale e quella temporanea) e questo porta ad una consistente occupazione di area 42

49 2.4 Confronto tra le soluzioni presentate Anche in questo caso é necessario implementare un generatore di numeri casuali in hardware. Una modifica agli operatori utilizzati dall algoritmo genetico richiede la modifica dell intera configurazione hardware. Gli operatori genetici non operano piú su un solo individuo ben localizzato, ma su una popolazione di individui. Come si é visto, tutte le soluzioni hanno vantaggi e svantaggi che spesso si complementano. La soluzione migliore sembra quindi essere in realtá un compromesso tra le tre presentate in precedenza. In particolare, nel prossimo capitolo verrá presentata la soluzione scelta basata sui Circuiti Virtuali Riconfigurabili proposti da Sekanina[11]. 43

50

51 Capitolo 3 Soluzione Proposta Il caso di studio per testare le possibilitá offerte dall Evolvable Hardware é quello di sviluppare un modulo hardware/software che permetta di evolvere la configurazione hardware tale da produrre un particolare filtro 3x3 da applicare ad una immagine in ingresso. Tale filtro potrá essere poi evoluto per assolvere diversi scopi come, per esempio, edge detection o eliminazione di un particolare tipo di rumore. Le soluzioni presentate in precedenza per la realizzazione di un sistema evolvibile presentavano tutte degli svantaggi ma, allo stesso tempo, delle caratteristiche positive che si complementavano tra di loro. Quindi la soluzione proposta attinge dai tre approcci proposti sopra. In particolare dalla soluzione SA Pc driven prende il fatto di mantenere il controllo del processo evolutivo su PC, mentre da entrambe le soluzioni di extrinsic evolution adotta la possibilitá di valutare gli individui in hardware (definendo anche un cromosoma di lunghezza relativamente limitata). Un problema comune a tutte le tre soluzioni é che, come giá detto nell introduzione, la manipolazione diretta del bitstream di configurazione delle FPGA della serie Virtex é un processo molto problematico a causa del formato chiuso reintrodotto dalla Xilinx. Per aggirare anche questo problema piuttosto che manipolare direttamente il bitstream, l algoritmo evolutivo agisce su una stringa di bit che codifica il comportamento di un Circuito Virtuale Riconfigurabile o VRC. 45

52 Soluzione Proposta 3.1 Introduzione ai Circuiti Virtuali Riconfigurabili Il primo a proporre questo tipo di soluzione é stato Lukas Sekanina in [11]. Tale approccio a sua volta prende spunto da una particolare tecnica di Genetic Programming chiamata Certesian Genetic Programming (CPG)[18]. Piú precisamente la soluzione proposta da Sekanina prende spunto da una versione semplificata della tecnica di CGP presentata da Miller et. al su [19]. In particolare gli autori propongono che il circuito elettronico realizzato su FPGA sia visto come una particolare istanza di un programma e ogni unitá funzionale (o cella) sia connessa alle altre appunto per riuscire a realizzare una particolare elaborazione sui dati in ingresso. Nella tecnica di CGP il programma é visto come un insieme di nodi (le celle) disposte in righe e colonne per formare un rettangono di dimensioni note. Ogni nodo realizza un particolare costrutto (per esempio if, switch, OR, *). Tutti i segnali di ingresso al circuito, i Figura 3.1: Set di funzioni implementabili dalle celle nella soluzione proposta da Miller et al segnali di ingresso alle celle, i segnali di uscita dalle celle e dal circuito sono referenziati con dei numeri cosí come le funzioni svolte dalle singole celle. Il genotipo quindi altro non é che la stringa contenente tutti questi numeri. In particolare, a determinare la struttura del programma, e quindi anche quella del genotipo, sono 3 parametri, il numero di colonne, il numero di righe e il numero che definisce i levels-back. Questo é un parametro che pone dei vincoli sulla connettivitá interna. In particolare definisce quante colonne a sinistra di una particolare cella possano contenere un nodo la cui uscita é connessa a quella cella. Lo stesso vincolo vale anche per la cella che definisce l uscita 46

53 3.1 Introduzione ai Circuiti Virtuali Riconfigurabili del programma. In particolare, se il numero di righe e il valore di levels-back sono entrambi uguali a 1, allora la struttura é vincolata in modo tale che ogni cella sia connessa esattamente a quella che la precede. In generale celle appartenenti alla stessa colonna non possono essere collegate insieme. Sempre in [19] gli autori propongono una particolarizzazione della tecnica di CGP in cui le celle hanno 3 segnali di ingresso da 1 bit e un segnale di uscita anch esso da 1 bit(vedi fig 3.2). Per quanto riguarda le funzioni realizzabili dalle celle si Figura 3.2: (A) Struttura di un circuito composto da n x m celle (B) struttura del genotipo veda fig 3.1. Come si puó intuire quindi é possibile realizzare questo tipo di circuito in modo da decodificare direttamente il genotipo senza trasformarlo prima nel bitstream necessario per la riconfigurazione della FPGA. Questa idea é stata ripresa e portata avanti da Sekanina che in [27] sviluppa il concetto di Circuito Virtuale Riconfigurabile giá introdotto in [11]. L idea é sempre quella di sviluppare un circuito in modo che sia composto da una serie di elementi programmabili (PE), una rete di connessioni anch esse programmabili, una memoria di configurazione e una porta di accesso a tale memoria. La figura 3.3 mette bene in luce il fatto che il VRC viene direttamente mappato sulle risorse della FPGA e, a seconda dei bit di configurazione dei PE e delle connessioni, 47

54 Soluzione Proposta Figura 3.3: Struttura del VRC proposto da Sekanina puó generare direttamente il mapping genotipo-fenotipo. Sempre osservando la figura si nota che il comportamento di ogni elemento programmabile é definito, in questo caso, da 6 bit, per i multiplexer che permettono di selezionare gli ingressi e 2 bit per scegliere la funzione da realizzare. I VRC rappresentano un approccio all evoluzione a livello funzionale. Questo permette quindi di definire le caratteristiche dei singoli elementi programmabili in funzione del tipo di applicazione che si vuole realizzare. Sebbene questo approccio non abbia le potenzialitá di esplorazione dello spazio delle configurazioni tipica dell evoluzione gate level possiede la caratteristica di permettere di realizzare l evoluzione in tempi ridotti proprio per il fatto di utilizzare dei blocchi elementari di complessitá piú elevara rispetto alle CLB. Oltretutto, il fatto che la riconfigurazione avvenga semplicemente modificando dei bit nella memoria di configurazione (anch essa mappata sulle risorse della FPGA) rende praticabile la soluzione di trasferire in hardware anche l algoritmo evolutivo e quindi velocizzare ulteriormente il processo evolutivo. 3.2 Il VRC per il caso di studio Lo stesso Sekanina ha proposto un Circuito Virtuale Riconfigurabile utilizzabile per l evoluzione di filtri 3x3 per applicazioni di Digital Image Processing[12]. 48

55 3.2 Il VRC per il caso di studio Al fine di valutare le potenzialitá dell evoluzione applicata alla ricerca di configurazioni hardware, il circuito proposto da Sekanina é stato ripreso e leggermente modificato per realizzarne un implementazione in ImpulseC. I vantaggi di una tale implementazione sono legati all estrema flessibilitá e rapiditá di realizzazione fornita dal fatto di poter programmare in C le funzionalitá dei singoli elementi programmabili (che possono facilmente essere simulati in software o realizzati in harware) oltre che della struttura delle connessioni. Un altro vantaggio di questa scelta é che, grazie al fatto che il compilatore genera automaticamente le interfacce hardware/software, viene agevolata notevolmente la realizzazione del modulo che realizza l algoritmo evolutivo e l interfacciamento di questo con la parte evolvibile realizzata in hardware. In questo modo diventa molto rapido cambiare alcuni parametri o tutto l algoritmo evolutivo implementato nel modulo evolvente. In pratica la struttura del VRC é formata da una matrice di Blocchi Funzionali Configurabili (CFB) disposti in 4 righe e 7 colonne, un CFB di uscita e 9 segnali di ingresso (I0-I8). I 9 segnali di ingresso sono il pixel centrale Figura 3.4: Struttura del VRC utilizzato nel caso di studio in esame e i suoi 8-vicini, il singolo segnale di uscita é il pixel risultato del filtraggio. Ogni CFB ha in ingresso due segnali da 8 bit e in uscita un singolo segnale anch esso da 8 bit. La funzione svolta dipende da 4 bit del genotipo 49

56 Soluzione Proposta (quindi ogni CFB puó essere configurato scegliendo una tra le 16 operazioni elementari disponibili). Le funzioni elementari sono molto semplici, per esempio, calcolo del minimo tra i due sengali di input, somma dei due, inversione dei bit dei uno dei due operandi ecc (per la lista completa si veda la sezione di implementazione). Le connessioni, anche esse programmabili agendo sul genotipo, devono rispettare le seguenti limitazioni: I 4 CFB della prima colonna (colonna 0) possono essere collegati solo agli ingressi da I1 a I8. Questo fa si che, per descrivere le connessioni relative a questi blocchi, siano necessari solo 3 bit per ciascuno dei due ingressi, I 4 CFB della seconda colonna possono essere collegati solo agli ingressi da I0 a I7 per lo stesso motivo del punto precedente. In generale i CFB delle colonne di posizione pari posono essere collegati agli ingressi I1-I8 mentre quelle di posto dispari agli ingressi I0-I7. Per i =2 i CFB della colonna i-esima possono essere collegati o ai segnali di ingresso (secondo la regola del punto precedente) o alle uscite degli 8 CFB appartenenti alle colonne i-1 e i-2. Questo corrisponde ad un valore di levels-back pari a 2. In questo modo, per descrivere le connessioni dei blocchi appartenenti a queste colonne, sono necessari 4 bit per ingresso. Il CFB di uscita puó essere collegato solo alle uscite delle ultime due colonne di CFB. Il che implica che saranno necessari 3 bit per descrivere le connessioni di ciascuno dei due ingressi. Esistono due principali approcci alla realizzazione di tale VRC utilizzando ImpulseC Ogni volta che si vuole testare una configurazione, tramite un programma su PC, si genera il codice C (stile ImpulseC) che lo implementa e lo si compila con l apposito complilatore, quindi si scarica la configurazione hardware su FPGA. Cosí si risparmia sulla complessitá della configurazione istanziata ma si perde parecchio tempo nella generazione/compilazione. 50

57 3.2 Il VRC per il caso di studio Si realizza una unica configurazione polimorfa (ovvero il VRC) che, a seconda dei bit contenuti nella memoria di configurazione, implementa una precisa configurazione da testare. In questo modo é necessario realizzare un modulo piú complesso ma lo si compila una sola volta. Dato l eccessivo dispendio di risorse legato alla prima possibilitá di implementazione, quella effettivamente seguita é la seconda. Bisogna quindi realizzare degli elementi che permettano di: (1) definire i CFB e le funzioni implementate da ciascuno di essi (2) definire una struttura per realizzare le connessioni programmabili. Per realizzare i CFB si é scelto di codificare un unico processo CFB che poi verrá istanziato tante volte quante sono i CFB. Per quanto riguarda le connessioni configurabili invece, sono stati definiti degli altri processi realizzati in hardware chiamati blocchi di routing o RB.Questi semplicemente fungono da multiplexer il cui selettore é rappresentato dai bit del genotipo. Ogni colonna di CFB dispone di un RB come mostrato in fig 3.5 dove, per comoditá e anche per alcune semplici analogie con le reti neurali, Figura 3.5: Struttura di un layer l insieme formato dal RB e dai suoi CFB é stato denominato layer. Dunque il VRC risulta essere formato complessivamente da 29 CFB organizzati in 8 layer di cui i primi due ricevono in ingresso solo i sengali di input I, l ultimo riceve solo le otto uscite dei due layer che lo precedono mentre gli altri 5 sono identici a quello mostrato in fig

58 Soluzione Proposta 3.3 Definizione e disposizione del genotipo Detto questo, prima di studiare l implementazione dei due processi che descrivono i blocchi di routing e i blocchi funzionali, é necessario definire un formato del materiale genetico contenuto nel cromosoma, ovvero la struttura del genotipo (che verrá memorizzato nella memoria condivisa al fine di facilitarne l accesso da parte di tutti i processi). Per quanto riguarda la dimensione, bisogna ricordare che: Tutti i CFB richiedono 4 bit ciascuno per la definizione della funzione implementata I CFB dei primi due layer possono essere connessi solo agli 8 ingressi (I1-I8 e I0-I7). Quindi sono necessari 3 bit per ciascun ingresso I CFB dei layer intermedi invece hanno bisogno di 4 bit per descrivere una connessione in virtú del fatto che possono essere connessi sia agli 8 input che alle 8 uscite dei CFB dei due layer che hanno alla loro sinistra L ultimo CFB puó essere connesso solo alle 8 uscite degli ultimi due layer rendendo necessari 3 bit per la descrizione delle connessioni Quindi possiamo calcolare la lunghezza complessiva del cromosoma come: ( ) ( ) + 20 ( ) = 330 bit 42 bytes Bisogna quindi specificare quali sono i locus dei vari geni in funzione del fatto che il genotipo verrá memorizzato nella memoria condivisa e che le operazioni di lettura/scrittura offerte da ImpulseC hanno come unitá minima di accesso e di indirizzamento il byte. La disposizione piú efficiente in termini di semplicitá ed overhead sembra essere quella in cui i dati vengono raggruppati in layer. Ovvero si memorizzano prima tutti i dati relativi al primo layer, poi il secondo e cos via fino all ottavo. Per i primi due layer sono necessari bit per ognuno dei 4 CFB quindi, in totale, 40 bit ovvero 5 bytes. La disposizione all interno dei 5 bytes é la seguente: nei primi 2 bytes si trovano i 4 nibbles che descrivono le funzioni dei CFB, negli ultimi 3 si trovano gli 8 gruppi di 3 bit che definiscono le connessioni. Con questa disposizione, ogni CFB accede ad un singolo byte e poi al rispettivo nibble, mentre i RB effettuano un unica lettura del blocco di 3 52

59 3.3 Definizione e disposizione del genotipo Figura 3.6: Genotipo dei primi due layers bytes che contiene la configurazione delle connessioni e poi ne leggono i gruppi di 3 bit utilizzando delle maschere di bit. Per quanto riguarda invece i 5 layer intermedi sono necessari 12 bit (8 per le connessioni e 4 per la funzione) per ogni CFB, in totale quindi 48 bit ovvero 6 bytes. Anche in questo caso i primi due byte conterranno i nibble che definiscono le funzioni mentre i restanti bit conterranno le informazioni riguardanti le connessioni (questa volta organizzate in gruppi da 4 bit). Anche Figura 3.7: Genotipo dei layer intermedi in questo caso non si introduce nessun overhead e le operazioni di lettura risultano essere particolarmente semplici. Infine l ultimo layer, avente un solo CFB, avrá un genotipo composto da 4 bit per la funzione dell ultimo blocco e 6 bit di configurazione delle connessioni dei due ingressi. Quindi in totale 10 bit il che obbliga ad utilizzare 2 bytes introducendo un minimo overhead di 6 bit. Come nei casi precedenti la prima parte del genotipo conterrá le informazioni sulla funzione svolta dall ultimo CFB seguite dai bit di connessione. Infine il genotipo complessivo sará formato Figura 3.8: Genotipo dell ultimo layer dalla concatenazione dei genotipo dei singoli layer come mostrato in figura. 53

60 Soluzione Proposta Figura 3.9: Genotipo del VRC 3.4 Dettagli di progettazione in ImpulseC Scendiamo di un passo e vediamo alcune scelte per la realizzazione del Circuito Virtuale Riconfigurabile in ImpulseC. Come detto, esistono sostanzialmente due tipi principali di processi da realizzare: i CFB e i RB. Tutte le connessioni tra questi e con il modulo esterno al VRC sono realizzate tramite degli stream di larghezza 8 bit. Definizione dei CFB In generale l interfaccia di un CFB é composta da: Uno stream di ingresso per i due dati in ingresso. La scelta per un solo stream per entrambi piuttosto che uno ciascuno é dovuta al fatto che cosí facendo si riducono il numero di stream da implementare in hardware e quindi l occupazione di risorse della FPGA. Riducendo il consumo di risorse é possibile integrare, per esempio, anche il modulo di evoluzione direttamente in hardware. Due stream in uscita per il risultato. Il fatto che siano due é legato alla limitazione imposta dalla programmazione in ImpulseC per cui, dato uno stream, puó esistere un unico processo produttore e un solo consumatore ma tutti i CFB (a parte l ultimo e i quelli appartenenti al primo e al penultimo layer) devono essere collegati a due layer. Quindi la necessitá di usare due stream. Un numero di byte che rappresenta la posizione del byte del genotipo (in memoria condivisa) contenente le informazioni necessarie per la configurazione del CFB Una maschera di bit per estrarre i soli bit necessari dal byte del genotipo. In particolare, in virtú dello schema del genotipo proposto in precedenza avremo solo due possibili maschere, cioé 0x0F se i bit si trovano nel primo nibble del byte o 0xF0 in caso opposto. 54

61 3.4 Dettagli di progettazione in ImpulseC L identificatore della memoria condivisa Bisogna sottolineare che quella appena descritta é l interfaccia dei CFB appartenenti ai layer intermedi. I CFB appartenenti al primo, al penultimo e all ultimo layer hanno una struttura leggermente diversa. Questo é dovuto al fatto che in realtá per questi CFB é necessaria un solo stream di uscita. Infatti i blocchi appartenenti al primo layer (layer 0) possono essere connessi solo al terzo layer. Allo stesso modo, i blocchi del layer 6 possono essere connessi solo all ultimo CFB. Infine, l ultimo blocco funzionale ha una sola uscita che rappresenta l uscita di tutto il filtro. Ad ogni modo tutti i CFB avranno uno schema di comportamento molto simile sia che siano appartenenti ai layer intermedi che a quelli di confine. In particolare le operazioni che dovranno compiere saranno: 1. Recuperare i dati ingresso dallo stream 2. Accedere alla memoria condivisa e decodificare il genotipo per sapere quale operazione realizzare 3. Elaborare i dati in ingresso 4. Scrivere sugli (o sullo) stream in uscita il risultato dell elaborazione 5. Attendere nuovi dati in ingresso E importante ricordarsi che le operazioni di lettura degli stream sono bloccanti. Questo fatto é fondamentale per il corretto funzionamento di tutto il circuito come vederemo piú avanti. Definizione dei RB Come é stato detto questi processi hanno il ruolo di multiplexer al fine di dirigere i segnali agli ingressi dei CFB secondo i collegamenti specificati nel genotipo. Poiché alcuni layer ricevono in ingresso un numero diverso di stream o hanno solo un CFB (come nel caso dell ultimo layer) sono stati definiti 3 tipi di RB chiamati RB12, RBMid e RB7 RB12 Ovvero i blocchi di routing dei primi due layers. Questi avranno come ingresso solo lo stream che trasporta i byte in input al circuito e come uscita i 4 stream (uno per ogni CFB) che costituiscono gli ingressi dei blocchi funzionali. 55

62 Soluzione Proposta RBMidsono i blocchi di routing dei 5 layers intermedi che avranno come ingresso sia lo stream di input che gli 8 stream provenienti dai due layer che lo precedono. Anche questi in uscita avranno i 4 stream da dare in ingresso ai CFB. RB7 Il RB dell ultimo layer avente come ingresso gli 8 stream in uscita dagli ultimi due layer e come uscita un solo stream che costituisce l ingresso dell ultimo blocco funzionale. Un ulteriore differenza tra i tre tipi di RB dipende dalla dimensione della parte del genotipo che definisce le connessioni. In particolare i tipi RB12 e RB7 dovranno gestire 3 bit per ogni ingresso mentre gli RBMid usa gruppi di 4 bit. Una piccola precisazione. Si era detto che i segnali di ingresso erano 9 ma poco fá si é definito un unico stream per il strasporto di tali dati. Tale scelta é dovuta al fatto che, dovendo fornire a tutti i layers (meno l ultimo) tali dati, adottando una strategia tale da assegnare uno stream ad ognuno dei 9 dati in ingresso, si sarebbero dovuti usare 9 * 7 = 63 stream solo per i segnali di input del VRC. Visto che comunque tutti i dati in ingresso vengono forniti contemporaneamente, questi vengono forniti sequenzialmente e in ordine su di un singolo stream (per layer) dovendo quindi usare solo 7 stream e riducendo quindi l occupazione di risorse sul chip. Inoltre si era anche specificata la regola secondo la quale i layers di posto dispari accedevano solo agli ingressi da I0 a I7 mentre quelli di posto pari a quelli da I1 a I8. Sará compito del processo che invia i dati ai RB fare tale scelta(lo si vedrá quindi nella sezione realtiva all implementazione), di fatto i blocchi di routing si limiteranno a fare 8 operazioni di lettura dallo stream che trasporta i dati in ingresso. Anche nel caso dei RB, sebbene esistano 3 tipi diversi, esiste un insieme di operazioni comuni. Queste sono: 1. Reperire da tutti gli stream in ingresso (8 per RB12 e RB7, 16 per RBMid) i dati da instradare 2. Accedere al genotipo e recuperare i geni relativi alle connessioni di loro pertinenza 3. Accedere ai singoli geni del genotipo (mediante di maschere di 3 bit per RB12 e RB7, maschere di 4 bit per RBMid) 56

63 3.5 Possibili problematiche relative all implementazione 4. A seconda dei dati estratti dai geni, copiare sugli stream di uscita (4 per RB12 e RBMid, 1 per RB7) i corrispondenti dati in ingresso. 5. Attendere nuovi dati in ingresso Anche le interfacce presentano degli elementi in comune, in particolare l interfaccia di ogni RB conterrá: Uno stream di input per gli ingressi (I) del circuito (Non presente nel caso di RB7) Una serie di stream provenienti dai due layer che precedono il RB (non presenti nel caso di RB12) Quattro stream di uscita verso i CFB (solo uno nel caso di RB7) Un intero che rappresenta il byte da cui comincia la parte di genotipo che descrive le connessioni da realizzare Un riferimento alla memoria condivisa Nel complesso quindi per realizzare il VRC saranno necessari 37 processi (29 per CFB piú 8 RB) e 85 stream (7 per gli input ad altrettanti layer, per i CFB del primo e del penultimo layer, per l ultimo CFB e per i CFB dei 5 layer intermedi) 3.5 Possibili problematiche relative all implementazione Al fine di valutare sulla carta l effettiva efficacia della soluzione proposta, ci poniamo di fronte le seguenti problematiche: P1. Ad ogni 9-upla di dati in input corrisponde un output oppure c é il rischio che il blocco funzionale di uscita non riceva dati in ingresso e quindi non produca nessun segnale in uscita? P2. Visto che l esecuzione dei processi é parallela, quando si puó essere certi che tutti i CFB abbiano concluso le loro operazioni? 57

64 Soluzione Proposta P3. Come sincronizzare la lettura/scrittura del genotipo, visto che la memoria condivisa non supporta nessun meccanismo controllo di accesso, senza introdurre ulteriori segnali? Di seguito verrá mostrato che la soluzione proposta risolve le tutte le problematiche presentate. P1. Per dimostrare che la soluzione proposta fa si che ad ogni sequenza di ingresso di 9 byte corrisponda una uscita, utilizzeremo le seguenti ipotesi: H1 : Ogni CFB scrive sullo stream di uscita se e solo se riceve i due dati in ingresso. (ovvero, lo stream di uscita non é mai pieno). H2 : Ogni RB scrive su tutti i suoi stream di uscita se e solo se riceve tutti dati in ingresso(ovvero gli stream in ingresso ai CFB non sono mai pieni). Si vuole dimostrare che, messi i dati sugli stream di ingresso, l ultimo CFB produrrá sempre un risultato. Piú in generale, possiamo dimostrare che ogni CFB produrrá un dato sul suo stream di uscita in tali condizioni. Consideriamo d apprima i primi due RB. Gli ingressi a tali processi sono solamente i due stream che trasportano i segnali di input quindi, una volta messi i dati su tali stream, i due blocchi ricevono tutti i segnali di ingresso che gli servono quindi, per la H2 questi mettono su tutti i segnali di uscita (cioé gli ingressi dei CFB dei primi due layer) dei dati. A questo punto, come detto, i blocchi funzionali dei due layer hanno entrambi i dati di ingresso e quindi possono produrre il dato di uscita e metterlo sui rispettivi stream di uscita (H1 ). Completata questa fase (e solo dopo che i primi due layer avranno completato le loro operazioni) il RB relativo al terzo layer avrá a disposizione tutti i dati in ingresso (lo stream di input e gli 8 stream dei primi due layer) quindi produrrá i dati in ingresso per i CFB dello stesso layer che a loro volta, avendo i dati in ingresso, produrranno i byte di uscita. E cosí per tutti i layer fino all ultimo che riceverá i dati in ingresso solo dopo che il sesto e settimo avranno concluso le loro operazioni. Ricevuti tali dati, l ultimo RB (per H2 ) genererá i dati in ingresso all ultimo CFB il quale a sua volta (per H1 ) produrrá il dato in uscita. 58

65 3.6 Considerazioni finali Cosí facendo possiamo dedurre anche che: Per i 2, il layer i-esimo riceverá i dati in ingresso solo dopo che tutti i CFB del layer (i-1)-esimo avranno concluso le loro operazioni, quindi: L ultimo CFB inizierá le sue operazioni solo dopo che tutti gli altri CFB avranno concluso le loro. il che ci fornisce le condizioni di fine elaborazione (e quindi risponde a P2). P3. Le considerazioni fatte in precedenza unite al fatto che le operazioni di lettura degli stream sono bloccanti, spiegano come sia possibile impedire corse critiche durante l accesso al genotipo in Shared Memory. In particolare, se siamo certi della fine delle operazioni (ovvero quando l ultimo CFB produce il suo dato) siamo certi che, in mancanza di altri dati nello stream di input, tutti i processi (CFB e RB) saranno bloccati sull operazione di lettura degli stream in ingresso. In questo momento é quindi possibile modificare il genotipo senza correre il rischio che qualche processo stia effettuando un operazione di lettura della memoria. 3.6 Considerazioni finali Sulla profonditá degli stream Nella sezione precedente si sono fatte due ipotesi che implicavano che tutti gli stream utilizzati non fossero mai pieni. Questo di puó verificare in due situazioni, la prima é che gli stream abbiano profonditá infinita (decisamente irrealizzabile) la seconda é che il numero di 9-uple di segnali messi sugli stream di input prima di leggere l uscita non superi la profonditá degli stream interni. Infatti si é mostrato che, per ogni 9-upla di dati in input ogni processo, mette su almeno uno stream, uno e un solo dato. Quindi, per far si che le due ipotesi fatte in precedenza siano effettivamente valide, si potrebbe pensare di impostare tutti gli stream con profonditá unitaria (fatta eccezzione per quelli dei dati in input che avranno profonditá 8) e fornire nuove 9-uple solamente dopo che l ultima CFB avrá fornito il risultato e questo sia stato prelevato. 59

66 Soluzione Proposta Pipelining Il fatto di imporre profonditá unitaria a tutti gli stream impone, come abbiamo visto, che prima di fornire nuovi dati in input, si debba attendere la fine di tutto il processo di elaborazione rendendo il processo relativamente lento. Eppure abbiamo avuto indizi sul fatto che il comportamento del circuito sia sostanzialmente a stadi e quindi ci si puó chiedere se sia possibile introdurre la tecnica del pipelinig per aumentare le prestazioni. Ebbene questo dovrebbe essere ottenibile e, per di piú, con una unica modifica alla soluzione proposta: aumentare la profonditá degli stream fino al numero di stadi (che corrisponde al numero di layers) cioé 8.Cosí facendo, per come sono stati codificati i processi e per come sono realizzati gli stream dal compilatore di ImpulseC, appena un layer conclude le operazioni su un set di dati, é giá disponibile sugli stream il prossimo set di dati da elaborare. Sull integrazione dell Algoritmo Evolutivo Quanto fin qui realizzato é solo la parte evolvibile del nostro sistema. É necessario integrare il VRC con il modulo software che implementa l algoritmo evolutivo. Grazie alla possibilitá offerta da ImpulseC di scrivere praticamente qualsiasi modulo software (purché si rispetti quantomeno la sintassi ANSI C) l integrazione risulta molto agevole. Affiancato al modulo per l esecuzione dell EA si trova il processo per la valutazione delle configurazioni. Questo sará il processo (scritto usando le funzioni di ImpulseC) che si occuperá di generare le 9-uple di dati in ingresso e confrontare i dati in uscita. In particolare, se in ingresso vengono fornite delle immagini in scala di grigi di dimensione R x C, la funzione obiettivo da massimizzare é quella proposta da Sekanina per la sua versione del VRC, ovvero: R 2 C 2 f = 255 (R 2) (C 2) res(i, j) sample(i, j) (3.1) i=1 j=1 Dove res e sample sono rispettivamente l immagine ottenuta dal filtro e l immagine campione. 60

67 Capitolo 4 Implementazione Nel capitolo 3 si sono discussi alcuni aspetti della progettazione del VRC. In questo capitolo verrá invece discussa la parte di implementazione spiegando le scelte relative all algoritmo evolutivo e illustrando la realizzazione in ImpulseC del modulo completo di VRC e sezione evolvente. 4.1 Dettagli dell Algoritmo Evolutivo L algoritmo Evolutivo utilizzato nel caso di studio é un algoritmo genetico canonico nel senso che prevede le 3 classiche operazioni di selezione, crossover e mutazione. Come detto nella sezione dedicata agli algoritmi genetici (sez 1.3.2), ciascuno dei tre operatori puó avere svariate implementazioni. Di seguito verranno illustrate le caratteristiche degli operatori genetici utilizzati nell esperimento oltre che ad alcune caratteristiche dell algoritmo stesso non prettamente riguardanti i tre operatori genetici principali Composizione della popolazione Ogni individuo ha il proprio genotipo, rappresentato da una stringa di 42 bytes (anche se in realtá solo 330 bit dei 336 sono realmente utilizzati), dal proprio valore di fitness e da un flag di modifica. Questo flag viene settato a 1 ad ogni operazione che ne muta il genotipo (crossover e mutazione) mentre viene posto a 0 dopo ogni valutazione. In questo modo, qualora un individuo 61

68 Implementazione passi intalterato da una generazione all altra si puó evitare che venga valutato inutilmente una seconda volta. Utilizzando un valore intero al posto di uno in virgola mobile per il valore del fitness permette, eventualmente, di trasportare piú facilmente l algoritmo evolutivo dal modulo software direttamente in hardware. Per quanto riguarda la dimensone delle popolazioni quasi tutti gli espetimenti sono stati svolti con popolazioni di dimensione Selezione Durante le prove di evoluzione sono stati usate 3 varianti dell operatore di selezione. Tutte e 3 comunque, come giá ricordato, devono fare in modo di selezionare gli individui in modo che gli individui con un valore maggiore di fitness abbiano una probabilitá maggiore di poter diffondere il proprio materiale genetico(nello specifico, vengono copiati nella popolazione intermedia che poi verrá sottoposta agli altri due operatori genetici). Nella fattispecie, le 3 varianti dell operatore di selezione sono: Selezione mediante roulette con elitismo Selezione basata su torneo con elitismo Selezione basata su torneo con graduatoria ed elitismo Il metodo chiamato della roulette deriva il suo nome dal fatto che, in pratica, ad ogni individuo viene assegnata una fetta della roulette, la cui ampiezza dipende dal suo valore di fitness. In termini di implementazione, per ogni individuo da inserire nella nuova popolazione, viene generato un numero casuale r con distribuzione uniforme sull intervallo [0,1]. Quindi si sceglie l individuo il cui indice j é il minore tale per cui: j i=1 f i N i=1 f i > r dove f i é il fitness del i-esimo individuo della popolazione e N é la dimensione della popolazione. Questo metodo peró é ben diverso da quanto avviene 62

69 4.1 Dettagli dell Algoritmo Evolutivo in natura in cui, gruppi isolati di individui combattono per sopravvivere e diffondere il proprio materiale genetico. La selezione basata su torneo consiste nello scegliere casualmente N t (questo parametro viene definito dimensione del torneo) individui dalla popolazione corrente. Con probabilitá p t tra tutti gli individui partecipanti al torneo viene scelto solo quello col fitness maggiore mentre, con probabilitá 1 p t viene scelto un individuo a caso tra i partecipanti. Con questo metodo nessun individuo viene scartato senza almeno aver partecipato in una sfida con altri individui appartenenti alla stessa popolazione. Nelle simulazioni come valori di N t sono stati usati valori compresi tra 20 e 30 mentre, per quanto riguarda la probabilitá p t, si sono utilizzati valori compresi tra 0.75 e Il concetto di elitismo consiste nel permettere, ad ogni generazione, che l individuo con il fitness piú alto venga direttamente selezionato almeno una volta. Questo permette che tra una generazione e l altra si registri un eccessiva perdita di individui con un valore di fitness elevato. In genere, l individuo cosí selezionato non viene nemmeno sottoposto alle operazioni di crossover e mutazione sempre per evitare che venga eliminato dalla popolazione. Di seguito peró si vedrá che con una piccola probabilitá é concesso che anche l individuo selezionato per elitismo venga alterato. La selezione basata su torneo con graduatoria é molto simile al metodo appena presentato. Anche in questo caso vengono estratti casualmente N t individui dalla popolazione. Anche in questo caso, come nel precedente, si genera un numero casuale c con distribuzione uniforme su [0,1] se c <= p t si seleziona l individuo con il fitness piú alto. Se c > p t si genera nuovamente c e, se questo risulta essere minore di p t si sceglie il secondo miglior individuo. In caso contrario si continua il procedimento finché non viene selezionato un individuo o si esauriscono gli individui del torneo, nel quale caso viene scelto comunque l individuo con il fitness piú basso. Anche in questo caso é previsto che almeno una copia dell individuo migliore venga inserita direttamente nella popolazione intermedia (elitismo). A differenza della variante presentata in precedenza questa soluzione permette di selezionare,in media, individui con fitness maggiore. Questo da una parte puó essere vantaggioso ma, d altro canto, é anche piú probabile che si rischi di bloccare l evoluzione in un punto di massimo locale. 63

70 Implementazione Molti esperimenti sono stati svolti utilizzando il metodo di selezione basato su torneo ma senza graduatoria. Questo perché in alcuni casi, gli altri metodi portavano l algoritmo genetico ad una covergenza prematura, probabilemente per l elevata selettivitá Crossover Come operatore di crossover di é utilizzato il classico crossover a punto singolo. L implementazione di questo operatore prevede che dati due individui genitori venga scelto, casualmente, il punto di crossover. Tale punto é uno dei 330 bit del genotipo. Fatto questo vengono creati due nuovi individui scambiando i bit dei genotipi dei genitori prima e dopo il punto di crossover come mostrato in fig 4.1. La scelta degli individui ai quali applicare il crossover Figura 4.1: Schema dell operazione di crossover avviene come illustrato in fig 4.2. In pratica, una volta concluso li processo di selezione, vengono considerati tutti gli individui appartenenti alla popolazione intermedia che si trovano in posizioni adiacenti e, con probabilitá p c ne viene effettuato il crossover mentre, con probabilitá (1 p c ) i due genitori vengono copiati senza modifiche nella nuova popolazione. Questa copia diretta avviene anche per l individuo migliore senza che subisca alcuna operazione di crossover (elitismo). Nella maggior parte dei casi peró viene impostata una piccola probabilitá di non preservare l elitismo(negli esperimenti si sono usati valori compresi tra 1% e 5%). In pratica quindi, l individuo migliore viene copiato direttamente dal processo di selezione ma in seguito puó essere sottoposto a crossover e mutazione. Questo per impedire che la popolazione si concentri in un punto di massimo locale rappresentato appunto dall individuo selezionato 64

71 4.1 Dettagli dell Algoritmo Evolutivo Figura 4.2: Schema delle operazioni di selezione e corssover con elitismo (linea rossa) tramite elitismo Mutazione Anche per l operatore di mutazione, come nel caso dell operatore di selezione, sono state sviluppate diverse varianti. In particolare sono state denominate rispettivamente: Mutazione cieca non adattativa Mutazione cieca adattativa Mutazione attiva adattativa La mutazione cieca consiste nella semplice inversione di uno i piú bit 1 del genotipo. La posizion del bit da invertire viene scelta in maniera del tutto casuale (per questo la mutazione é cieca ). Il vantaggio é che tale metodo é semplice e facile da implementare ma presenta degli inconvenienti che hanno fatto si che questa variante venisse usata solo nei primi esperimenti. Il problema é che questo tipo di mutazione impone lo stesso mutation rate sia agli individui buoni che a quelli con fitness molto bassi. Questo obbliga a definire un rate di mutazione costante durante tutta l evoluzione mentre sarebbe meglio 1 Il numero di bit modificati per individuo viene di solito chiamato mutation rate 65

72 Implementazione che questo sia maggiore nelle prime fasi dell evoluzione (o comunque in caso il fitness dell individuo da mutare non sia elevato) e minore nelle fasi finali (quando gli individui hanno valori elevati di fitness). Per questo motivo é stata introdotta la mutazione cieca adattativa. Questo approccio prevede che vengano specificati un mutation rate minimo e massimo (r min e r max ), il fitness massimo raggiungibile (MAX SCORE) e una probabilitá di mutazione(p m ). A questo punto il mutation rate massimo per un individuo con fitness f é dato da n max = (r max r min ) (MAX SCORE f) MAX SCORE + r min (4.1) quindi per n max volte si genera un numero casuale r con distribuzione uniforme su [0,1] e, se r < p m si applica una mutazione cieca di un bit. In questo modo gli individui con fitness basso avranno molto probabilmente un mutation rate piú elevato di quello degli individui con fitness maggiore. Esiste peró un altro inconveniente. Alcune operazioni di mutazione possono di fatto lasciare inalterato un certo individuo. Questo perché modificano le connessioni o l operazione di un CFB che non é connesso direttamente o tramite altri CFB, all uscita. Questo aumenta i tempi di esecuzione dell algoritmo in quanto, in pratica, é come se abbassase il mutation rate. Nonostante tutto, alcuni esperimenti di evoluzione sono stati condotti utilizzando questo operatore genetico. Per ovviare anche a questo difetto é stata introdotta una terza variante dell operatore di mutazione: la mutazione attiva. In questo caso, partendo dal CFB di uscita e procedendo a ritroso seguendo le connessioni si estraggono solo i CFB effettivamente coinvolti nell elaborazione dei segnali. Fatto questo si sceglie casualmente un CFB da mutare e, all interno del CFB si sceglie quale bit invertire. Anche in questo caso si adotta lo stesso principio adattativo presentato nel caso precedente. Ognuna delle varianti dell operatore di mutazione prevede la possibilitá di non preservare l elitismo. Negli esperimenti il metodo utilizzato in prevalenza la mutazione attiva ma, soprattutto negli primi esperimenti piú semplici, si é fatto uso della mutazione cieca adattativa. 66

73 4.2 Dettagli dell implementazione dei processi in ImpulseC Valutazione degli individui Come giá anticipato nella sezione 3.6 per valutare gli individui si é fatto uso della stessa funzione obiettivo definita da Sekanina[12]: R 2 C 2 f = 255 (R 2) (C 2) res(i, j) sample(i, j) (4.2) i=1 Dove res e sample sono rispettivamente l immagine ottenuta dal filtro e l immagine campione. Il modulo software dedicato alla valutazione si preoccupa di generare le 9-uple (I0-I9) di dati in ingresso per ogni pixel dell immagine in input, quindi li fornisce in ingresso al VRC e valuta il risultato in uscita facendone la differenza con il corrispettivo pixel dell immagine campione e quindi aggiornando il fitness. In alcuni esprimenti le immagini in input sulle quali valutare gli individi sono piú di una. In questi casi il fitness complessivo dell individuo i é definito come: f toti = j=1 N img j=1 f i,j (4.3) Dove f i,j é il fitness dell individuo i calcolato sulla sola immagine j secondo la 4.2 mentre N img é il numero di immagini sulle quali effettuare le valutazioni. 4.2 Dettagli dell implementazione dei processi in ImpulseC Per la realizzazione dell intero modulo evolutivo composto dal Circuito Virtuale Riconfigurabile e dalla parte software dell algoritmo genetico sono stati utilizzati principalmente 3 tipi di processi: il processo produttore, i processi CFB e i processi RB. Di seguito verrano presentate alcune caratteristiche dell implementazione in ImpulseC per ciascun tipo di processo Il processo Produttore Il primo processo ad essere introdotto íl processo chiamato processo produttore. La funzione di questo processo é quella di implementare tutto l Algoritmo Genetico e di interfacciarsi con l hardware riconfigurabile (cioé il VRC). Questo processo é stato assegnato alla parte software e anzi, di fatto, costituisce da solo 67

74 Implementazione tutta la parte software del modulo evolutivo. L interfaccia di comunicazione con il VRC é costituita da: 7 stream con larghezza pari a 8 bit. Questi stream servono per trasportare le 9-uple di dati ai 7 RB dei primi 7 layer del circuito virtuale Uno stream di uscita (anch esso con larghezza di 8 bit) collegato direttamente all uscita dell ultimo CFB. Il riferimento alla memoria condivisa. La porzione di codice dedicata alla valutazione degli individui é quella che si preoccupa di fornire e recuperare i dati da/verso il VRC. Come detto nella sezione inerente la progettazione dei RB, i layer di posizione pari possono essere collegati agli input da I1 a I8 mentre i layer di posizione dispari agli ingressi da I0 a I7. Ed é sempre il modulo di valutazione che si occupa di Figura 4.3: Corrispondenza tra pixel e segnali di ingresso e partizionamento tra layer pari e dispari scandire tutta l immagine e creare, per ogni pixel, il vettore di input in modo da distribuire correttamente i segnali sugli stream. In particolare la porzione 68

75 4.2 Dettagli dell implementazione dei processi in ImpulseC di codice relativa alla creazione e distribuzione dei segnali oltre che alla lettua del risultato dallo stream di output e riportata di seguito: int x_off[9] = {-1,0,1,-1,0,1,-1,0,1}; int y_off[9] = {-1,-1,-1,0,0,0,1,1,1}; co_memory_writeblock(sharedmem, 0, R[i].MyGen, 42*sizeof(uint8)); score = 255 * (colonne - 2) * (righe - 2); for(x=1; x<colonne-1; x++) for(y=1; y<righe-1; y++) { for(j=0; j<9; j++) input[j]=(uint8) img_in[(y+y_off[j])*colonne+(x+x_off[j])]; for(i=0; i<8; i++) { co_stream_write(input_streaml0, &input[i+1], sizeof(uint8)); co_stream_write(input_streaml2, &input[i+1], sizeof(uint8)); co_stream_write(input_streaml4, &input[i+1], sizeof(uint8)); co_stream_write(input_streaml6, &input[i+1], sizeof(uint8)); } co_stream_write(input_streaml1, &input[i], sizeof(uint8)); co_stream_write(input_streaml3, &input[i], sizeof(uint8)); co_stream_write(input_streaml5, &input[i], sizeof(uint8)); co_stream_read(final_output, &res, sizeof(uint8)); } diff=(int)res-img_train[(y)*colonne+(x)]; if(diff<0) diff=-diff; score-=diff; 69

76 Implementazione La prima operazione consiste nello scrivere in memoria condivisa il genotipo dell individuo da valutare (tramite la chiamata a co_memory_writeblock) in modo che tutti i processi hardware possano accedervi agevolmente. In seguito viene scandita l immagine trascurando i pixel appartenenti al bordo. Per ogni pixel viene generato il vettore con i suoi otto-vicini. Una volta creato, i dati presenti nel vettore vengono scritti sequenzialmente nei 7 stream di ingresso al VRC facendo in modo che siano correttamente divisi tra stream di posizione pari e dispari. Fatto anche questo il modulo si mette in attesa del dato in uscita dal circuito che, una volta recuperato, verrá confrontato con il corrispettivo pixel dell immagine campione (img train) in modo da aggiornare il fitness I processi CFB Si é giá accennato, in precedenza, al fatto che sono state realizzate due diverse tipologie dei CFB, una per i blocchi appartenenti al primo, al penultimo e all ultimo layer e una per i CFB dei layer intermedi. L unica cosa che differenzia le due tipologie peró é solo il numero di stream di ingresso (uno solo per il primo tipo e due per il secondo). Questa differenza deriva dal fatto che i CFB del primo tipo sono collegati solo ad un layer (o all uscita nel caso dell ultimo CFB) mentre quelli del secondo sono collegati a due layer. Di seguito é riportato il codice della seconda tipologia di CFB: void hw_cfb(co_stream si, co_stream sc,co_stream sc2, co_memory geno, int byte_offset, uint8 mask) { uint8 op_byte; uint8 A,B,C; co_stream_open(si, O_RDONLY, CHAR_TYPE); co_stream_open(sc, O_WRONLY, CHAR_TYPE); co_stream_open(sc2, O_WRONLY, CHAR_TYPE); do { if(co_stream_read(si, &A, sizeof(uint8))!=co_err_none) break; if(co_stream_read(si, &B, sizeof(uint8))!=co_err_none) break; 70

77 4.2 Dettagli dell implementazione dei processi in ImpulseC co_memory_readblock(geno, byte_offset, &op_byte, sizeof(uint8)); op_byte = op_byte & mask; if(mask>0x0f) op_byte>>=4; C = CFB(A,B,op_byte); co_stream_write(sc,&c,sizeof(uint8)); co_stream_write(sc2,&c,sizeof(uint8)); } while (1); } co_stream_close(si); co_stream_close(sc); co_stream_close(sc2); return; Dopo le operazioni di apertura degli stream, il processo entra nel ciclo di esecuzione vero e prorio. La prima operazione quindi é quella di leggere i dati in ingresso (mediante due letture dello stesso stream). Si ricorda che tali operazioni di lettura sono bloccanti quindi, se non sono stati messi dei dati sugli stream di ingresso, il CFB risulta di fatto fermo. É proprio in questo momento che il processo produttore puó accedere i scrittura alla memoria condivisa e caricare il genotipo dell individuo da realizzare. Una volta letti i dati in ingresso il CFB recupera dalla memoria condivisa (alla posizione specificata da byte_offset) il nibble che definisce l operazione da realizzare mettendo in AND il byte letto con la maschera di bit fornita in ingresso 2. Se i 4 bit sono nella parte alta del byte letto, viene effettuato uno shift in modo da avere sempre i byte che descrivono l operazione nei quattro bit meno significativi di op_byte. L operazione immediatamente successiva consiste nell elaborazione vera e propria dei dati. La funzione CFB non fa 2 Tutti i paramentri di ingresso vengono fissati e forniti ai CFB dall apposita funzione di configurazione di ImpulseC 71

78 Implementazione altro che combinare i dati secondo l operazione specificata. In particolare le operazioni implementate sono quelle proposte da Sekanina: Op byte Risultato 0 C = A-B 1 C = A 2 C = ~A 3 C = A B 4 C = (~A) B 5 C = A & B 6 C = ~(A & B) 7 C = (A xor B) 8 C = A >> 1 9 C = A >> 2 A C = (A & 0x0F) (B & 0xF0) B C = (A + B > 255)? 255 : A + B C C = (A + B) >> 1 D C = (A + B) >> 2 E C = Max(A,B) F C = Min(A,B) Come si vede, nessun CFB possiede degli elementi di memoria come flip-flop o latch quindi nemmeno un stato interno. Di fatto il VRC realizza quindi solo un circuito combinatorio e non sequenziale. Inoltre, le operazioni realizzate dai CFB sono molto generali e non sono affatto specifiche del campo dell image processing I processi RB Anche nell implementazione dei RB, come si é detto, si sono create diverse varianti a causa di alcune differenze riguardanti il numero di stream in ingresso, in uscita e la struttura del genotipo che definisce le connessioni. In particolare sono stati codificati 3 diversi tipi di RB, le cui caratteristiche verranno riportate di seguito. RB12 72

79 4.2 Dettagli dell implementazione dei processi in ImpulseC Come suggerisce il nome, questo processo definisce i RB dei primi due layer. La caratteristica di questo tipo di RB é quella di ricevere in ingresso solo lo stream di Input e di trattare quindi connessioni il cui gene é lungo 3 bit. Di seguito é riportata solo l interfaccia della funzione che definisce questo tipo di RB: void hw_rb12(co_stream sinput, co_stream o0,co_stream o1,co_stream o2,co_stream o3, co_memory geno,int byte_offset); Anche in questo caso sono necessari il riferimento alla memoria condivisa e l offset del byte da cui inizia la parte di genotipo che descrive le connessioni da realizzare. Per prima cosa quindi il RB dovra leggere tutti i dati di ingresso con 8 operazioni di lettura su sinput e memorizzare tutti gli ingressi. Anche in questo caso le operazioni di lettura sono bloccanti quindi il processo rimarrá in attesa finché non verranno forniti dati in ingresso. Una volta letti i dati in ingresso, il processo accede alla memoria condivisa dove legge un gruppo di 3 byte (4 CFB con 2 ingressi da 3 bit = 18 bit = 3 byte). Fatto questo bisogna estrarre i gruppi di 3 bit che descrivono le singole connessioni. Anche in questo caso l operazione viene svolta mediante l uso di maschere di 3 bit che vengono fatte shiftare su tutti i 18 bit. Di seguito é riportato solo il loop di esecuzione interno: do { for(i=0,stop=0; i<8; i++) if(co_stream_read(sinput, &I[i], sizeof(uint8))!= co_err_none ) { stop=1; break; } if(stop) break; co_memory_readblock(geno, byte_offset, &local_mem, sizeof(uint32)); mask=7; for(i=0; i<8; i++) { 73

80 Implementazione route=(local_mem & mask) >> (3*i); mask<<=3; out = I[route]; switch(i) { case 0 : case 1 : co_stream_write(o0,&out,sizeof(uint8)); break; case 2 : case 3 : co_stream_write(o1,&out,sizeof(uint8)); break; case 4 : case 5 : co_stream_write(o2,&out,sizeof(uint8)); break; case 6 : case 7 : co_stream_write(o3,&out,sizeof(uint8)); break; } } }while(1); Anche in questo caso tutti i parametri del RB (in particolare l offset del genotipo) vengono forniti durante la fare di configurazione dei moduli da parte di ImpulseC. RBMid Questo tipo di processo prevede come ingressi: Uno stream per i dati in Input 8 stream di ingresso provenienti dai due layer che precedono il RB 4 stream di uscita verso i CFB Un riferimento alla memoria condivisa L offset della porzione di genotipo che codifica le connessioni Le differenze con il processo presentato in precedenza sono due: la prima é che questo RB gestisce 9 stream in ingresso, per un totale di 16 connessioni tra cui scegliere, la seconda é che per ogni connessione sono utlizzati 4 bit. Nonostante 74

81 4.2 Dettagli dell implementazione dei processi in ImpulseC queste differenze il funzionamento é molto simile peró. Infatti anche in questo caso prima di tutto é necessario leggere tutti dati in ingresso (8 dallo stream di Input e 8 dalle uscite dei CFB), quindi accedere al genotipo e decodificarlo in modo da sapere quali dati copiare sugli stream di uscita. do { for(i=0,stop=0; i<8; i++) if(co_stream_read(sinput, &I[i], sizeof(uint8))!= co_err_none ) { stop=1; break; } if(stop) break; if(co_stream_read(si0, &P[0], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si1, &P[1], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si2, &P[2], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si3, &P[3], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si4, &P[4], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si5, &P[5], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si6, &P[6], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si7, &P[7], sizeof(uint8))!= co_err_none ) break; co_memory_readblock(geno, byte_offset, &local_mem, sizeof(uint32)); mask=15; for(i=0; i<8; i++) { route=(local_mem & mask) >> (4*i); mask<<=4; out = (route<8)? I[route] : P[route-8]; switch(i) { case 0 : case 1 : co_stream_write(o0,&out,sizeof(uint8)); break; 75

82 Implementazione case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : } } }while(1); co_stream_write(o1,&out,sizeof(uint8)); break; co_stream_write(o2,&out,sizeof(uint8)); break; co_stream_write(o3,&out,sizeof(uint8)); break; L unica differenza fondamentale consiste nel distinguere tra segnali di input (route 8) e segnali provenienti dagli altri CFB (route 8). RB7 Questo processo rappresenta il RB dell ultimo layer e, in quanto tale, presenta solo 8 stream in ingresso provenienti dai CFB degli ultimi due layer e un solo stream di uscita diretto all ultimo CFB. Anche in questo caso le operazioni sono fondamentalmente le stesse: leggere i dati in inresso, accedere al genotipo e decodificare i geni necessari alla descrizione delle connessioni, copiare i dati in ingresso sullo stream di uscita e attendere nuovi dati in ingresso. Anche in questo caso ogni ingresso é definito utilizzando 3 bit. do { if(co_stream_read(si0, &P[0], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si1, &P[1], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si2, &P[2], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si3, &P[3], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si4, &P[4], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si5, &P[5], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si6, &P[6], sizeof(uint8))!= co_err_none ) break; if(co_stream_read(si7, &P[7], sizeof(uint8))!= co_err_none ) break; co_memory_readblock(geno, byte_offset, &local_mem, sizeof(uint16)); 76 mask=7<<4;

83 4.3 Osservazioni finali for(i=0; i<2; i++) { route=(local_mem & mask) >> (3*i+4); mask<<=3; out = P[route]; } co_stream_write(o0,&out,sizeof(uint8)); }while(1); 4.3 Osservazioni finali Come si é potuto vedere dal codice presentato, l implementazione del VRC ha richiesto poco codice a fronte di una fase di progettazione per adattare il VRC proposto da Sekanina all implementazione mediante ImpulseC. Sará quindi estremamente semplice modificare alcuni dettagli come le funzionalitá svolte dai CFB o la struttura delle connessioni sia per poter provare piccole modifiche al circuito in modo da migliorare il processo di evoluzione sia per riadattare completamente il VRC ad usi diversi da quelli legati all Image Processing. 77

84

85 Capitolo 5 Analisi dei Risultati Di seguito sono riportati alcuni test effettuati per verificare le possibilitá offerte dall approcio evolutivo alla ricerca delle configurazioni del VRC. Le immagini campione sono dei file bitmap di 32 x 32 pixel in scala di grigio (1 byte per pixel). La dimensione ridotta é stata semplicemente una scelta per diminuire i tempi di valutazione. Dopo l evoluzione, in quasi tutti i casi, i migliori individui sono stati valutati su immagini di dimensione maggiore. In ogni caso per l individuo finale evoluto viene riportata una percentuale di evoluzione. Questo valore indica il rapporto tra il fitness del migliore individuo evoluto e il fitness massimo raggiungibile. Nel caso di evoluzione su singole immagini tale valore massimo corrisponde a 255 (30 2) (30 2) = quindi, per esempio, una percentuale di evoluzione pari al 99,88% corrisponde ad un fitness di ovvero una differenza con l immagine campione di 255 livelli di grigio (per esempio un pixel bianco al posto di uno nero). 5.1 Evoluzione di un semplice edge detector Lo scopo di questa prova é quello di cercare di evolvere un semplice edge detector per immagini abbastanza semplici composte da oggetti neri su sfondo bianco(vedi fig 5.1). Dopo l evoluzione gli individui migliori sono stati testati su immagini diverse da quelle usate per il trainig in modo da valutare la robustezza della soluzione trovata. I dati dell algoritmo genetico usato in questo esperimento sono: 79

86 Analisi dei Risultati Numero immagini campione 1 Dimensioni immagini campione 32 x 32 Dimensione della popolazione 100 Metodo di selezione Torneo (N t 30) con Elitismo Metodo di mutazione Mutazione attiva adattativa p c 0.05 p m 0.65 r min 5 r max 40 Percentuale evoluzione 100% L immagine in ingresso é riportata in fig 5.1. Per creare l immagine campio- Figura 5.1: Immagine in ingresso ne(fig 5.2) si é fatto uso dell apposito toolbox di matlab. In fig 5.3 é riportato Figura 5.2: Immagine campione l andamento del valore di fitness del miglior individuo (linea blu) e della media della popolazione (linea verde). Mentre in fig 5.4 sono riportati il numero di crossover per generazione (o anche crossover rate, linea rossa) e il mutation rate medio (linea blu). Osservando la fig 5.3 possiamo notare come il fitness massimo sia aumentato abbastanza rapidamente durante le prime 25 80

87 5.1 Evoluzione di un semplice edge detector Figura 5.3: Andamento del fitness Figura 5.4: Numero di crossover per popolazione e mutation rate medio del primo esperimento generazioni per poi rimanere leggermente al di sotto del valore massimo fino all ultima generazione. Osservando il fitness medio invece possiamo notare come sia notevolmente inferiore al valore massimo. Questo ci indica due cose, la prima é che, evidentemente, nella popolazione esistono molti individui molto differenti tra di loro (il che é buono perché la popolazione é in grado di coprire buona parte dello spazio delle configurazioni) la seconda é che molte di queste configurazioni peró non risolvono in maniera soddisfacente il problema il che 81

88 Analisi dei Risultati dipende sostanzialemte dal fatto che, seppur utilizzando un mutation rate e un crossover rate abbastanza bassi, un piccolo cambiamento nella configurazione produce spesso una degenerazione considerevole del fitness. Osservando invece la fig 5.4 si nota che all inizio della simulazione, quando il fitness di tutti gli individi é abbastanza basso, il mutation rate é piú elevato (con il valore di picco pari a 8 mutazioni) per poi abbassarsi allorché cominciano ad apparire individui con fitness sempre piú elevato. Questa evoluzione ha impiegato 242 generazione (che, simulate su un Celeron 1.3 GHz, hanno impiegato un totale di 52 secondi, con un tempo medio per generazione di 0.21 secondi), in fig 5.5 sono riportati gli output dei migliori individui al variare delle generazioni. Per poter analizzare meglio le configura- Figura 5.5: Output del migliore individuo delle generazione 0 (A), 20 (B), 100(C), 240(D) e 242(E) zioni ottenute nella fase di evoluzione é stato realizzato un piccolo modulo di visualizzazione che, dato un individuo in ingresso seguendo un procedimento simile a quello di estrazione dei CFB attivi usato nella mutazione attiva, genera una rappresentazione del VRC. Di seguito sono riportati i migliori individui al variare delle generazioni (immagini 5.6, 5.7, 5.8 e 5.9). Studiando la struttura dei circuiti durante il processo evolutivo possiamo fare alcune osservazioni. La prima é che si nota che la tendenza, fino alla generazione 240, é quella di utilizzare 5 ingressi dei 9 disponibili (I2, I4, I5, I7 e I8 alla generazione 100 e I1, I2, I4, I5 e I7 alla generazione 242) scelti 82

89 5.1 Evoluzione di un semplice edge detector Figura 5.6: Miglior individuo alla generazione 0 Figura 5.7: Miglior individuo alla generazione 100 in maniera abbastanza inusuale per essere un filtro atto alla rilevazione dei contorni, come mostrato anche in fig 5.10C e D. Ancora piú inusuale é la scelta dei pixel utilizzati nell ultimo filtro evoluto (fig 5.10E). Nonostante questo peró, come si vedrá anche con altri casi di validazione, il circuito é in grado di riconoscere correttamente i contorni nelle immagini utilizzate. Un altra considerazione che si puó fare osservando le configurazioni é che si nota una notevole differenza nella struttura del circuito tra la generazione 100 e 242. La configurazione finale peró, nonostante tutto, é evidentemente una mutazione di 83

90 Analisi dei Risultati Figura 5.8: Miglior individuo alla generazione 240 Figura 5.9: Miglior individuo alla generazione 242 (miglior individuo) quella alla generazione 100. Il dimostra che l algoritmo genetico, nonostante si fosse imbattuto in un massimo locale (rappresentato dalla configurazione della generazione 242) é comunque stato in grado di mantenere un sufficiente diversitá nella popolazione in modo da poter in seguito trovare il massimo globale. La funzione realizzata dall ultimo individuo evoluto é la seguente: out = (( ( I8 I4 I8 I4 )) Min(( I8 I4 I8 I4 ), I5) I7 ) 84

91 5.1 Evoluzione di un semplice edge detector Figura 5.10: (A) Maschera di convoluzione utilizzata per il calcolo del gradiente verticale(sobel) (B) maschera per il calcolo del gradiente orizzontale(sobel) (C) Pixel utilizzati nel migliore individuo alla generazione 100 (D) Pixel usati nel migliore individuo alla generazione 240 (E) Pixel utilizzati nel circuito evoluto al 100% che puó essere manualmente ridotta a: out = I8 I4 Min( I8 I4, I5) I7 Osservando quest ultima forma della funzione svolta si puó osservare che é realizzabile utilizzando solo quattro tipi di CFB ovvero: modulo della differenza (operazione 0), inversione di tutti i bit (operazione 2), OR bit a bit (operazione 3) e minimo tra due byte (operazione F). L algoritmo evolutivo é quindi stato in grado di individuare una soluzione funzionante e semplice per la rilevazione dei contorni in semplici immagini. Una caratteristica che rende molto utili gli algoritmi evolutivi in queste applicazioni é la possibilitá di trovare soluzioni equivalenti in termini di fitness. Ripetendo piú volte l evoluzione si sono infatti trovati altri individi con percentuale di evoluzione pari al 100% ma con caratteristiche del VRC molto diverse (fig 5.11, 5.12). 85

92 Analisi dei Risultati Figura 5.11: Individuo evoluto al 100% per la realizzazione dell edge detector Figura 5.12: Individuo evoluto al 100% per la realizzazione dell edge detector 86

93 5.1 Evoluzione di un semplice edge detector Come si nota tra le tre configurazioni trovate ci sono differenze sia nella struttura delle connessioni, sia nel tipo e numero di funzioni utilizzate per i CFB sia negli ingressi utilizzati (per la prima soluzione (I4,I5,I7), per la seconda (I0,I1,I3,I4,I5,I7,I8) e (I4, I5, I7,I8) per la terza). Per valutare la bontá di ciascuna delle soluzioni sono state usate diverse immagini di ingresso. Con le Figura 5.13: Casi di test per valutare gli individui. Le immagini campione sono ancora di 32 x 32 pixel immagini riportate in fig 5.13 i tre individui hanno dato risultati esattamente identici e, come si nota, sono stati tutti e tre in grado di rilevare correttamente i bordi degli oggetti presenti. Un ultima prova consiste nel utilizzare un immagine di 128 x 128 pixel come caso di test. In questo caso il primo e il terzo VRC Figura 5.14: Terzo caso test hanno dato lo stesso identico risultato (ancora una volta) mentre il secondo ha sbagliato 4 pixel raggiungendo comunque una percentuale di evoluzione del 99.7%. In conclusione si puó affermare che i moduli evoluti sono effettivamente 87

94 Analisi dei Risultati Figura 5.15: Risultato del filtraggio con il primo (o il terzo) individuo in grado di fungere da edge detector per immagini relativamente semplici senza presenza di rumore. Un altra osservazione si puó fare sulla scelta del caso di test e sul comportamento dei tre individui evoluti. Sebbene l immagine di test sia di soli 32x32 pixel, le informazioni in essa contenuta sono state sufficienti per sviluppare (almeno nel primo e nel terzo VRC) un effettivo comportamento di edge detector. Infatti il VRC realizza dei semplici circuiti combinatori a 9 ingressi da 8 bit. In questo particolare caso peró, trattando con immagini in due livelli, possiamo pensare che il circuito abbia solo 9 ingressi da 1 bit ciascuno. Di conseguenza per definire il comportamento del circuito sequenziale é necessario fornire in ingresso il maggior numero possibile di ingressi differenti che comunque non potranno essere piú di 2 9 = 512 (nota: solo in questo caso particolarmente semplice) e ci si puó aspettare che, nei 900 ingressi estraibili da immagini 32x32, sia possibile trovarne a sufficienza. Per curiositá i tre circuti Figura 5.16: (A) Immagine originale (B) Immagine ottenuta utilizzando il primo individuo evoluto evoluti sono stati applicati ad immagini piú complesse e, sorptendetemente, il primo individuo (il piú semplice) é stato in grado di rilevare discretamente i 88

95 5.2 Eliminazione del rumore da semplici immagini contorni piú evidenti come si nota in figura Nota: per evidenziare meglio i risultati l immagine é stata sogliata ad un valore molto basso (12). 5.2 Eliminazione del rumore da semplici immagini In questo caso la funzione che si intende evolvere consiste nell eliminare del rumore di diversa entitá da delle immagini identiche a quelle usate per l evoluzione dell edge detector. Per evolvere il circuto finale si é fatto uso di una tecnica chiamata evoluzione incrementale. Nello specifico del nostro caso questa tecnica consiste nell evolvere il VRC secondo passi successivi. Ad ogni passo viene aumentata la percentuale di rumore in modo da ottenere delle immagini sempre piú disturbate. I parametri dell algoritmo evolutivo sono: Numero immagini campione 1 Dimensioni immagini campione 32 x 32 Dimensione della popolazione 100 Metodo di selezione Torneo (N t 30) con Elitismo Metodo di mutazione Mutazione attiva adattativa p c 0.05 p m 0.65 r min 5 r max 40 Percentuale evoluzione 100% La prima immagine utilizzata per l evoluzione contiene il 2% di pixel affetti da rumore. In fig 5.18 sono riportate le uscite dei migliori individui durante Figura 5.17: Immagine per il primo passo dell evoluzione incrementale 89

96 Analisi dei Risultati l evoluzione. In questo caso la soluzione é stata trovata in 483 generazioni Figura 5.18: Output dei individui migliori al generazioni 0 (A), 20 (B), 60 (C), 280 (D) (impiegando poco meno di 2 minuti in simulazione). Figura 5.19: Miglior individuo alla generazione 20 90

97 5.2 Eliminazione del rumore da semplici immagini Figura 5.20: Miglior individuo alla generazione 60 Figura 5.21: Miglior individuo alla generazione 483 (fine evoluzione) 91

98 Analisi dei Risultati L ultima popolazione di questo processo evolutivo é stata usata come popolazione di partenza per il prossimo passo evolutivo nel quale si é fatto uso di un immagine con una maggiore quantitá di pixel affetti da rumore (10%, fig 5.22A). Abbastanza soprendentemente peró il miglior individuo trovato al Figura 5.22: Immagini utilizzate per i seguenti passi evolutivi. (A) rumore 10% (B) rumore 12.5% (C) rumore 15% passo evolutivo precedente é stato in grado di eliminare completamente anche il rumore presente nelle immagini 5.22A e 5.22B. Per arrivare alla completa evoluzione anche nell ultimo caso, con rumore al 15% sono servite altre 2700 generazioni al termine delle quali la configurazione del miglior individuo é quella riportata in fig 5.23 mentre di seguito é riportata la funzione realizzata dal circuito. Figura 5.23: Configurazione del miglior individuo con rumore al 15% 92

99 5.2 Eliminazione del rumore da semplici immagini out = ((I4 Min(( ((I1 + s I1) & (I5 & I6)) >> 1), I4)) + s ((I4 Min(( ((I1 + s I1) & (I5 & I6)) >> 1), I4)) + s (I4 Min(( ((I1 + s I1) & (I5 & I6)) >> 1), I4)))) Anche in questo caso si possono fare delle considerazioni a proposito del processo evolutivo e delle singole configurazioni evolute. In questo caso, data la natura casuale del rumore, ci si aspetterebbe che il filtro utilizzi il numero maggiore possiblie di ingressi per ricostruire l immagine originale. In fig 5.24 sono riportati i pixel utilizzati dai migliori individui al variare delle generazioni. Contrariamente a quanto ci si sarebbe aspettati il migliore circuito evoluto Figura 5.24: Pixel utilizzati dal filtro alle generazioni 20 (A), 60 (B), 483 (C) e alla fine del secondo processo evolutivo (D) con rumore fino al 12.5% fa uso di solo due ingressi. L ingresso I7, nonostante compaia nella configurazione, é di fatto inutilizzato poiché il CFB che riceve in ingresso questo dato effettua l operazione ( I7) I7 = 255 per ogni valore di tale pixel. Il circuito finale evoluto utilizza invece quattro pixel (fig 5.24D) ma, nonostante questo, come vedremo con i casi di validazione, riesce comunque ad eliminare completamente il rumore fino al 15%. Sempre osservando l ultimo circuito evoluto si nota nuovamente che viene fatto uso solo di una piccola parte delle funzioni realizzabili dai CFB, in particolare in questo caso vengono usate solo 6 diverse funzioni. Per testare la bontá della soluzione trovata si é fatto uso di un altra immagine con livelli diversi di rumore (fig 5.25). Tra l altro si é utilizzata anche un immagine contenente il 20% di pixel con rumore (quindi sopra il limite utilizzato nell evoluzione) e il risultato ottenuto era corretto al 98.7%. Anche in questo caso quindi si puó affermare che l evoluzione artificiale é stata in grado di identificare una soluzione semplice ma robusta al problema di eliminare il rumore da semplici immagini. 93

100 Analisi dei Risultati Figura 5.25: Casi di validazione del miglior individuo per l eliminazione del rumore. (A) 0% (B) 10% (C) 15% (D) 20% 5.3 Evoluzione di un Edge Detector per semplici immagini contenenti rumore Con questa prova si vuole evolvere ancora un edge detector per immagini simili a quelle del caso precedente alle quali peró viene aggiunto del rumore. Anche in questo caso si fará uso di una evoluzione incrementale. I parametri dell algoritmo genetico sono identici al caso precedente, ovvero: Numero immagini campione 1 Dimensioni immagini campione 32 x 32 Dimensione della popolazione 100 Metodo di selezione Torneo (N t 30) con Elitismo Metodo di mutazione Mutazione attiva adattativa p c 0.05 p m 0.65 r min 5 r max 40 Percentuale evoluzione 100% Per il primo passo evolutivo si é fatto in modo che il 2% dei pixel dell immagine venissero modificati, ottenendo l immagine riportata in fig 5.26A. La primo passo evolutivo é terminato in 1050 generazioni generando la configurazione riportata in fig Il circuito realizza la seguente funzione: 94

101 5.3 Evoluzione di un Edge Detector per semplici immagini contenenti rumore Figura 5.26: Immagini campione per i vari passi evolutivi. (A) rumore 2% (B) rumore 10% (C) rumore 12.5% (D) rumore 15% out = ( (( (( I5) I8)) I5 I7 ) Max( (( (( I5) I8)) I5 I7 ), (( (( Max(((I2 + I6) >> 1), ((I7 + I4) >> 2))) Max(((I2 + I6) >> 1), ((I7 + I4) >> 2)))) (( (( I5) I8)) I5 I7 )))) L ultima popolazione del primo passo evolutivo é stata usata per continuare l evoluzione. Nel secondo passo peró l immagine campione contiene il 10% di pixel affetti da rumore (fig 5.26B). Evoluto anche questa configurazione si é proceduto allo stesso modo utilizzando prima l immagine 5.26C e poi la 5.26D. Bisogna far notare che il secondo e il terzo passo evolutivo sono terminati estremamente rapidamente poiché di fatto lo stesso individuo evoluto nel primo passo evolutivo era in grado di trovare i bordi degli oggetti anche in presenza di rumore in quantitá maggiore. Non é stato peró possibile (in 7 ore, circa alla generazione 24000) evolvere il circuito in grado raggiungere una percentuale di evoluzione del 100% con l ultima immagine in ingresso ma é stata arrestata al 99.94% (il risultato é riportato in fig 5.28). La configurazione dell ultimo individuo ottenuto é riportata in fig 5.29 mentre di seguito é riportata la funzione realizzata dall ultimo individuo. 95

102 Analisi dei Risultati Figura 5.27: Miglior individuo ottenuto nel primo passo evolutivo (rumore 2%) Figura 5.28: Immagine in usita del modulo evoluto al 99% out = (( ( ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5)))+ s ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5))))+ s ( ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5)))+ s ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5))))) + s ( ( ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5)))+ s ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5))))+ s ( ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5)))+ s ((( (( I6) I5)) (I2 + s I8)) & ( I4 I8 (I7 I5)))))) Effettuare un analisi approfondita delle funzioni realizzate dai due individui, come si puó osservare, non é compito semplice e probabilmente é molto meno significativo che effettuare dei test di validazione con immagini diverse da quelle usate per la valutazione. Una considerazione peró puó essere fatta sugli ingressi utilizzati dai circuiti. Il primo individuo evoluto utilizza gli ingressi 96

103 5.3 Evoluzione di un Edge Detector per semplici immagini contenenti rumore Figura 5.29: Configurazione del migliore individuo alla fine dell evoluzione I2,I4,I5,I6,I7,I8 mentre il secondo utilizza gli ingressi I1, I3, I5, I6 e I7(vedi fig 5.30). Figura 5.30: (A) Pixel utilizzati dal primo VRC (B) Pixel utilizzati dal miglior individuo dell ultima generazione Il secondo filtro, essendo il migliore, probabilmente considera un gruppo meglio assortito degli 8-vicini del pixel centrale (il quale, come accade con quasi tutti i filtri per la rilevazione dei contorni, non viene preso in considerazione) e questo gli permette di rilevare con maggiore precisione i contorni degli oggetti anche in presenza di rumore. Di seguito sono riportati alcuni casi di validazione della seconda configurazione. In questo caso il filtro non si é comportato in maniera perfetta sulle immagini campioni raggiungendo comunque un grado di precisione del 99.95% con l immagine 5.31B, 99.8% con l immagine 5.31C e 98.95% con l immagine 5.31D. Le ragioni di questo abbassamento delle prestazioni del filtro dipende dal fatto che, con una sola immagine campione, non é stato possibile fare in modo che il circuito fosse valutato su degli ingressi abbastanza differenti in modo da aumentarne la robustezza. La soluzione a 97

104 Analisi dei Risultati Figura 5.31: Prove di validazione dell individuo che effettua la rilevazione dei contorni. (A) rumore 0% (B) rumore 5% (C) rumore 10% (D) rumore 12% questo problema é semplicemente quella di utilzzare piú immagini differenti in ingresso. Figura 5.32: Prova con immagini complesse Ad ogni modo, nonostante i limiti derivanti dalla scelta del numero delle immagini campione, anche in questo caso possiamo concludere che l evoluzione artificiale ha prodotto una soluzione abbastanza robusta in grado di rilevare i contorni di semplici immagini contenenti rumore. Per curiositá lo stesso filtro é stato applicato ad una immagine complessa nonostante l evoluzione non fosse rivolta a questo tipo di immagini, il circuito é stato comunque in grado di rilevare almeno i contorni piú rilevanti come mostrato in fig Bisogna 98

105 5.4 Riduzione del rumore da immagini complesse notare peró che, almeno con questa immagine, il filtro evoluto nel caso di Edge Detection senza rumore, sembra aver ottenuto dei risultati migliori. 5.4 Riduzione del rumore da immagini complesse Lo scopo del successivo esperimento é quello di evolvere un filtro in grado di ridurre i disturbi presenti su immagini piú complesse di quelle utilizzate nel caso precedente. In questo caso si sarebbe sempicemente potuto tentare di evolvere il VRC in modo da simulare il comportamento di un filtro giá esistente (come filtro medio o mediano) ma, per valutare la possiblitá offerte dall evoluzione artificiale, si é preferito un altra soluzione ovvero utilizzare semplicemente come ingresso l immagine contenente rumore e come uscita quella senza rumore e, come funzione di fitness, la eq 4.2. Ovviamente in questo caso, non trattandosi di immagini in due livelli (come avveniva sostanzialmente nel caso precedente) non sará possibile raggiungere una percentuale di evoluzione del 100% infatti questo vorrebbe dire eliminare completamente il rumore senza perdere nessuna informazione contenuta nell immagine campione, informazioni che peró sono giá state perse alterando il valore di alcuni pixel. Se per caso questo avvenisse vuol dire che il filtro evoluto sarebbe troppo specifico per l immagine campione e quindi risulterebbe inefficace se applicato ad altre immagini. Di seguito sono riportati i parametri dell algoritmo genetico: Numero immagini campione 1 Dimensioni immagini campione 64 x 64 Dimensione della popolazione 100 Metodo di selezione Torneo (N t 10) con Elitismo Metodo di mutazione Mutazione attiva adattativa p c 0.01 p m 1 r min 2 r max 15 Percentuale evoluzione 98.5% Come si nota in questo caso si é fatto uso di immagini di dimensione 64 x 64 in quanto, essendo aumentata la complessitá dell immagine campione, sa- 99

106 Analisi dei Risultati ranno necessarie piú informazioni per l evoluzione corretta del filtro, da qui la scelta di utilizzare delle immagini campione di dimensione maggiore (che ovviamente implicano dei tempi di valutazione maggiori). In fig 5.33 sono Figura 5.33: (A) immagine originale (B) immagine campione con il 2% dei pixel affetti da rumore riportate l immagine pulita originale e quella ottenuta modificando il 2% dei pixel. L evoluzione verrá effettuata usando l immagine 5.33B come ingresso e la 5.33A come uscita. Una volta evoluto il VRC verrá testato su immagini di dimensione maggiore. Il processo evolutivo é stato arrestato una volta raggiunta una percentuale di evoluzione pari al 98.5% il ché é avvenuto dopo circa generazioni (che in simulazione hanno impiegato circa 1 ora e 20 minuti). In fig 5.34 sono riportate l immagine in ingresso e il risultato ottenuto applicando il filtro evoluto mentre in fig 5.35 é riportata la configurazione del miglior individuo dell ultima generazione. Possiamo subito notare due cose. La prima é che effettivamente, analizzando la percentuale di corrispondeza con l immagine senza rumore, sembra ci sia stata una eliminazione del rumore (ovviamente perdendo parte dell informazione contenuta nell immagine). La seconda é che, in questo caso, sono effettivamente stati utilizzati tutti gli ingressi I0-I8. Per confronto in fig 5.36 é riportato il risultato ottenuto applicando un filtro medio 3x3 all immagine disturbata. Per testare l efficacia del filtro cosí evoluto sono state utilizzate immagini di dimensioni diverse. In particolare in fig 5.37 l immagine ingresso utlizzata é la stessa dal quale é stato preso il dettaglio per effettuare l evoluzione. 100

107 5.4 Riduzione del rumore da immagini complesse Figura 5.34: (A) Immagine disturbata in ingresso (corrispondenza con l originale senza rumore 88.84%) (B) Risultato dell elaborazione con il miglior individuo della generazione (corrispondenza con l originale 98.59%) Figura 5.35: Configurazione del miglior individuo della generazione Figura 5.36: Risultato del filtraggio con filtro medio 3x3 101

108 Analisi dei Risultati Figura 5.37: (A) Immagine originale (B) Immagine con rumore al 2% (C) Immagine risultato del filtraggio 102

109 5.4 Riduzione del rumore da immagini complesse Figura 5.38: (A) Immagine originale (B) Immagine con rumore al 2% (C) Immagine risultato del filtraggio 103

110 Analisi dei Risultati In fig 5.38 invece é stata utilizzata un altra immagine. Come si vede, anche in questo caso sembrerebbe che il rumore sia stato eliminato (soprattutto osservando le parti in plastica) ma si é presentato un inconveniente. Il valore medio di tutti i pixel sembra essere stato aumentato (in pratica l immagine risulta essere piú chiara). Una ragione di questo fatto puó essere trovata osservando le immagini campione utilizzate per l evoluzione. Osservano la fig 5.33 si nota che l aggiunta del rumore ha provocato un abbassamento del valore medio dei pixel (l immagine é infatti piú scura) e quindi il circuito evoluto, dovendo fare in modo che l immagine filtrata sia il piú possibile simile a quella di partenza ha fatto in modo di aumentare tale valore medio (cosa che, come si vede osservando la fig 5.37, di fatto funziona, ma solo su quell immagine). Il problema quindi é che probabilmente, al contrario di quanto volevamo, il filtro é troppo specifico per il rumore che affligge l immagine campione. L esperimento quindi é stato ripetuto utilizzando due immagini in ingresso (in questo caso il fitness viene misurato secondo l eq 4.3) sempre con rumore al 2%. La prima immagine é la stessa usata nel caso precedente mentre quella aggiunta é riportata in fig 5.39 Figura 5.39: (A) Seconda immagine di training senza rumore (B) Seconda immagine con rumore al 2% In questo caso peró, il processo evolutivo, seppur durato per oltre 12 ore, non é stato in grado di identificare delle soluzioni adeguatamente efficienti (il miglioramento sulle immagini campione é a malapena percettibile). Una possibile ragione di questo fallimento potrebbe essere una errata scelta nelle immagini campione o semplicemente nel fatto che il processo sarebbe dovuto durare di piú. 104

Parte I. Prima Parte

Parte I. Prima Parte Parte I Prima Parte Capitolo 1 Introduzione generale 1.1 Il problema dell assegnazione Corsi-Borsisti Il problema dell assegnazione delle borse dei corsi ai vari studenti può essere riassunto nei punti

Dettagli

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Dipartimento di Ingegneria della Informazione Via Diotisalvi, 2 56122 PISA ALGORITMI GENETICI (GA) Sono usati per risolvere problemi di ricerca

Dettagli

Page 1. Evoluzione. Intelligenza Artificiale. Algoritmi Genetici. Evoluzione. Evoluzione: nomenclatura. Corrispondenze natura-calcolo

Page 1. Evoluzione. Intelligenza Artificiale. Algoritmi Genetici. Evoluzione. Evoluzione: nomenclatura. Corrispondenze natura-calcolo Evoluzione In ogni popolazione si verificano delle mutazioni. Intelligenza Artificiale In un ambiente che varia, le mutazioni possono generare individui che meglio si adattano alle nuove condizioni. Questi

Dettagli

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Dipartimento di Ingegneria della Informazione Via Diotisalvi, 2 56122 PISA ALGORITMI GENETICI (GA) Sono usati per risolvere problemi di ricerca

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

Introduzione all analisi dei segnali digitali.

Introduzione all analisi dei segnali digitali. Introduzione all analisi dei segnali digitali. Lezioni per il corso di Laboratorio di Fisica IV Isidoro Ferrante A.A. 2001/2002 1 Segnali analogici Si dice segnale la variazione di una qualsiasi grandezza

Dettagli

Amplificatori Audio di Potenza

Amplificatori Audio di Potenza Amplificatori Audio di Potenza Un amplificatore, semplificando al massimo, può essere visto come un oggetto in grado di aumentare il livello di un segnale. Ha quindi, generalmente, due porte: un ingresso

Dettagli

IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi.

IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi. IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi. Negli ultimi anni, il concetto di risparmio energetico sta diventando di fondamentale

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Computazione Naturale AA. 2011-2012

Computazione Naturale AA. 2011-2012 Computazione Naturale AA. 2011-2012 Prof. Mario Pavone CdL Magistrale in Informatica Dip. Matematica ed Informatica mpavone@dmi.unict.it http://www.dmi.unict.it/mpavone/ INDICE Obiettivi formativi Cos

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

PREMESSA AUTOMAZIONE E FLESSIBILITA'

PREMESSA AUTOMAZIONE E FLESSIBILITA' PREMESSA In questa lezione analizziamo i concetti generali dell automazione e confrontiamo le diverse tipologie di controllo utilizzabili nei sistemi automatici. Per ogni tipologia si cercherà di evidenziare

Dettagli

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

Più processori uguale più velocità?

Più processori uguale più velocità? Più processori uguale più velocità? e un processore impiega per eseguire un programma un tempo T, un sistema formato da P processori dello stesso tipo esegue lo stesso programma in un tempo TP T / P? In

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

ARCHITETTURA DI RETE FOLEGNANI ANDREA

ARCHITETTURA DI RETE FOLEGNANI ANDREA ARCHITETTURA DI RETE FOLEGNANI ANDREA INTRODUZIONE È denominata Architettura di rete un insieme di livelli e protocolli. Le reti sono organizzate gerarchicamente in livelli, ciascuno dei quali interagisce

Dettagli

www.andreatorinesi.it

www.andreatorinesi.it La lunghezza focale Lunghezza focale Si definisce lunghezza focale la distanza tra il centro ottico dell'obiettivo (a infinito ) e il piano su cui si forma l'immagine (nel caso del digitale, il sensore).

Dettagli

Capitolo 13: L offerta dell impresa e il surplus del produttore

Capitolo 13: L offerta dell impresa e il surplus del produttore Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

11. Evoluzione del Software

11. Evoluzione del Software 11. Evoluzione del Software Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 11. Evoluzione del Software 1 / 21 Evoluzione del Software - generalità Cosa,

Dettagli

Algebra Di Boole. Definiamo ora che esiste un segnale avente valore opposto di quello assunto dalla variabile X.

Algebra Di Boole. Definiamo ora che esiste un segnale avente valore opposto di quello assunto dalla variabile X. Algebra Di Boole L algebra di Boole è un ramo della matematica basato sul calcolo logico a due valori di verità (vero, falso). Con alcune leggi particolari consente di operare su proposizioni allo stesso

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

REPORT BRAIN FARM. MODALITA DI ADDESTRAMENTO in questa fase, si sono impostati diversi parametri: GENITORI:3 FIGLI:3 GENERAZIONI:100

REPORT BRAIN FARM. MODALITA DI ADDESTRAMENTO in questa fase, si sono impostati diversi parametri: GENITORI:3 FIGLI:3 GENERAZIONI:100 REPORT BRAIN FARM Federica Catanzariti 147 Consuelo Nicoletti 1621 Mariapaola Mercurio 1 Paola Ozimo 13 Maria Rosa Vardè 19 Lo scopo del nostro lavoro è quello di imparare a usare Brain Farm che ci permette

Dettagli

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica Scopo della lezione Informatica per le lauree triennali LEZIONE 1 - Che cos è l informatica Introdurre i concetti base della materia Definire le differenze tra hardware e software Individuare le applicazioni

Dettagli

Un gioco con tre dadi

Un gioco con tre dadi Un gioco con tre dadi Livello scolare: biennio Abilità interessate Costruire lo spazio degli eventi in casi semplici e determinarne la cardinalità. Valutare la probabilità in diversi contesti problematici.

Dettagli

Rapporto dal Questionari Insegnanti

Rapporto dal Questionari Insegnanti Rapporto dal Questionari Insegnanti SCUOLA CHIC81400N N. Docenti che hanno compilato il questionario: 60 Anno Scolastico 2014/15 Le Aree Indagate Il Questionario Insegnanti ha l obiettivo di rilevare la

Dettagli

Intelligenza Artificiale. Introduzione al calcolo evolutivo

Intelligenza Artificiale. Introduzione al calcolo evolutivo Intelligenza Artificiale Introduzione al calcolo evolutivo Marco Piastra Calcolo evolutivo - 1 Calcolo evolutivo ed IA Universe Borg Vogons Earth etc Biotop Society Stones & Seas etc Art Science Politics

Dettagli

Piano di gestione della qualità

Piano di gestione della qualità Piano di gestione della qualità Pianificazione della qualità Politica ed obiettivi della qualità Riferimento ad un eventuale modello di qualità adottato Controllo della qualità Procedure di controllo.

Dettagli

DIPARTIMENTO DI STUDI UMANISTICI

DIPARTIMENTO DI STUDI UMANISTICI DIPARTIMENTO DI STUDI UMANISTICI Corso di Laurea Interdipartimentale in Scienze della Formazione Primaria( Ind.Primaria) A.A 2013/2014 REPORT SULL ELABORAZIONE DI UN AGENTE ARITIFICIALE TEORIA E METODOLOGIA

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

12. Evoluzione del Software

12. Evoluzione del Software 12. Evoluzione del Software Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 12. Evoluzione del Software 1 / 21 Evoluzione del Software - generalità Cosa,

Dettagli

La memoria - generalità

La memoria - generalità Calcolatori Elettronici La memoria gerarchica Introduzione La memoria - generalità n Funzioni: Supporto alla CPU: deve fornire dati ed istruzioni il più rapidamente possibile Archiviazione: deve consentire

Dettagli

Project Cycle Management

Project Cycle Management Project Cycle Management Tre momenti centrali della fase di analisi: analisi dei problemi, analisi degli obiettivi e identificazione degli ambiti di intervento Il presente materiale didattico costituisce

Dettagli

E naturale chiedersi alcune cose sulla media campionaria x n

E naturale chiedersi alcune cose sulla media campionaria x n Supponiamo che un fabbricante stia introducendo un nuovo tipo di batteria per un automobile elettrica. La durata osservata x i delle i-esima batteria è la realizzazione (valore assunto) di una variabile

Dettagli

Gli oggetti di plastica. Abilità interessate Conoscenze Nuclei coinvolti Collegamenti esterni Decodificare informazioni di tipo grafico.

Gli oggetti di plastica. Abilità interessate Conoscenze Nuclei coinvolti Collegamenti esterni Decodificare informazioni di tipo grafico. Gli oggetti di plastica Livello scolare: 1 biennio Abilità interessate Conoscenze Nuclei coinvolti Collegamenti esterni Decodificare informazioni di tipo grafico. Funzioni lineari. Pendenza di una retta.

Dettagli

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

Dettagli

Come valutare le caratteristiche aerobiche di ogni singolo atleta sul campo

Come valutare le caratteristiche aerobiche di ogni singolo atleta sul campo Come valutare le caratteristiche aerobiche di ogni singolo atleta sul campo Prima di organizzare un programma di allenamento al fine di elevare il livello di prestazione, è necessario valutare le capacità

Dettagli

~ Copyright Ripetizionando - All rights reserved ~ http://ripetizionando.wordpress.com STUDIO DI FUNZIONE

~ Copyright Ripetizionando - All rights reserved ~ http://ripetizionando.wordpress.com STUDIO DI FUNZIONE STUDIO DI FUNZIONE Passaggi fondamentali Per effettuare uno studio di funzione completo, che non lascia quindi margine a una quasi sicuramente errata inventiva, sono necessari i seguenti 7 passaggi: 1.

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Stimare il WCET Metodo classico e applicazione di un algoritmo genetico

Stimare il WCET Metodo classico e applicazione di un algoritmo genetico Stimare il WCET Metodo classico e applicazione di un algoritmo genetico Sommario Introduzione Definizione di WCET Importanza del WCET Panoramica dei classici metodi per calcolare il WCET [1] Utilizzo di

Dettagli

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 L unità di Milano Città Studi del Centro matematita propone anche per l a.s. 2011-2012 una serie di problemi pensati per

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Università degli Studi di Salerno

Università degli Studi di Salerno Università degli Studi di Salerno Facoltà di Scienze Matematiche Fisiche e Naturali Corso di Laurea in Informatica Tesi di Laurea Algoritmi basati su formule di quadratura interpolatorie per GPU ABSTRACT

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Corso di. Dott.ssa Donatella Cocca

Corso di. Dott.ssa Donatella Cocca Corso di Statistica medica e applicata Dott.ssa Donatella Cocca 1 a Lezione Cos'è la statistica? Come in tutta la ricerca scientifica sperimentale, anche nelle scienze mediche e biologiche è indispensabile

Dettagli

Pro e contro delle RNA

Pro e contro delle RNA Pro e contro delle RNA Pro: - flessibilità: le RNA sono approssimatori universali; - aggiornabilità sequenziale: la stima dei pesi della rete può essere aggiornata man mano che arriva nuova informazione;

Dettagli

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 I CODICI 1 IL CODICE BCD 1 Somma in BCD 2 Sottrazione BCD 5 IL CODICE ECCESSO 3 20 La trasmissione delle informazioni Quarta Parte I codici Il codice BCD

Dettagli

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI Un utilizzatore a valle di sostanze chimiche dovrebbe informare i propri fornitori riguardo al suo utilizzo delle sostanze (come tali o all

Dettagli

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella. Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.net Prestazioni Si valutano in maniera diversa a seconda dell

Dettagli

Informatica per le discipline umanistiche 2 lezione 14

Informatica per le discipline umanistiche 2 lezione 14 Informatica per le discipline umanistiche 2 lezione 14 Torniamo ai concetti base dellʼinformatica. Abbiamo sinora affrontato diversi problemi: avere unʼidentità online, cercare pagine Web, commentare il

Dettagli

IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 1

IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 1 Ernesto Cappelletti (ErnestoCappelletti) IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 6 April 2012 1. Requisiti per la scrittura del software secondo la norma UNI EN ISO 13849-1:2008

Dettagli

e-dva - eni-depth Velocity Analysis

e-dva - eni-depth Velocity Analysis Lo scopo dell Analisi di Velocità di Migrazione (MVA) è quello di ottenere un modello della velocità nel sottosuolo che abbia dei tempi di riflessione compatibili con quelli osservati nei dati. Ciò significa

Dettagli

Identificazione dei Parametri Caratteristici di un Plasma Circolare Tramite Rete Neuronale

Identificazione dei Parametri Caratteristici di un Plasma Circolare Tramite Rete Neuronale Identificazione dei Parametri Caratteristici di un Plasma Circolare Tramite Rete euronale Descrizione Il presente lavoro, facente segiuto a quanto descritto precedentemente, ha il fine di: 1) introdurre

Dettagli

GUIDA ALLA RILEVANZA

GUIDA ALLA RILEVANZA GUIDA ALLA RILEVANZA Posizionamento per Rilevanza Suggerimenti per una migliore visibilità su ebay www.egolden.it Vers. 1.1 Questa guida puo essere ridistribuita con l obbligo di non modificarne contenuto

Dettagli

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi ControlloCosti Cubi OLAP I cubi OLAP Un Cubo (OLAP, acronimo di On-Line Analytical Processing) è una struttura per la memorizzazione e la gestione dei dati che permette di eseguire analisi in tempi rapidi,

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

La Progettazione Concettuale

La Progettazione Concettuale La Progettazione Concettuale Università degli Studi del Sannio Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica CorsodiBasidiDati Anno Accademico 2006/2007 docente: ing. Corrado Aaron Visaggio

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

PowerSchedo. Un sistema di supporto alla decisione nel settore dell'oil&gas. For further information: www.mbigroup.it

PowerSchedo. Un sistema di supporto alla decisione nel settore dell'oil&gas. For further information: www.mbigroup.it PowerSchedo Un sistema di supporto alla decisione nel settore dell'oil&gas For further information: Introduzione PowerSchedO è uno strumento software di supporto alle decisioni per problemi nel settore

Dettagli

Tecniche di riconoscimento statistico

Tecniche di riconoscimento statistico On AIR s.r.l. Tecniche di riconoscimento statistico Applicazioni alla lettura automatica di testi (OCR) Parte 4 Reti neurali per la classificazione Ennio Ottaviani On AIR srl ennio.ottaviani@onairweb.com

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

SPC e distribuzione normale con Access

SPC e distribuzione normale con Access SPC e distribuzione normale con Access In questo articolo esamineremo una applicazione Access per il calcolo e la rappresentazione grafica della distribuzione normale, collegata con tabelle di Clienti,

Dettagli

Generazione Automatica di Asserzioni da Modelli di Specifica

Generazione Automatica di Asserzioni da Modelli di Specifica UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore:

Dettagli

Pianificazione e progettazione

Pianificazione e progettazione Pianificazione e progettazione L analisi preventiva degli eventi e delle loro implicazioni rappresenta una necessità sempre più forte all interno di tutte le organizzazioni variamente complesse. L osservazione

Dettagli

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè

Dettagli

CORRENTE E TENSIONE ELETTRICA LA CORRENTE ELETTRICA

CORRENTE E TENSIONE ELETTRICA LA CORRENTE ELETTRICA CORRENTE E TENSIONE ELETTRICA La conoscenza delle grandezze elettriche fondamentali (corrente e tensione) è indispensabile per definire lo stato di un circuito elettrico. LA CORRENTE ELETTRICA DEFINIZIONE:

Dettagli

come nasce una ricerca

come nasce una ricerca PSICOLOGIA SOCIALE lez. 2 RICERCA SCIENTIFICA O SENSO COMUNE? Paola Magnano paola.magnano@unikore.it ricevimento: martedì ore 10-11 c/o Studio 16, piano -1 PSICOLOGIA SOCIALE COME SCIENZA EMPIRICA le sue

Dettagli

Laurea Specialistica in Informatica

Laurea Specialistica in Informatica Corso di Laurea in FISICA Laurea Specialistica in Informatica Fisica dell informazione 1 Elementi di Architettura degli elaboratori Prof. Luca Gammaitoni Informazioni sul corso: www.fisica.unipg unipg.it/gammaitoni/fisinfoit/gammaitoni/fisinfo

Dettagli

CAPACITÀ DI PROCESSO (PROCESS CAPABILITY)

CAPACITÀ DI PROCESSO (PROCESS CAPABILITY) CICLO DI LEZIONI per Progetto e Gestione della Qualità Facoltà di Ingegneria CAPACITÀ DI PROCESSO (PROCESS CAPABILITY) Carlo Noè Università Carlo Cattaneo e-mail: cnoe@liuc.it 1 CAPACITÀ DI PROCESSO Il

Dettagli

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe

Dettagli

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007 Sommario Macchine a stati finiti M. Favalli 5th June 27 4 Sommario () 5th June 27 / 35 () 5th June 27 2 / 35 4 Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Dettagli

Ufficio Scolastico Regionale per l Abruzzo. Rapporto dal Questionari Studenti

Ufficio Scolastico Regionale per l Abruzzo. Rapporto dal Questionari Studenti Rapporto dal Questionari Studenti SCUOLA xxxxxxxxx Anno Scolastico 2014/15 Le Aree Indagate Il questionario studenti ha lo scopo di indagare alcuni aspetti considerati rilevanti per assicurare il benessere

Dettagli

Sistemi Web! per il turismo! - lezione 3 -

Sistemi Web! per il turismo! - lezione 3 - Sistemi Web per il turismo - lezione 3 - I computer sono in grado di eseguire molte operazioni, e di risolvere un gran numero di problemi. E arrivato il momento di delineare esplicitamente il campo di

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

Ottimizzazione Multi Obiettivo

Ottimizzazione Multi Obiettivo Ottimizzazione Multi Obiettivo 1 Ottimizzazione Multi Obiettivo I problemi affrontati fino ad ora erano caratterizzati da una unica (e ben definita) funzione obiettivo. I problemi di ottimizzazione reali

Dettagli

Introduzione alla Virtualizzazione

Introduzione alla Virtualizzazione Introduzione alla Virtualizzazione Dott. Luca Tasquier E-mail: luca.tasquier@unina2.it Virtualizzazione - 1 La virtualizzazione è una tecnologia software che sta cambiando il metodo d utilizzo delle risorse

Dettagli

Comparatori. Comparatori di uguaglianza

Comparatori. Comparatori di uguaglianza Comparatori Scopo di un circuito comparatore é il confronto tra due codifiche binarie. Il confronto può essere effettuato per verificare l'uguaglianza oppure una relazione d'ordine del tipo "maggiore",

Dettagli

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo

Dettagli

FIRESHOP.NET. Gestione del taglia e colore. www.firesoft.it

FIRESHOP.NET. Gestione del taglia e colore. www.firesoft.it FIRESHOP.NET Gestione del taglia e colore www.firesoft.it Sommario SOMMARIO Introduzione... 3 Configurazione iniziale... 5 Gestione delle varianti... 6 Raggruppamento delle varianti... 8 Gestire le varianti

Dettagli

Complessità Computazionale

Complessità Computazionale Complessità Computazionale Analisi Algoritmi e pseudocodice Cosa significa analizzare un algoritmo Modello di calcolo Analisi del caso peggiore e del caso medio Esempio di algoritmo in pseudocodice INSERTION

Dettagli

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante: Sommario Macchine a stati finiti M. Favalli Engineering Department in Ferrara 4 Sommario (ENDIF) Analisiesintesideicircuitidigitali / 35 (ENDIF) Analisiesintesideicircuitidigitali 2 / 35 4 Le macchine

Dettagli

1 Serie di Taylor di una funzione

1 Serie di Taylor di una funzione Analisi Matematica 2 CORSO DI STUDI IN SMID CORSO DI ANALISI MATEMATICA 2 CAPITOLO 7 SERIE E POLINOMI DI TAYLOR Serie di Taylor di una funzione. Definizione di serie di Taylor Sia f(x) una funzione definita

Dettagli

ISTRUZIONI PER LA GESTIONE BUDGET

ISTRUZIONI PER LA GESTIONE BUDGET ISTRUZIONI PER LA GESTIONE BUDGET 1) OPERAZIONI PRELIMINARI PER LA GESTIONE BUDGET...1 2) INSERIMENTO E GESTIONE BUDGET PER LA PREVISIONE...4 3) STAMPA DIFFERENZE CAPITOLI/BUDGET.10 4) ANNULLAMENTO BUDGET

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

GESTIONE DELLE TECNOLOGIE AMBIENTALI PER SCARICHI INDUSTRIALI ED EMISSIONI NOCIVE LEZIONE 10. Angelo Bonomi

GESTIONE DELLE TECNOLOGIE AMBIENTALI PER SCARICHI INDUSTRIALI ED EMISSIONI NOCIVE LEZIONE 10. Angelo Bonomi GESTIONE DELLE TECNOLOGIE AMBIENTALI PER SCARICHI INDUSTRIALI ED EMISSIONI NOCIVE LEZIONE 10 Angelo Bonomi CONSIDERAZIONI SUL MONITORAGGIO Un monitoraggio ottimale dipende dalle considerazioni seguenti:

Dettagli

TECNICHE DI SIMULAZIONE

TECNICHE DI SIMULAZIONE TECNICHE DI SIMULAZIONE INTRODUZIONE Francesca Mazzia Dipartimento di Matematica Università di Bari a.a. 2004/2005 TECNICHE DI SIMULAZIONE p. 1 Introduzione alla simulazione Una simulazione è l imitazione

Dettagli

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014 Archivi e database Prof. Michele Batocchi A.S. 2013/2014 Introduzione L esigenza di archiviare (conservare documenti, immagini, ricordi, ecc.) è un attività senza tempo che è insita nell animo umano Primi

Dettagli

Calcolatori: Algebra Booleana e Reti Logiche

Calcolatori: Algebra Booleana e Reti Logiche Calcolatori: Algebra Booleana e Reti Logiche 1 Algebra Booleana e Variabili Logiche I fondamenti dell Algebra Booleana (o Algebra di Boole) furono delineati dal matematico George Boole, in un lavoro pubblicato

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli