- Laboratorio di Bionanotecnologie
Transcript
- Laboratorio di Bionanotecnologie
BIOINFORMATICA Gruppo di lavoro Bioinformatica Linee guida per la definizione di una strategia per lo sviluppo del settore della bioinformatica in Italia con particolare attenzione all’ambito biomedico Componenti la Commissione Maria Teresa ANNECCA Ufficio del Garante per la protezione dei dati personali Francesco BELTRAME Dipartimento di Bioingegneria, Universita’ degli Studi di Genova Giovanni BELTRAMI Chiron Vaccines Giovanni BRIGANTI Ministero degli Affari Esteri Fabrizio GAGLIARDI CERN Giovanni GIOVANNINI Osservatorio Tuttimedia, Media duemila Luciano MILANESI Istituto Tecnologie Biomediche, Consiglio Nazionale delle Ricerche Giovanni PAOLELLA CEINGE, Universita’ degli Studi di Napoli “Federico II” Anna Maria RAVIOLA Marconi, Selenia Communications Fabrizio RICCI Istituto di Ricerca sulla Popolazione e le Politiche Sociali, Consiglio Nazionale delle Ricerche Leonardo SANTI Comitato Nazionale Biosicurezza e Biotecnologie Lorenzo SILENGO Dipartimento di Biologia Universita’ degli Studi di Torino Anna TRAMONTANO Dipartimento di Scienze Biochimiche "Rossi Fanelli", Universita’ degli Studi di Roma "La Sapienza" Settimio VINTI Dipartimento Innovazione Tecnologica, Presidenza del Consiglio dei Ministri Con i recenti progressi nell’ambito biomedico, è diventato essenziale assicurare un supporto adeguato alle ricerche nell’ambito della medicina e delle scienze della vita. Infatti una caratteristica dell’era post-genomica dipenderà da nuove modalità di trattare l’enorme mole di dati generata quotidianamente al fine di correlare le informazioni genotipiche con quelle fenotipiche e cliniche. In questo ambito la Bioinformatica si occupa dell’acquisizione, memorizzazione, distribuzione, analisi e interpretazione dei dati prevalentemente nell’ambito della biologia molecolare, della genetica e della biochimica con collegamenti sempre più importanti con la medicina. Scopi della Bioinformatica sono quelli di fornire in tempi rapidi le informazioni e le metodologie d’indagine, che consentano ad esempio di fornire alla scienza medica le necessarie informazioni per comprendere i meccanismi alla base di tutte le possibili disfunzioni. In quest’ottica, i metodi e gli strumenti messi a disposizione dalla Bioinformatica giocano un ruolo fondamentale nello sviluppo delle biotecnologie. L’investimento di Stati Uniti, Canada, Giappone e Russia nella Bioinformatica è mirato soprattutto alla creazione di centri, reali o virtuali, che provvedano servizi e conoscenza alla comunità mentre, allo stesso tempo, spingono in nuove direzioni grazie ad attività di ricerca avanzate. Lo sviluppo di piccole e medie aziende con finalità bioinformatiche in Europa è, come ci si può aspettare, proporzionale all’investimento in ricerca dei vari Stati e quindi molto attivo in Inghilterra, Francia, Germania, in crescita in Spagna, Olanda e paesi nordici. L’Italia è ben collocata nel panorama europeo dal punto di vista scientifico, anche se le risorse limitate rispetto soprattutto a Germania e Regno Unito hanno finora reso difficile l’implementazione di progetti indipendenti a grande respiro e di risonanza internazionale. Oggi si è creata un’enorme attesa, soprattutto negli Stati Uniti, in Canada e in Giappone per un impatto economico crescente della bioinformatica. Stime conservative fanno assumere che la Bioinformatica solo negli Stati Uniti permetterà di generare almeno 7 miliardi di dollari nei prossimi tre anni e che il mercato crescerà del 20% entro il 2006. L’Italia per poter mantenere il passo in un settore altamente strategico deve prevedere misure di potenziamento della bioinformatica nel settore biotecnologico, biomedico e sanitario operando sui seguenti piani distinti: • la ricerca, • lo sviluppo dei sistemi, • l’infrastruttura operativa, • le applicazioni bioinformatiche nella clinica quotidiana, 1 BIOINFOSTAT • la formazione. L’obiettivo è quello di creare le condizioni per uno sviluppo omogeneo del settore della bioinformatica ed e’ quindi necessario che le azioni che si intraprendono su questi piani siano a ricaduta immediata. Introduzione La biologia e la medicina hanno da sempre cercato di studiare l’organismo umano a tutti i livelli sia morfologico e sia funzionale per il miglioramento della salute umana.. Con l’introduzione delle più moderne tecnologie di biologia molecolare si sono iniziati a comprendere meglio le regole d’espressione genetica ed i vari passaggi metabolici e sia la struttura del DNA, RNA e delle proteine. Questa enorme complesso d’informazioni, consentirà di comprendere il flusso delle informazioni che governano il passaggio dal Genoma al Fenotipo di un organismo. Un utilizzo appropriato di questi dati associate ad appositi programmi d’analisi, porterà nuove possibilità per la comprensione dell’espressione dei geni, la loro regolazione e le malattie genetiche a loro correlate in caso di mutazioni o disfunzioni metaboliche. La disciplina che si occupa di queste problematichemper trattamento dell’informazione biologica a tutti i livelli è la Bioinformatica. La Bioinformatica si occupa, quindi, dell’acquisizione, memorizzazione, distribuzione, analisi e interpretazione dei dati prevalentemente nell’ambito della biologia molecolare con collegamenti sempre più importanti con la medicina. Questa nuova disciplina scientifica utilizza metodi di matematica, informatica, biologia, medicina, fisica allo scopo di migliorare la comprensione dei fenomeni biologici. Di seguito, si elenca a titolo alcuni dei principali obiettivimella Bioinformatica: • Sviluppo di strumenti per la generazione ed il mantenimento dell’informazione proveniente alle varie fonti: mappa fisica, mappa genetica, mappa cromosomica, mappa citogenetica, olimorfismi, e l’informazione relativa alle sequenze genomiche e proteiche etc.; • Raccolta e organizzazione delle informazioni genetiche associate alle patologie mediche; • Sviluppo di programmi di calcolo per l'analisi delle sequenze; • Sviluppo d’interfacce grafiche in grado di visualizzare in maniera efficace l’informazione richiesta; • Sviluppo di metodi software che consentano di agevolare tutte le fasi dei progetti; • Sviluppo di strutture per database specializzate ed integrate; • Sviluppo di strumenti informatici, includendo software e hardware e algoritmi per l’organizzazione e l’analisi dei dati; • Realizzazione di standard per lo scambio e la descrizione dei dati; • Realizzazione di una rete dati per la raccolta la distribuzione e l’aggiornamento costante di tutta ’informazione prodotta; • Raccolta della bibliografia, brevetti e altri database di supporto all’informazione specifica; • Predizione dei geni nelle sequenze di DNA; • Predizione delle strutture tridimensionali delle proteine partendo dalle sequenze primarie; • Predizione delle funzioni biologiche e biofisiche sia dalle sequenze e sia dalle strutture; • Simulazione dei processi metabolici e cellulari basati su queste funzioni. • Relizzazioni di sistemi per la correlazione dell’informazione in sistemi biologici complessi. Da questo elenco risulta evidente che uno dei principali scopi della Bioinformatica è di fornire in tempi rapidi le informazioni e le metodologie d’indagine, che consentano ad esempio di fornire alla scienza medica le necessarie informazioni per comprendere i meccanismi alla base di tutte le possibili disfunzioni d’origine genetica. Dalle mutazioni in regioni funzionali del DNA, alla ancata produzione di una certa proteina a causa di un anomalo funzionamento dei fattori di trascrizione, fino a comprendere il funzionamento d’ogni singolo gene in relazione con gli altri geni nei diversi processi metabolici che continuamente avvengono nel corso dell’intera vita. L’industria farmaceutica utilizza queste informazioni e metodologie e conoscenze al fine di 2 BIOINFORMATICA produrre medicine, proteine specifiche e terapie geniche in grado di intervenire in maniera selettiva per risolvere le possibili cause di malattie. Inoltre la gran parte dei prodotti genici del genoma umano ha più di una funzione, in alcuni casi addirittura in antagonismo con altre. E’ per questo necessario identificare i modelli quantitativi che stanno alla base di questi processi. In quest’ottica i metodi e i programmi messi a disposizione dalla Bioinformatica giocano un ruolo fondamentale nello sviluppo delle biotecnologie. Stato dell’arte Cenni storici Già alla fine degli anni Settanta risultava chiaro che non ci poteva più affidare alla capacità dei singoli gruppi di ricerca per immagazzinare e organizzare i dati biologici e che occorreva uno sforzo informatico per sfruttarne le potenzialità. L’Europa coglie quest’occasione con grande tempismo e per prima: la banca dati dell’EMBL nasce nel 1980, mentre gli Stati Uniti dovranno attendere il 1986 per fondare il National Center for Biotechnology Information, depositario della banca dati GenBank. Negli anni immediatamente successivi, anche il primo Dipartimento di Ricerca in Bioinformatica, il Biocomputing Group dell’EMBL, nasce in Europa. Il programma di cui fanno parte Arthur Lesk, Chris Sander e Pat Argos sfocerà nel 1996 nella fondazione dell’EBI (European Bioinformatics Institute di Hinxton, Cambridge) che è oggi tra i punti di riferimento più importanti della bioinformatica mondiale, ma soprattutto addestra giovani ricercatori in questa nuova disciplina. Al Biocomputing dell’EMBL e ai gruppi di Bioinformatica strutturale di Cambridge, guidati, tra gli altri, da Sir Tom Blundell, Janet Thornton e Cyrus Chothia, devono il loro ingresso alla bioinformatica molti, se non tutti, i gruppi di riferimento europei. Le competenze dei gruppi pionieri di questa disciplina sono oggi affiancate da scuole più “informatiche” che le completano e rendono la bioinformatica un punto di forza della ricerca Europea che va assolutamente coltivata e incoraggiata. Situazione Internazionale L’investimento di Stati Uniti, Canada e Giappone nella Bioinformatica è mirato soprattutto alla creazione di centri, reali o virtuali, che provvedano servizi e conoscenza alla comunità mentre, allo stesso tempo, spingono in nuove direzioni grazie ad attività di ricerca avanzate.Gli Stati Uniti riconoscono che anche solo il mantenimento dei sistemi attualmente in uso richiede aumenti di investimenti. L’NCBI (National Center for Biotechnology Information) è un esempio eclatante, un incremento degli investimenti di circa il 10% annuo è necessario solo per mantenere l’attuale livello di servizi e ricerca. Il personale ad oggi impiegato presso l’NCBI è vicino alle 400 unità. Negli Stati Uniti soltanto, l’investimento economico nel settore della bioinformatica è valutato intorno ai 500 milioni di dollari all’anno (la metà circa di quello mondiale) di cui i due terzi sono delle grandi industrie farmaceutiche che si aspettano di ridurre i costi e i tempi di sviluppo di un farmaco di circa il 30% grazie alle tecniche bioinformatiche. Questo ha evidentemente aperto la strada ad un gran numero di società che forniscono software e servizi alle grandi industrie farmaceutiche, tra cui per esempio Accelerys, Applied Biosystems, DNAStar, Informax, Genamix, Rosetta (poi acquisita dalla Merck), ecc. Situazione Europea L’EBI European Bioinformatics Institute rimane oggi un punto focale della bioinformatica europea, ma gruppi di dimensioni e impatto notevole sono presenti in praticamente tutti i paesi dell’Unione. Il Regno Unito ha per esempio tenuto alto il suo livello negli aspetti strutturali, con gruppi di grande competenza e fama all’MRC di Cambridge, al King’s College e allo University College di Londra, affiancati da gruppi che si occupano di analisi genomiche non solo in Inghilterra ma anche in Scozia ed Irlanda. Alcuni dei più noti gruppi di ricerca hanno dato vita a vari spin-off (vedi Inpharamatica). Lo sviluppo della bioinformatica in Inghilterra avviene anche grazie al regolare interesse dell’agenzia di finanziamento Wellcome Trust 3 BIOINFOSTAT per la genomica che si traduce in sostanziali investimenti in bioinformatica ad esempio presso il Sanger Centre a Cambridge. La Germania sta dando vita ad un aggressivo programma di training con lauree di primo e secondo livello in Bioinformatica in varie città. Ad oggi sono stati attivati 34 nuovi cattedre universitari in Bioinformatica. Ci si aspetta che questo dia un grande impulso alla ricerca che, in questo paese, si sta concentrando sull’analisi genomica, sulla genomica funzionale e sulla biologia dei sistemi. Esistono Max Planck Institut e grandi dipartimenti interamente dedicati alla Bioinformatica, per esempio il Max Planck di Berlino, Monaco e il Centro di Bioinformatica di Saarbrueken. In Spagna vi sono alcuni gruppi estremamente interessanti, soprattutto all’interno del Consiglio Nazionale delle ricerche a Madrid e del Genome Informatics Research Laboratory di Barcellona, centro che si sta affermando come uno dei punti cardine per la ricerca e caratterizzazione dei geni umani per via bioinformatica. In Spagna è stato istituito un “Istituto Virtuale di Bioinformatica” che coinvolge la maggior parte dei gruppi spagnoli. L’Istituto, pur essendo virtuale dal punto di vista logistico, è organizzato con Dipartimenti, direttori, progetti, ecc. e rappresenta un interessante esempio di cooperazione nazionale strutturata e gestita managerialmente. Anche il Portogallo ha iniziato un programma educativo in Bioinformatica, ancora agli inizi ma che sta coinvolgendo docenti da tutta Europa. In Francia, presso l’Istituto Pasteur ed il CNRS, sono attivi diversi gruppi dedicati alla Bioinformatica. La Svizzera si è conquistata un posto centrale nel panorama bioinformatico grazie al SIB Swiss Institute for Bioinformatics, iniziatore della lodevole iniziativa della banca dati SwissProt, e che oggi è un partner essenziale dell’EBI nell’area della banche dati nell’area della proteomica. In Olanda, Svezia, Finlandia, Belgio operano gruppi di bioinformatica di ottimo livello scientifico, generalmente derivanti da quell’iniziale gruppo dell’EMBL di cui si è discusso precedentemente. Un discorso a parte merita la Danimarca che, avendo dato il via al “Centre for Biological Sequence Analysis”, è riuscita a conquistarsi un ruolo centrale nella bioinformatica europea partecipando alla maggior parte dei progetti di finanziamento comunitari nella disciplina, ancora una volta dimostrando l’importanza di una sinergia di sforzi coordinati. Va inoltre menzionato quanto sta accadendo nei paesi dell’est europeo (specialmente Polonia ma anche Lituania) il rientro di alcuni ricercatori formatisi negli Stati Uniti ha permesso di organizzare gruppi di ricerca che, nell’arco di qualche anno, sono già entrati a far parte dell’establishment scientifico in bioinformatica. Lo sviluppo di piccole e medie aziende con finalità bioinformatiche in Europa è, come ci si può aspettare, proporzionale all’investimento in ricerca dei vari Stati e quindi molto attivo in Inghilterra e in Germania, e in crescita in Spagna. L’Unione Europea con il Il VI PQ dell’UE, nella linea Scienze della Vita, Genomica e Biotecnologie per la Salute - Genomica Avanzata e sue Applicazione per la Salute, ha come obiettivo migliorare la comprensione e la decifrazione delle informazioni genomiche, individuandone la funzione, la struttura e la relazione con la salute umana. In tale ambito, uno dei risultati più attesi è creare gli strumenti informatici che permettano alla comunità medico-scientifica e al mondo industriale di analizzare e utilizzare i dati sui genomi per lo sviluppo di nuove terapie, medicinali e diagnosi sanitarie sempre più accurate. Ciò rientra in un orientamento generale, che parla oramai di strumenti necessari a supportare la cosiddetta medicina personalizzata (personalized healthcare). Pertanto l’Unione Europea sta attuando un programma di finanziamento della bioinformatica sia nel campo dello sviluppo di metodi (BioSapiens, IntAct, EMSD, ORIEL, EBIOSCIENCE, ecc. ), sia delle tecnologie di supporto (BIOINFOGRID, EMBRACE, EGEE), sia dell’applicazione della bionformatica all’area medica (INFOBIOMED, SYMBIOMATICS). Situazione Nazionale L’Italia è ben collocata nel panorama europeo dal punto di vista scientifico, anche se le risorse limitate rispetto soprattutto a Germania e Regno Unito hanno finora reso difficile l’implementazione di progetti indipendenti a grande respiro e di risonanza internazionale. 4 BIOINFORMATICA Poli molto attivi sia nella ricerca sia nello sviluppo in bioinformatica in Italia sono, per esempio, Napoli, Roma, Milano, Bologna, Genova, Bari, Palermo, Padova, Treno, Trieste e Cagliari. L’aspetto forse più interessante del panorama italiano è che esso copre un largo spettro di attività bioinformatiche, che vanno dall’analisi genomica alla genomica funzionale, dalla predizione di strutture tridimensionali, dall’assegnazione funzionale alla predizione di proprietà di prodotti genici, dai sistemi basati su GRID a metodi di intelligenza artificiale, etc. In altre parole, dal punto di vista delle competenze, la bioinformatica italiana costituisce un’opportunità forse unica per lo sviluppo di ricerca e tecnologia. Molti dei gruppi italiani sono coinvolti in iniziative internazionali di vasto respiro, come società internazionali, gruppi di lavoro, commissioni di valutazioni scientifiche, progetti europei, iniziative educative. Sarebbe impossibile elencarle tutte, e soprattutto difficile tenere traccia di tutte le attività in cui i bioinformatici italiani vengono coinvolti continuamente. Il MIUR ha investito negli ultimi tre anni risorse finanziarie per un valore complessivo di 32 Meuro destinate a iniziative scientifiche in ambito nazionale e internazionale strettamente connesse all’area “Bioinformatica”. Queste iniziative attualmente in corso possono essere così strutturate: • Realizzazione di due laboratori nazionali in Bioinformatica pubblico-privato (FIRB 20032004) ai quali sono collegate unità di ricerca dislocate in varie località italiane. Il finanziamento pubblico per queste iniziative programmate per un quinquennio d’attività è pari a 8, 404 Meuro. • Il MIUR, nell’ambito degli interventi CIPE per il Mezzogiorno ha destinato 10 Meuro per la realizzazione di Laboratori pubblico-privati. - Finanziamento di progetti di ricerca congiunti con centri e/o istituti di eccellenza di altri Paesi (USA, Canada, UK, India, Cina, Russia, Israele), con una previsione di finanziamento dell’ordine di 8 Meuro. • Realizzazione del laboratorio di Bioinformatica previsto dall’accordo tra MIUR, Ministro per l’Innovazione Tecnologica, Università degli Studi di Trento, Provincia di Trento e Microsoft. Per tale iniziativa si prevede un impegno finanziario del FIRB pari a circa 4 Meuro. Nonostante questo panorama interessante, le iniziative di trasferimento tecnologiche sono rimaste eccessivamente ristrette e non si è finora sfruttato appieno questo patrimonio per mancanza, a nostro parere, delle appropriate infrastrutture, di coordinazione e di adeguate risorse. Il patrimonio di conoscenze accumulato da questi gruppi di ricerca e i giovani ricercatori che sono impiegati e formati nei vari progetti, corre il rischio di essere completamente vanificato nel giro di poco tempo, in mancanza di un programma a medio lungo periodo. Le società che svolgono attività bioinformatiche in Italia sono infatti pochissime, fra cui: • SharDNA a Cagliari (che si occupa principalmente di genomica e quindi necessita di un supporto bioinformatica per la gestione e l’analisi dei dati provenienti dallo studio di popolazioni isolate). • ProteoGenBio a Pisa. • BioDec a Bologna. Alcune industrie e centri di eccellenza universitaria hanno poi sviluppato al loro interno delle competenze in Bioinformatica, tra queste la Chiron, l’IRBM (Laboratorio Merck in Italia), la Glaxo, centri di eccellenza di ricerca CNR, Università, CISI, e poche altre realtà. L’impatto economico prevedibile C’è un’enorme attesa, soprattutto negli Stati Uniti, in Canada, Giappone e Europa per un impatto economico crescente della bioinformatica, per esempio grazie all’individuazione di nuovi agenti terapeutici e farmacologici ci si aspetta che la bioinformatica sia in grado di aumentare il numero di bersagli terapeutici da circa 400 a circa 4000 nei prossimi vent’anni e quindi, già solo grazie a questo, ci si aspetta che i proventi dell’industria farmaceutica aumentino di un fattore mille. Stime conservative fanno assumere che la Bioinformatica solo negli Stati Uniti permetterà digenerare almeno 7 miliardi di dollari nei prossimi tre anni e che il mercato crescerà del 20% entro il 2009. E questa è solo una 5 BIOINFOSTAT della possibili applicazioni della bioinformatica che ci si aspetta abbia un impatto anche sullo sviluppo di vaccini, nuove biotecnologie, nanotecnologie, etc.. Gli investimenti industriale in bioinformatica saranno almeno triplicati entro il 2010, prevalentemente nel settore che cresce più velocemente, cioè quello del software di analisi e banche dati specializzate. Le necessità italiane nel campo della bioinformatica Il mondo della bioinformatica italiana ha le seguenti necessità: • rafforzare il collegamento dell’industria con il mondo della ricerca sia universitaria che degli Enti Pubblici di Ricerca come il CNR; • sviluppare nuove metodologie per la gestione delle biobanche fra loro integrate; • consentire un costante aggiornamento delle conoscenze in un settore altamente innovativo come quello della System Biology applicata all’analisi dei dati generati dalla Genomica e Proteomica di vari organismi; • stimolare la crescita di nuove imprese nel settore della Bioinformatica applicata al settore Biomedicale e Biotecnologico; • offrire una base strategica per agevolare la formazione interdisciplinare di nuovi profili, bioinformatici, biotecnologici e biomedici; • stimolare l’interazione e l’integrazione delle iniziative già finanziate con i laboratori pubblico-privati finanziati dal FIRB, FAR e dalle infrastrutture finanziate ad hoc per la Bioinformatica; • integrare le infrastrutture di calcolo adeguate alle esigenze che si stanno profilando nel campo della Biologia, delle Biotecnologie, della Genetica e della Medicina; • finanziare l’adesione dell’Italia a iniziative internazionali; • finanziare un progetto congiunto per l'accessibilità di banche dati bibliografiche di interesse internazionale; • favorire l’interazione dei laboratori pubblico-privati con iniziative per lo sviluppo delle applicazioni di GRID computing e calcolo avanzato nell’ambito Biomedico e ospedaliero in Italia; Per ottenere i precedenti obbiettivi il mondo della bioinformatica italiana ha necessità di reperire personale giovane con un’adeguata formazione scientifica. Si riscontra, infatti, un gap in biologia e informatica; la creazione di un percorso di studi che istruisca in entrambi gli aspetti darebbe una risposta concreta alle esigenze del comparto industriale. Le industrie operanti nel comparto delle biotecnologie hanno una forte dipendenza dalla ricerca e ed il settore della bioinformatica e l’informatica medica non fanno eccezione. Un importante vantaggio competitivo sarebbe rappresentato dalla possibilità di incrementare in maniera sostanziale le collaborazioni sia a livello di ricerca di base che applicata. Aree di interesse sono, ad esempio, la ricerca di nuovi sistemi ed algoritmi per l’identificazione funzionale di geni e proteine, l’adozione di tecniche e strumenti per l’estrazione automatica dell’informazione da basi di dati testuali quali ad esempio letteratura scientifica, classificazione automatica delle proteine, sviluppo di strumenti per la definizione/esecuzioni di esperimenti “in silico” e la gestione automatica di flussi di lavoro soprattutto in collegamento a sistemi di calcolo distribuiti. Pertanto l’industria ha necessità di luoghi dove imprese, laboratori universitari, istituzioni economiche e di ricerca operano a stretto contatto al fine di: • Sviluppare ricerca fondamentale e a carattere applicativo; • Mettere a punto nuove tecnologie, prodotti e processi; • Valorizzare i risultati della ricerca e trasferire tecnologie e innovazioni al mondo produttivo; • Creare reti di cooperazione nazionali e internazionali; • Sviluppare attività economiche e imprenditoriali ad alta intensità di conoscenza. • In parole povere, occorrono centri di eccellenza capillarmente distribuiti sul territorio con una serie di servizi (cataloghi del know-how e delle tecnologie pronte all’uso, panel di esperti e consulenti, seminari e workshop, etc.) per estendere e sviluppare i cosiddetti CLUSTER e Reti tematiche. 6 BIOINFORMATICA Il sempre maggior costo per lo sviluppo di nuovi farmaci e le barriere economiche all’accesso a tali prodotti per i paesi poveri stanno forzando la ricerca di nuove vie per risolvere questi problemi. Ad esempio, l’adozione dei concetti alla base della “Translational Medicine”, dove tutti i processi industriali di ricerca, sviluppo, test e produzione sono orientati al paziente/gruppo/etnia oggetto del prodotto, necessitano in sempre maggior misura della integrazione fra dati genomici, proteomici e le informazioni contenute nelle biobanche. Inoltre sviluppare ed adottare considerazioni etiche volte a minimizzare ed ottimizzare l’uso della sperimentazione sia sulla gestione dei dati sensibili nell’uomo e sia nell’utilizzo della sperimentazione animale. La presenza di infrastrutture operative di riferimento e l’adozione di standard internazionali sono fondamentali sia per la ricerca che per l’industria. Un ambiente di riferimento permette una pianificazione degli investimenti più precisa, facilita le collaborazioni sia tra industrie che con il mondo della ricerca accademica, assicura i necessari livelli di sicurezza nel trattamento ed accesso ai dati garantendo la sicurezza della Proprietà Intellettuale delle singole aziende. Infatti per mantenersi al livello presente non basta però più il lavoro di gruppi indipendenti: l’aumento enorme dei dati disponibili rende oggi essenziale la presenza di infrastrutture e, soprattutto di risorse che oggi sono più carenti in Europa rispetto agli Stati Uniti e al Giappone. L’industria ha necessità di reperire personale giovane con un’adeguata formazione scientifica. Si riscontra, infatti, un gap tra biologia ed informatica; la creazione di un percorso di studi che cumuli entrambi gli aspetti darebbe una risposta concreta alle esigenze del comparto industriale. Nell’ambito di una sanità “Informata e Formata” sulle specifiche ricerche di Bioinformatica e’ doveroso sensibilizzare i medici di medicina generale, biologi e altri operatori interessati alla materia, su argomenti che possano essere applicati alla pratica clinica. Da qui nasce la necessità di sviluppare un adeguato programma di formazione per gli operatori del Servizio Sanitario, che potrebbe essere collegata al sistema dell’ECM Educazione Continua in Medicina programma voluto dal Ministero della Salute. Le possibili linee d’intervento Al fine di potenziare il ruolo dell’informatica nelle biotecnologie della salute occorre operare sui seguenti piani distinti: • la ricerca, • lo sviluppo dei sistemi, • l’infrastruttura operativa, • le biotecnologie nella clinica quotidiana, • la formazione. L’obiettivo è quello di creare le condizioni per uno sviluppo omogeneo del settore della bioinformatica ed è quindi necessario che le azioni su questi piani siano quelle che abbiano una ricaduta immediata. Pertanto i temi prioritari riguardano: • Stabilire un’effettiva cooperazione pubblico-privato fra la comunità di ricercatori in ambito nazionale ed internazionale; • La ricerca vista sia come sviluppo di sistemi software per la biologia computazionale che come messa a punto di metodologie innovative per l’analisi e la ricerca di correlazioni tra i dati biologici. • Lo studio di applicazioni legate alle metodologie per la realizzazione delle biobanche. • La creazione di una infrastruttura per favorire la collaborazione e il coordinamento tra i vari centri. • Favorire la realizzazione di ricerche basate su accordi internazionali al fine di agevolare lo scambio di ricercatori (Research HUB), e la creazione di laboratori congiunti (Joint Research LAB); • Introdurre della Bioinformatica e le biotecnologie nella pratica clinica quotidiana. • La formazione estesa all’aggiornamento professionale. Va tenuto conto che le ricadute economiche di un investimento congruo nel comparto dovranno devono valutate in termini di profitti provenienti non solo dalla diretta 7 BIOINFOSTAT commercializzazione dell’invenzione, ma anche da una maglie posizionamento del sistema paese nel contesto internazionale. La ricerca in Bioinformatica E’ in atto una progressiva raccolta, organica, in basi di dati, di informazioni genetiche e mappature del Genoma Umano, prodotte dai tanti gruppi di ricerca che, in regime di autonomia, cooperano al progredire dell’analisi e dello sviluppo della Genomica. Obiettivo di tale raccolta è migliorare la comprensione e la decifrazione delle informazioni genomiche, individuandone la funzione, la struttura e la relazione con la salute umana. Pertanto si mira a creare strumenti informatici che permettano alla comunità medicoscientifica e al mondo industriale di: • analizzare e utilizzare i dati sui genomi per lo sviluppo di nuove terapie, medicinali e diagnosi sanitarie sempre più accurate; • raccogliere le informazioni al fine di analizzare e utilizzare i dati sui genomi per lo sviluppo di nuove terapie, medicinali e diagnosi sanitarie sempre più accurate. Sul piano della ricerca è necessario lo sviluppo di sistemi software per la Bioinformatica, diretti ad esempio: • alla modellizzazione della struttura tridimensionale a livello atomico delle molecole biologiche; • all’analisi, lo studio e la predizione dei modi di interazione delle molecole biologiche; • alla classificazione di dati basati su metodi di intelligenza artificiale quali le reti neurali, gli Hidden Markov Models, le Support Vector machines, etc. mirati all’assegnazione di funzione o di caratteristiche funzionali ai prodotti genici di interesse; • alla visualizzazione, l’analisi, il confronto e la ricerca in banche dati di interazioni tra molecole biologiche e di pathway metabolici; • alla correlazione dei dati di interazione con dati disponibili sulle basi genetiche di patologie complesse; • all’identificazione di elementi regolativi della trascrizione all'interno e nell'intorno di geni; • all’identificazione delle reti di regolazione genetica a partire da dati di espressione dalla conoscenza degli elementi regolativi. Questi algoritmi permetteranno di capire come i geni agiscono in maniera concertata e pertanto di ricostruire i pathway biologici in cui essi sono coinvolti e quindi capire la loro funzione. • all'identificazione di siti di legame di fattori di trascrizione ha lo scopo di fornire un insieme di strumenti flessibili per prelevare i dati da sorgenti multiple. • all’identificazione di reti di regolazione genetica. Una rete genetica può essere rappresentata matematicamente utilizzando equazione differenziali ordinarie i cui parametri sono incognite che bisogna stimare utilizzando i dati sperimentali quali profili di espressione genetica per identificare le interazioni tra geni. • all’interpretazione automatica di letteratura scientifica e di divulgazione delle più note riviste internazionali. • alla modellistica biomedica e all’apprendimento automatico nella systems biology. A tal fine pccorre impiegare metodologie innovative per la generazione di ipotesi su reti di regolazione genica e per lo studio e la simulazione di particolari processi cellulari. • allo sviluppo di metodi basati su modelli qualitativi e metodi probabilistici, in grado di tener conto di informazioni incerte e conoscenza imperfetta sul dominio allo studio. • allo sviluppo di sistemi informativi sanitari correlati a dati genetici. In questa attività verranno utilizzati ed adattati metodi ed approcci sviluppati nell’ambito dei sistemi nformativi sanitari per tener conto delle esigenze specifiche delle applicazioni che trattano dati genetici, genomici e di proteomica. • allo sviluppo di cartelle cliniche elettroniche orientate alla gestione ed all’integrazione dei dati clinici con dati genetici, di genomica funzionale e di proteomica. • alla progettazione di sistemi informativi per la conduzione di studi di caratterizzazione enetico-clinica • alla gestione di dati e database orientati agli aspetti di privacy e sicurezza informatica. • a costruire workflow per il design e lo sviluppo di applicazioni di supporto al lavoro collaborativi in bioinformatica. 8 BIOINFORMATICA • a sviluppare metodologie basate sul GRID computing e calcolo avanzato specifiche per la bioinformatica per fare fronte a calcoli di notevole complessità algoritmica. Lo sviluppo dei sistemi Oggi si è in presenza di una situazione dove il rapido avanzamento della ricerca e delle tcnologie applicate alla medicina ha portato ad un considerevole aumento di interesse verso le collezioni di materiali biologici umani. Le raccolte di campioni di tessuti e linee cellulari, da cui si ottengono acidi nucleici e proteine, sono definite biobanche e rappresentano un’importante fonte di risorse per la diagnosi e per la ricerca da quella di base fino alla sperimentazione di terapie per le malattie genetiche. Il successo delle ricerche per l’identificazione dei geni malattia, dei geni di suscettibilità e delle possibili applicazioni terapeutiche, compreso lo sviluppo di nuovi e specifici farmaci, si avvale della possibilità di disporre di campioni biologici di persone affette o portatrici o predisposte a patologie su base genetica, o che manifestano variabilità alla risposta dei farmaci. Il materiale biologico è diventato una risorsa molto preziosa e deve essere quindi favorito lo sviluppo e la organizzazione di tale attività e regolamentato l’utilizzo, il mantenimento e l’interazione tra varie biobanche. Queste collezioni sono numerose e di diversa entità ed è quasi impossibile quantificarle e avere informazioni sul loro stato di conservazione e sulla loro gestione. Pertanto di fronte al crescente aumento delle biobanche genetiche e degli interessi ad esse collegati, si ritiene necessario che in Italia si giunga rapidamente ad una regolamentazione per la loro istituzione ed utilizzo, e venga realizzato un censimento di quelle già esistenti. E’ da potenziare il coordinamento delle biobanche secondo le indicazioni fornite dall’OCSE, provvedendo alle autorizzazioni e alle certificazioni. Sul piano dello sviluppo dei sistemi occorre studiare: • Metodologie di progetto di una biobanca; • Linee guida per la progettazione di una biobanca, interoperabile con le altre biobanche; • Valutazione della qualita’ di una biobanca. Infatti, uno degli obiettivi perseguibili è la definizione del protocollo e delle modalità di popolamento delle biobanche e le specifiche per una progettazione orientata alla efficienza dell’utilizzo. Occorre difatti, grazie all’informatica, affrontare la multidisciplinarietà: • in modo da rappresentare tutte le numerose tipologie di dati per la definizione del profilo genomico di un individuo che richiede spesso l'analisi simultanea di molti geni e lo studio della loro attività in modo parallelo (e.g. nell'uomo numerosi geni possono avere decine o centinaia di mutazioni diverse responsabili della stessa malattia); • lo studio di queste mutazioni in parallelo sottolinea proprio la capacità di fornire informazioni su numerose alterazioni o stato di attività di geni nel medesimo istante. La tipologia dei dati deve permettere di modellare i seguenti dati: • sequenze di DNA; • SNP (Single Nuleotide Polymorphism), ovvero variazioni di singole basi di DNA (consentono di studiare a livello molecolare le differenze individuali tra individui e sviluppare profili genetici caratteristici per ogni persona o gruppi di persone); • annotazioni manuali o automatiche (e.g. SNPs ); • livelli di espressione genica, mappe proteomiche; • interazioni tra geni e proteine; • pathway metabolici; L’infrastruttura operativa Lo sviluppo tecnologico ha reso sempre più semplice e rapida la possibilità di sequenziale genomi di organismi viventi, dai più semplici come i virus a quelli più complessi come l’uomo. Nei prossimi anni sarà possibile ottenere sequenze genomiche in modo molto rapido e preciso. Questo fa nascere la necessità di definire i modi in cui memorizzare, trattare e sfruttare questa immensa quantità di dati. In analogia ad altri campi della scienza, come ad esempio la fisica delle particelle o l’astronomia, la genomica e le biotecnologie dovranno affrontare il problema del sovraccarico di informazione. Diventa 9 BIOINFOSTAT quindi essenziale la creazione di schemi logici e di modalità di scambio tra le molteplici entità per sviluppare le basi di dati appropriate. Il primo passo è necessariamente costituito dalla definizione della semantica dei dati, ossia la definizione del significato delle entità che definiscono il “dominio” sotto osservazione e le relazioni che le legano. La definizione delle modalità di scambio delle informazioni rappresentano il secondo passo, infatti è fondamentale poter trasferire l’informazione tra le varie entità che la trattano in maniera precisa e sicura. La crescita esponenziale della quantità di dati da trattare sta inoltre creando un problema di capacità di elaborazione. Saranno sempre di più necessari sistemi di calcolo potenti e veloci e quindi sarà sempre più indispensabile l’impiego di sistemi distribuiti capaci di mettere assieme le risorse necessarie ovunque si trovino nel mondo, il tutto in maniera semplice e sicura. Tutto questo potrà permettere, ad esempio lo studio delle ragioni alla base della diversa efficacia di un farmaco nei vari pazienti o di capire le basi genetiche di malattie molto importanti. Oppure sarà più semplice studiare il comportamento dei microrganismi e comprenderne a pieno la loro interazione le cellule. Altrettanto importante è l’osservanza e l’adesione agli standard internazionali già definiti o in via di definizione in modo da facilitare sempre più l’integrazione della bioinformatica italiana con il resto delle comunità scientifiche ed industriali. L’infrastruttura informatica La quantità di dati attualmente disponibile non è che una minima parte di quella che è lecito attendersi nel prossimo futuro. Questo pone un problema di capacità di elaborazione e di gestione non banale che implica necessariamente l’uso di sistemi distribuiti. Nel campo dell’infrastruttura informatica per il supporto di attività scientifiche che richiedono accesso a grosse potenze di calcolo ed a risorse geograficamente distribuite si parla sempre piu’ spesso della GRID. Questo termine e’ stato coniato in USA alla fine degli anni 90 [ref. The Grid a Blue print for a new computing infrastructure. Foster and Kesselman ed.] per analogiacon la rete di distribuzione elettrica che e’ un ottimo esempio di un infrastruttura pervasiva ed altamente distribuita che ha generato a suo tempo una rivoluzione nei metodi di produzione industriale e nella società. Per GRID s’intende un’infrastruttura informatica, formata da risorse di calcolo (in genere centri di calcolo di piccole, medie e grosse dimensioni), altre risorse di tipo vario, banche dati, strumenti scientifici (sensori, satelliti, acceleratori di particelle), sistemi di visualizzazione e strumenti per il supporto di lavoro condiviso come video conferenze e librerie digitali interconnesse da una rete di comunicazione ad alte prestazioni ed alta affidabilità come in effetti Internet sta sempre più diventando ed un software adeguato a creare con tutti questi elementi un centro di calcolo virtuale che dia l’impressione all’utente finale in fronte del suo calcolatore personale di avere accesso alle stesse facilità e risorse come se si trattasse di un centro locale. Le funzioni di questo software si possono riassumere ad un sistema di identificazione dell’utente che permetta un accesso a risorse distribuite senza il bisogno per l’utente di essere riconosciuto ed autorizzato in tutte le risorse remote. Dietro queste funzioni c’e’ un sistema molto complesso e distribuito implementato sempre piu’ spesso sotto forma di servizi Web (altra analogia con il Web) che permette di localizzare le risorse necessarie per l’elaborazione del programma richiesto, ottimizzare il carico dei vari sistemi di calcolo coinvolti ed assicurare il buon funzionamento di tutta l’infrastruttura di Grid. La bioinformatica ha molto in comune con altre scienze come la Fisica delle particelle elementari che hanno gia’ da qualche anno fatto ricorso ad un infrastruttura di Grid per il loro bisogni informatici. Gli elementi più importanti per consigliare l’adozione di questo approccio informatico sono i seguenti: grandi mole di dati distribuite geograficamente e non necessariamente di tipo ed accesso uniforme; possibilità di parallellizzare il calcolo e distribuirlo in unità di elaborazione indipendenti; esistenza di collaborazioni organizzate a livello internazionale. Innumerevoli esempi di progetti che prevedono o stanno gia’ utilizzando tecnologia di Grid per applicazioni di bioinformatica sono disponibili tramite organizzazioni come Healthgrid. Il progetto europeo di e-Infrastructure EGEE e BIOINFOGRID consentirà di supportare un notevole numero di applicazioni di biomedicina e bioinformatica. 10 BIOINFORMATICA Pertanto la bioinformatica è l’area dove le tecnologie Grid possono dare il maggiore contributo. L’obiettivo della bioinformatica è lo sviluppo ed il mantenimento di una infrastruttura per la conservazione, l’accesso, il trasferimento e la simulazione di processi ed informazioni biomediche; gli attuali sforzi di estesa computazione su dati biologici rientrano, quindi, negli propositi generali delle tecnologie Grid. L’infrastruttura concettuale Nei prossimi anni analizzando il corredo genetico di ogni individuo, si attendono passi in avanti nella ricerca sul perché alcuni si ammalano, altri sono suscettibili ad ammalarsi o a resistere a una infezione virale o batterica o, ancora, a reagire in un determinato modo a un preciso farmaco. Questo significa che i ricercatori sono chiamati a lavorare su un insieme vasto ed eterogeneo di dati disponibili in differenti basi di dati accessibili in rete. Tutto cio’ implica la possibilità di vedere tutti questi dati in un unico ambiente, sfruttando al massimo le possibilità offerte dall’interoperabilita’. I motivi sono tanti alla base dello sviluppo armonioso ed interoperabile delle basi di dati, legati principalmente all’esigenza sempre sentita: • da un lato di una normalizzazione concettuale e coerente di questi Repository (usare la stessa rappresentazione), • dall’altra di strumenti informatici pensati per consentire le indispensabili Modalità di Scambio e Cooperazione (parlare la stessa lingua). In tale situazione, è evidente la necessità di tool informatici in grado di: • incrociare efficacemente in una Cooperazione Integrata le principali caratteristiche genetiche, epidemiologiche, etniche e sociali per identificare i geni-malattia (unico strumento di raccolta dati), • attribuire a ciascuna sequenza genica uno score di Rischio Genomico Individuale (analisi statistiche). Questo implica enormi sforzi nell’integrazione di informazioni cliniche e genomiche distribuite a livello geografico. Inoltre lo sviluppo di vocabolari standard facilità la condivisione di dati e risorse. Sul piano di questa infrastruttura gli aspetti da studiare riguardano: • Il modello semantico dei processi associato ad analisi biomediche. • Il modello di standardizzazione delle biobanche. • Lo sviluppo dei sistemi informativi sanitari per tener conto delle esigenze specifiche delle applicazioni che trattano dati genetici, genomici e di proteomica. • Lo sviluppo di Cartelle cliniche elettroniche orientate alla gestione ed all’integrazione di dati clinici con dati genetici, di genomica funzionale e di proteomica. • Il progetto di sistemi informativi per la conduzione di studi di caratterizzazione genetico clinica di particolari sottopopolazioni, anche in riferimento agli aspetti di privacy e sicurezza informatica. • Utilizzo di sistemi formali di workflow per il design e lo sviluppo di applicazioni di supporto al lavoro collaborativi in bioinformatica. Semantica dei dati Il primo passo nello studio di un particolare dominio della conoscenza dovrebbe essere la definizione del significato stesso dei dati, delle entità che costituiscono il dominio in questione e delle relazioni che intercorrono tra esse. Questo consiste nella definizione di una “normalizzazione concettuale” delle banche dati, la definizione di ontologie che definiscano le entità (oggetti) e le relazioni tra esse basate su vocabolari condivisi e controllati, la definizione degli schemi delle basi dati derivati dagli schemi concettuali che rappresentano il dominio in esame. Il risultato di questo lavoro di definizione semantica è la possibilità di definire in maniera chiara e precisa il significato degli oggetti e dei dati che rappresentano l’informazione eliminando alla base gli errori dovuti alla loro sbagliata interpretazione ovvero ad una rappresentazione incoerente tra le varie basi dati. In questo ambito dovranno essere definiti gli standard di 11 BIOINFOSTAT rappresentazione dei dati utilizzando il linguaggio di marcatura XML e sulla base di questo gli standard di descrizione dei dati quali BSML, MAGE-ML, ecc. Protocolli di scambio informazioni La definizione dei metodi di scambio dell’informazione e di collaborazione tra diversi soggetti rappresenta il secondo passo fondamentale. E’ necessaria la definizione di protocolli di comunicazione che permettano la trasmissione dei dati in maniera definita e sicura. Sulla base di questi protocolli sarà quindi possibile definire servizi aggiuntivi quali ad esempio la sincronizzazione delle basi dati, la creazione di indici comuni delle basi dati disponibili e la loro ricerca, la pubblicazione delle caratteristiche delle singole basi dati e le modalità di accesso ed utilizzo, ecc. Tutti questi servizi devono avere il preciso obiettivo di facilitare la collaborazione e l’integrazione sia tra le basi dati che tra i soggetti che vi operano. Un’analogia nel mondoinformatico che ben si adatta a questo aspetto è rappresentata dall’utilizzo dei “Web Services”. Basandosi su un protocollo di comunicazione ben definito come l’HTTP, alla base del World Wide Web, sono state definite le modalità di pubblicazione, indicizzazione, ricerca, accesso ed utilizzo di servizi disponibili sulla rete Internet. Nell’ambito dello sviluppo di standard in bioinformatica, si stanno perseguendo i seguenti obbiettivi: • Creare un Domain Information Model (concetti, vocabolari, tipi di dato, etc.) per il dominio Clinical-Genomics; • Derivare un R-MIM (modello concettuale informativo da cui costruire lo schema fisico del database della biobanca), ovvero un modello dal RIM (Reference Information Model) di HL7, un meta-modello astratto per rappresentare la semantica delle informazioni sanitarie; • Specificare le tipologie di messaggi ed i documenti Clinical-Genomic (HL7 CDA di livello 3) per lo scambio e la condivisione di informazioni genetiche tra centri di ricerca; • Rivisitare/utilizzare i seguenti standard emergenti in bio-informatica (XML) BSML (Bioinformatic Sequence Markup Language), MAGE-ML (Microarray and GeneExpression Markup Language). L’adozione di tali metodologie consentirà una migliore integrazione fra i dati bioinformatici e i modelli adottati per scopi ospedalieri (dati medici, clinici, amministrativi, etc.); Bibliografia R. Maceratini, F.L. Ricci. Il Medico On-Line – Manuale di Informatica Medica. Verduci Editore, Roma, 2000. F. Martin-Sanchez, V. Maojo e G. Lopez-Campos - 2002 “Integrating Genomics into Health Information Systems”, Methods of Information in Medicine. Progetto europeo di e-Infrastructure EGEE disponiile su www.eu-egee.org. L:M: Arthur. Introduzione alla Bioinformatica . Mcgraw-Hill Italia, 2004 12 BIOINFORMATICA CALCOLATORI LINGUAGGIO L’obiettivo ambizioso eppure caratteristico della scienza, formulato dall’uomo occidentale sin dagli albori del pensiero scientifico, è di arrivare al massimo grado di conoscenza possibile dell’oggetto investigato e delle relazioni di causa ed effetto di questo con la realtà (Wittgenstein). I fondamenti della ricerca scientifica hanno come già visto nell’introduzione come base la logica. La logica ha avuto origine nella antica Grecia dallo studio dei filosofi e matematici, i principi logici che collegano la scrittura sintattica delle frasi con la loro verità e falsità possono essere ampliamente trovati in Platone (428348 a.C.). Il primo studio sistematico della logica è noto come il trattato di Organon, scritto dagli allievi di Aristotele. La scuola di Megera e quella stoica pongono le basi per lo studio sistematico delle implicazioni, mentre lo studio di un linguaggio formale artificiale basato sulla notazione matematica per chiarire le relazioni logiche e ridurre l’inferenza logica ad un processo meccanico e formale si deve a Leibnz nel 1600-1700. Solo con Boole nella metà dell’ottocento si ha un sistema logico ragionevolmente completo; il sistema includeva le parti principali della logica aristotelica ed un sistema analogo alla logica proposizionale moderna. Le tavole della verità come metodo per la verifica della validità delle formule nel linguaggio proposizionale sono state introdotte simultaneamente ed indipendentemente da Wittgenstein (1922) e da Emil Post (1921). Nel 1982 Quine descrive un metodo per l’analisi dei valori della verità che è molto efficiente basato su alberi di decisione. La base di conoscenza o KB (Knowledge Base) è un insieme di rappresentazioni del mondo, ogni singola rappresentazione è denominata come formula, le formule a loro volta sono espresse in un linguaggio denominato linguaggio di rappresentazione della conoscenza. Il linguaggio viene definito in un dizionario come "l'insieme di parole e metodi di combinazione di parole usate e comprese da una comunità di persone". L’oggetto della rappresentazione della conoscenza è l’espressione della conoscenza espressa in forma trattabile automaticamente. Alla base di tutta l’informatica vi sono due concetti fondamentali, che risultano strettamente interconnessi tra loro: quello di automa e quello di linguaggio. Il concetto di automa può essere introdotto come segue: per automa si intende un dispositivo che stabilisce una precisa relazione tra un dato di ingresso e un dato di uscita, soddisfacendo ai seguenti vincoli di realizzabilità fisica: se l'automa è fatto di parti, queste sono in numero finito; l'ingresso e l'uscita sono denotabili attraverso un insieme finito di simboli. L'automa potrebbe essere realizzato da un insieme di dispositivi elettronici digitali, oppure da dispositivi meccanici o biologici. L'obiettivo è di astrarre dai singoli, specifici casi concreti enucleando le caratteristiche ritenute essenziali. Il risultato di questo processo di astrazione consiste nella definizione di opportuni modelli matematici, cioè di sistemi formali che definiscono di fatto il concetto stesso di computabilità, cioè costituiscono l'ossatura portante della teoria della computabilità. 13 BIOINFOSTAT Tra i più noti di questi sistemi formali vi è una gerarchia di macchine astratte (la gerarchia caratterizza la capacità di risolvere classi diverse di problemi) che parte dagli automi a stati finiti e termina alla macchina di Turing. Questo tipo di sistemi formali cattura il concetto di "macchina" intesa come un dispositivo che dispone di un proprio stato interno utilizzabile come memoria e caratterizzato da un insieme di mosse elementari. Altri formalismi partono invece da concetti completamente diversi. Ad esempio, l'approccio funzionale di Hilbert, Church, Kleene è fondato sul concetto di funzione matematica e ha come obiettivo caratterizzare il concetto di funzione computabile. I sistemi di produzione di Thue, Post, Markov partono invece dall'idea di automa come insieme di regole di riscrittura (dette anche produzioni o regole di inferenza) che trasformano frasi (insiemi di simboli) in altre frasi. I diversi formalismi si differenziano invece radicalmente per il modo con cui giungono ad esprimere la soluzione ad un problema. Verso la fine degli anni 30, Claude Shannon dimostrò che utilizzando un circuito elettrico dotato di un interruttore era possibile definire le condizioni VERO per il circuito aperto e FALSO per circuito chiuso. Era possibile dunque effettuare delle operazioni logiche associando il numero 1 a vero e il numero 0 a FALSO. Questo linguaggio venne chiamato linguaggio BINARIO. Il linguaggio binario è dunque il linguaggio che consente il funzionamento dei computer. Il bit significa binary digit, vale a dire 0 o 1. Quindi la più piccola unità informativa manipolabile. Possiamo associare sempre o quasi sempre le informazioni ad un codice binario ad esempio per la nascita di un vitello, possiamo associare 0 se nasce maschio, 1 se nasce femmina. Con un solo bit possiamo avere sia 1 che 0. Con due bit possiamo avere una combinazione di (2*2). Con tre bit 3 bits possiamo avere otto situazioni differenti (2*2*2). Un ottetto è una unità di informazione composta da 8 bits, e permette di rappresentare caratteri, intesi come numeri o lettere. Quando nacquero gli elaboratori, l'unico modo di far comprendere loro un programma era quello di specificarlo nel loro stesso linguaggio, cioè il "linguaggio macchina": un linguaggio fatto solo di bit e di byte, in cui ogni operazione aveva un codice binario di identificazione e in cui ogni quantità, numerica o alfabetica, doveva essere caratterizzata dall'indirizzo dei byte di memoria centrale che la contenevano. Questo rendeva la programmazione un lavoro da specialisti. Il linguaggio macchina è il linguaggio programmativo della 1a generazione. Ben presto si passò ai linguaggi della 2a generazione, cioè ai cosiddetti "linguaggi simbolici". Ai byte si sostituirono dei codici convenzionali, diversi a seconda del ruolo svolto: ad esempio se il byte {01010101} denotava la somma, esso si indicò con il codice ADD, facile da ricordare. I linguaggi 14 BIOINFORMATICA simbolici snellirono di molto la programmazione ed in effetti sono talvolta usati ancora oggi; di solito sono detti "linguaggi assemblatori" ed essendo analoghi al linguaggio macchina permettono una programmazione particolarmente efficiente. Anche questi linguaggi sono comunque linguaggi da specialisti mentre gli elaboratori avevano sempre più l'esigenza di rivolgersi anche a persone non specialiste del settore. Si arrivò così ai linguaggi della terza generazione, detti "linguaggi algebrici", che possono essere utilizzati anche da persone senza una profonda conoscenza dell'informatica. Il nome di questi linguaggi deriva dal fatto che in essi è possibile scrivere un'espressione quasi come si scrive in algebra e che l'elaboratore è in grado di riconoscere e tradurre nel proprio linguaggio macchina. Rappresentazione, ragionamento e logica. L’obiettivo ambizioso eppure caratteristico della scienza, formulato dall’uomo occidentale sin dagli albori del pensiero scientifico, è di arrivare al massimo grado di conoscenza possibile dell’oggetto investigato e delle relazioni di causa ed effetto di questo con la realtà (Wittgenstein). La logica ha avuto origine nella antica Grecia dallo studio dei filosofi e matematici, i principi logici che collegano la scrittura sintattica delle frasi con la loro verità e falsità possono essere ampliamente trovati in Platone (428-348 a.C.). Il primo studio sistematico della logica è noto come il trattato di Organon, scritto dagli allievi di Aristotele. La scuola di Megera e quella stoica pongono le basi per lo studio sistematico delle implicazioni, mentre lo studio di un linguaggio formale artificiale basato sulla notazione matematica per chiarire le relazioni logiche e ridurre l’inferenza logica ad un processo meccanico e formale si deve a Leibniz. Solo con Boole nella metà dell’ottocento si ha un Aristotele Leibniz sistema logico ragionevolmente completo; il sistema includeva le parti principali della logica aristotelica ed un sistema analogo alla logica proposizionale moderna. Le tavole della verità come metodo per la verifica della validità delle formule nel linguaggio proposizionale sono state introdotte simultaneamente ed indipendentemente da Wittgenstein (1922) e da Emil Post (1921). Nel 1982 Quine descrive un metodo per l’analisi dei valori della verità che risulta molto efficiente basato su alberi di decisione. La base di conoscenza o KB (Knowledge Base) è un insieme di rappresentazioni del mondo, ogni singola rappresentazione viene denominata formula, le formule a loro volta sono espresse in un linguaggio denominato linguaggio di rappresentazione della conoscenza. L’oggetto della rappresentazione della conoscenza è l’espressione della conoscenza espressa in forma trattabile automaticamente. Un linguaggio di rappresentazione della conoscenza è definito da due aspetti: • La sintassi del linguaggio che descrive le possibili configurazioni che costituiscono le formule. Di solito rappresentiamo la sintassi in termini di formule per la carta stampata, in realtà la vera rappresentazione è all’interno di un computer: ogni formula è implementata da una configurazione fisica. • La semantica determina le realtà del mondo a cui si riferiscono le formule. Con la semantica ogni formula asserisce qualcosa al mondo. Ogni linguaggio, così come ogni lingua umana, è formato da parole che devono essere messe insieme secondo determinate regole (sintassi) al fine di ottenere un significato 15 purtroppo per la maggior parte "Più è facile, meglio è", dovrebbe essere il motto. Mentre degli hackers, (intesi come smanettoni), vale sempre il pensiero che "più è difficile e più mi diverto". Formattati: Elenchi numerati BIOINFOSTAT (semantica). Disporre le parole rispettando una regola non è sufficiente per dare loro un significato: regola: soggetto + verbo + complemento es. 1: Il mio cane corre sul prato (sintassi corretta, significato valido) es. 2: Il tuo gatto salta sulla macchina (sintassi corretta, significato valido) es. 3: Il fiume beve sul mio cane (sintassi corretta ma priva di significato) es. 4: Il prato corre nella mia macchina (sintassi corretta ma priva di significato) In ambito più strettamente linguistico si intende per significato il contenuto semantico o senso di un segno linguistico. Il termine semantica (che indicava anticamente, in medicina, la scienza che valuta i sintomi delle malattie) fu introdotto da Locke in filosofia per indicare lo studio dei segni linguistici. Morris (1938 e 1946) ha introdotto la distinzione in: sintattica che studia le relazioni dei segni tra di loro; semantica, che studia le relazioni dei segni con gli oggetti cui sono applicabili. Le regole per la costruzione delle frasi di un linguaggio sono espresse come produzioni di un sistema formale denominato grammatica. Le regole grammaticali descrivono solo come sono fatte le frasi di un linguaggio, cioè la sintassi, e di norma non descrivono il significato delle frasi. Le regole grammaticali devono essere concepite in modo da garantire la decidibilità del linguaggio. Questo problema, essenziale per poter costruire traduttori ed interpreti, è oggi risolto attraverso l'uso di grammatiche generative libere da contesto. Per comprendere il significato di questa espressione, occorre caratterizzare formalmente il concetto di linguaggio ed introdurre la classificazione delle grammatiche data da Chomsky. Per quanto riguarda la caratterizzazione della semantica di un linguaggio di programmazione, il metodo che viene spontaneo alla mente è quello operazionale. Visto che un linguaggio di programmazione serve per descrivere azioni eseguibili da una macchina, la semantica del linguaggio può venire definita mostrando come si comporta un automa prescelto in corrispondenza di ogni classe di frasi del linguaggio. Ma le azioni dell'automa devono venire espresse a loro volta in modo formale, usando un linguaggio. Dunque come stabilire la semantica del linguaggio con cui descriviamo l'automa? Per evitare un regresso all'infinito si deve assumere un livello di formalizzazione primitivo il cui significato è lasciato all'accordo "intuitivo" (ammesso che ciò sia possibile) tra chi legge e chi scrive, facilitato dalla semplicità delle mosse dell'automa prescelto. L'approccio operazionale è tuttavia da molti criticato in quanto troppo di "basso livello", poiché consente di pervenire alla comprensione di un costrutto linguistico solo dopo una analisi spesso assai dettagliata e complicata. Molti preferiscono definire il significato di un costrutto stabilendo una funzione di interpretazione che associ a quel costrutto una funzione matematica che denota una specifica relazione ingresso-uscita. Questo approccio, detto denotazionale, consente di caratterizzare la semantica con un maggior livello di astrazione rispetto all'approccio operazionale in quanto astrae dalla nozione di stato. Una prospettiva ancora diversa è quella che imposta la semantica Chomsky di un linguaggio in termini di una teoria dei programmi scritti in quel linguaggio. Questo approccio, detto assiomatico, eleva ancora più il livello di astrazione in quanto si prefigge di costruire una teoria matematica per quel linguaggio, cioè un sistema formale nel quale è possibile esprimere fatti interessanti intorno ai programmi e dimostrarne o confutarne formalmente la verità. Il metodo assiomatico risulta particolarmente attraente dal punto di vista dell'ingegneria del software in quanto il 16 BIOINFORMATICA programmatore non è tanto interessato ad avere un modello formale dei programmi che scrive, quanto a ragionare sui programmi e provarne proprietà. Un modo più tecnico per definire il concetto di linguaggio è introdurre un insieme di simboli (detto alfabeto) e dire che "un linguaggio è un particolare insieme di frasi formate dai simboli dell’alfabeto". Questa definizione sembra chiara, se non altro perché fa riferimento al concetto matematico di insieme. Tuttavia questa definizione contiene in sé un problema. Come si fa a descrivere un insieme? Se questo insieme è finito, la risposta è semplice: per denotare l'insieme basta scrivere (in modo più o meno ordinato) le frasi che lo compongono. Ma se il nostro intento è definire un linguaggio con un numero infinito di frasi, allora come si fa ad esprimere l'insieme in modo finito e non ambiguo?. Poiché stiamo già usando un linguaggio (l'italiano) possiamo pensare di usare il linguaggio naturale. Ad esempio, detto A l'insieme {0,1}, diciamo che L1 è il linguaggio le cui frasi sono formate da n simboli 0 seguiti da n simboli 1, con n che denota un qualunque numero intero positivo. In base a questa definizione, sono frasi di L1: 0011, 01, 000111 non appartengono a L1: 011, cane, a+b, etc. Ma questo modo di procedere si scontra subito con l'ambiguità tipica dei linguaggi naturali, che può facilmente portare a definizioni a prima vista chiare, ma a una lettura più attenta non complete o addirittura contraddittorie. Per ottenere definizioni non ambigue, occorre definire un dispositivo, un automa capace di produrre in modo sistematico e determinato le frasi del linguaggio. Certo questa "macchina" non potrà essere un dispositivo fisico, ma solo qualcosa di ancora puramente simbolico. Sarà dunque un altro linguaggio. Ma così facendo, sembra di cadere in un ciclo senza fine: per definire un linguaggio abbiamo bisogno di un linguaggio. Per evitare un regresso all'infinito si deve assumere un livello di formalizzazione primitivo il cui significato è lasciato all'accordo "intuitivo" tra chi legge e chi scrive, facilitato dalla semplicità delle mosse dell'automa prescelto. Un modo per definire un automa generatore delle frasi di un linguaggio è introdurre un insieme di regole "immediatamente comprensibili" a un lettore umano per comporre tra loro i simboli appartenenti ad un insieme finito prefissato detto alfabeto. L’esistenza di regole di generazione permette di dare risposta alla domanda:quali sono le frasi lecite di un linguaggio? Le frasi lecite di un linguaggio sono tutte e sole quelle frasi che possono essere prodotte usando le regole di generazione stabilite. Ma dare risposta a questa domanda non basta.Occorre anche rispondere a questi altri due quesiti: data una frase è possibile stabilire se essa appartiene a un linguaggio? come stabilire il significato di una frase? Uno dei risultati della teoria della computabilità è che un insieme è riconoscibile se e solo se sia per esso sia per il suo complemento esiste un automa generatore. Tecnicamente, un insieme (infinito) i cui elementi sono generabili da un automa si dice ricorsivamente enumerabile (r.e.). Quando anche il complemento di un insieme r.e. è r.e., allora l'insieme si dice ricorsivo. Un insieme ricorsivo è dunque decidibile, cioè esiste un automa che, data una qualunque frase, può dare in un tempo finito risposta "si" se la frase appartiene al linguaggio oppure risposta "no" se non vi appartiene. La descrizione dei linguaggi viene effettuata introducendo sistemi formali diversi per la descrizione della struttura superficiale delle frasi (sintassi) e per la descrizione del significato di una frase (semantica). 17 BIOINFOSTAT Ad esempio la sintassi del linguaggio delle espressioni aritmetiche dice che x e y sono espressioni che denotano numeri, quindi se x ≥ y è una formula sui numeri. La semantica dice che x ≥ y è falso quando y è maggiore di x, altrimenti è vero. Rappresentazione FRASI FRASE Deriva Mondo FATTI Segue FATTO Se la semantica e la sintassi sono definite con precisione possiamo derivare un meccanismo di inferenza. La connessione fra formule e fatti è fornita dalla semantica del linguaggio. La proprietà che un fatto segue altri fatti è rispecchiata dalla proprietà di una formula di essere derivata da un’altra formula. L’inferenza logica genera nuove formule che sono derivate da formule esistenti. A noi in generale interessa generare nuove formule che siano necessariamente vere, nel caso in cui le vecchie formule siano vere; questa relazione viene chiamata implicazione. Il termine di ragionamento ed inferenza sono solitamente sinonimi se usati per descrivere un procedimento che porta al raggiungimento di conclusioni. L’inferenza logica è quindi un processo che realizza la relazione di implicazione fra formule. Una formula è valida o necessariamente vera se e solo se è vera secondo tutte le possibili interpretazioni in tutti i mondi possibili. C’è un muro davanti a me e non c’è un muro davanti a me“ è una formula insoddisfacibile. Un sistema formale di logica per la descrizione di cose consiste quindi in: • sintassi • semantica • una teoria della dimostrazione. Formattati: Elenchi numerati Esistono due tipi di logica • logica proposizionale o logica booleana • logica del primo ordine. Formattati: Elenchi numerati Nella logica proposizionale i simboli rappresentano intere proposizioni e le proposizioni possono essere combinate usando i connettivi booleani. La logica di primo ordine affida la rappresentazione dei mondi in termini di oggetti e predicati su oggetti, cioè proprietà degli oggetti o relazione tra oggetti. Si utilizzano connettivi e quantificatori che consentono di scrivere in una unica formula asserzioni riguardanti tutti gli elementi dell’universo. Dobbiamo ora considerare le logiche alla luce delle assunzioni che possono essere ontologiche o epistemologiche. Le assunzioni ontologiche hanno a che fare con la natura della realtà. I fatti della natura possono essere VERO o FALSO. 18 BIOINFORMATICA La logica del primo ordine assume che il mondo consiste di oggetti con certe relazioni tra loro che possono essere vere o false. Logiche speciali assumono assunzioni logiche superiori, ad esempio la logica temporale considera che il mondo sia ordinato da un insieme di punti di tempo. L’assunzione epistemologica tratta i possibili stati della conoscenza, i sistemi che usano la teoria della probabilità possono avere gradi di credenza che possono variare da 0 (credenza nulla) a 1 (certezza). I sistemi basati sulla logica fuzzy possono avere gradi di credenza secondo gradi di verità. Un fatto non deve essere vero o falso, ma può essere vero fino ad un certo grado. Ad esempio l’affermazione “La Juventus è una grande squadra” può essere vera con un certo grado di verità. Linguaggi formali e assunzioni ontologiche ed epistemologiche LINGUAGGIO Assunzioni Ontologiche Assunzioni Epistemologiche Logica preposizionale Fatti vero/falso/ignoto Logica del primo ordine Fatti, oggetti, relazioni vero/falso/ignoto Logica temporale Fatti, oggetti, relazioni, tempo vero/falso/ignoto Teoria della probabilità Fatti gradi di credenza (0….1) Logica fuzzy Gradi di verità gradi di credenza (0….1) LA LOGICA PROPOSIZIONALE. La sintassi della logica è molto semplice in quanto utilizza le costanti logiche, vero-falso, i simboli preposizionali P e Q e i connettivi logici. Tutte le formule sono costruite utilizzando i simboli secondo alcune regole Le costanti logiche Vero o Falso sono formule Un simbolo preposizionale come P o Q è una formula Mettere delle parentesi determina una formula Una formula può essere ottenuta combinando formule semplici con i connettivi logici. • ∧ (and). Una frase in cui il connettivo principale è ∧ (P∧ ∧Q) è chiamata congiunzione • ∨ (or). Una formula che usa ∨, A ∨ (P∧ ∧Q) è una disgiunzione dei disgiunti (il simbolo ∨ deriva dal latino vel che significa o). • ⇒ (implica). Una formula come (P∧ ∧Q) (P∧ ∧Q) rappresenta conclusione. • ⇔ la premessa o (equivalenza). La formula (P∧ ∧Q) ⇒R è chiamata implicazione. La parte antecedente, mentre R costituisce la ⇔ (Q∧∧P) è una equivalenza chiamata anche bicondizionale. • ¬ (not). Una formula come ¬ P è chiamata negazione. La logica preposizionale ha una ontologia molto limitata, con il solo vincolo che il mondo sia costituito da fatti. La semantica nella logica preposizionale è molto semplice quando tratta le costanti logiche; la formula vero, ha sempre come interpretazione un fatto vero. Una formula 19 Formattati: Elenchi numerati BIOINFOSTAT complessa ha un significato derivato delle sue parti. La somma è una funzione che prende due numeri come interi e restituisce un numero, anche il termine and è una funzione che prende due valori di verità e restituisce un valore di verità. Date due proposizioni P e Q, si può creare una tabella della verità con i connettivi logici. P Q ¬P P∧Q P∨Q P ⇒Q P ⇔Q Falso Falso V F F V V Falso Vero V F V V F Vero Falso F F V F F Vero Vero F V V V V Le tavole della verità definiscono la semantica delle formule come Vero ∧ Falso. Il connettivo di implicazione è il più importante, ma anche il più complicato in quanto possono presentarsi casi lontani dalla nostra intuizione. In molti casi la logica preposizionale non necessita di alcuna relazione per la rilevanza tra P e Q. Ad esempio la frase “5 è dispari implica Parigi è una capitale” è un poco strana, ma corretta. Una confusione inoltre deriva dal fatto che qualsiasi implicazione è vera quando il suo antecedente è falso. Ad esempio posso avere “5 è pari (Falso) ⇒ Giovanni è stupido” (vero). In realtà dovrei dire P ⇒ Q se P è vero, allora Q è vero, altrimenti non sostengo nulla. Qualsiasi mondo in cui una formula sia vera secondo una particolare interpretazione è chiamato modello. Infatti potremo definire il significato di una formula in termini di un insieme di operazioni su un insieme di modelli. Ad esempio l’insieme dei modelli P∧Q è l’intersezione dei modelli P e dei modelli di Q. Le grammatiche. Il mondo è costituito da oggetti, cioè identità individuali con proprietà e relazioni, se le relazioni sono tali per cui esiste un solo ingresso si parla di funzioni. Un linguaggio formale è definito come un insieme di stringhe in cui ogni stringa è una sequenza di simboli. Tutti i linguaggi sono quindi un insieme infinito di simboli che ha bisogno di un modo conciso di rappresentazione che è dato dalla grammatica. OGGETTI Persone, animali, numeri …… RELAZIONI Fratello di, più piccolo di, possiede.. PROPRIETÀ Rosso, primo, quadrato FUNZIONI Padre di, secondo tempo di, uno più di Esistono diversi formalismi per definire una grammatica, i più diffusi sono certamente la notazione estesa BNF (proposta da Backus et Naur) e i diagrammi sintattici. Nella grammatica BNF ci sono quattro componenti • SIMBOLI TERMINALI: sono i simboli o le parole che compongono le stringhe del linguaggio. (esempio le lettere dell’alfabeto, i numeri …) • SIMBOLI NON TERMINALI: consentono la classificazione delle sottofrasi del linguaggio. Per esempio, il simbolo non terminale NounPhrase per l’inglese denota un 20 Formattati: Elenchi numerati BIOINFORMATICA insieme infinito di stringhe che comprende “you” e “the big slobbery dog” (cane bavoso). • SIMBOLO INIZIALE: è il simbolo non terminale che denota l’insieme delle stringhe del linguaggio. In aritmetica potrebbe essere Exp. • REGOLE DI SCRITTURA O PRODUZIONE: consentono di classificare le stringhe Ad esempio Cifra → 7, significa che ogni volta che incontra il simbolo 7 lo classifica come cifra. ELEMENTI TERMINALI DEL LINGUAGGIO ELEMENTI CON SIMBOLI NON TERMINALI PERCORSO Elementi del diagramma sintattico Per leggere un diagramma sintattico si devono seguire alcune regole:h Formattati: Elenchi numerati • Si legge il diagramma da sinistra. • Si opera una scelta quando si trova una biforcazione. • Se si trova un elemento terminale lo si inserisce nella frase e si prosegue. • Se si incontra un simbolo non sintattico. terminale lo si sostituisce con il suo diagramma A A B B c c Equivale ad una alternativa A, o B o C Alternativa B o C o niente Grazie alla sua espressività questo tipo di rappresentazione si è largamente diffusa soppiantando, in alcuni casi, la rappresentazione classica del BNF. Nel seguito del paragrafo vengono riportati alcuni esempi di grafi sintattici relativi al linguaggio Pascal. 21 BIOINFOSTAT INTERO SENZA SEGNO CIFRA Diagramma sintattico di intero senza segno La conoscenza e la comprensione di fenomeni complessi in ambito della ricerca sono rappresentate come modello. Il metodo scientifico è basato sulla creazione, verifica, modifica del modello di rappresentazione del mondo. La finalità del modello è quella di semplificare e di spiegare la complessità dei diversi fenomeni. Le scienze applicate usano i modelli per predire, controllare e comprendere la realtà del mondo. Il modello è una rappresentazione che contiene gli elementi essenziali degli oggetti o degli eventi che si realizzano nel mondo reale. La rappresentazione di un modello può avvenire secondo due modalità. q FISICA. Come un modello di aeroplano o il modello di una costruzione. q SIMBOLICA. Come nel linguaggio naturale, un programma al computer o una serie di equazioni matematiche. I modelli possono essere facilmente cambiati o manipolati: il cambiamento di un modello simbolico è certamente più facile rispetto al cambiamento in un modello fisico. I valori che si modificano in un modello sono chiamati parametri. La costruzione del modello passa attraverso quattro fasi: q SEMPLIFICAZIONE e IDEALIZZAZIONE si identificano gli elementi essenziali della struttura (oggetti ed eventi). q MANIPOLAZIONE e TRASFORMAZIONE rappresentano le implicazioni derivate dal modello. q RAPPRESENTAZIONE e MISURA sono il formalismo che descrive gli oggetti, gli eventi e le loro relazioni. Questo è il processo di traduzione dalle parole all’espressione algebrica; in statistica utilizziamo i simboli dell’algebra (misure) per dare significato al processo chiamato misura. q VERIFICA. Le implicazioni derivate sono confrontate con i risultati o le osservazioni nel mondo reale. 22 BIOINFORMATICA interpreta Mondo reale Modello osservazione modifica verifica Mondo reale Modello Rappresentazione attraverso un modello generico COSA SI VEDE Causa Effetto TEORIA Programma Osservazioni Si crede Si vede COSA SI CREDE Rappresentazione di un modello statistico I modelli a nostra disposizione sono in numero ragguardevole e dipendono dalla tipologia dei dati a nostra disposizione. Il modello per rappresentare la distribuzione di frequenza è ad esempio una espressione algebrica che descrive la frequenza relativa (altezza della curva). I modelli più utilizzati in ambito statistico sono quelli chiamati modelli di distribuzione probabilistica, generati dai processi stocastici che sia rappresentativo della POPOLAZIONE. Finalmente vogliamo confrontare gli effetti o la causa di interesse in relazione ad altre condizioni. Questo è un momento chiave perché dobbiamo individuare una strategia operativa o meglio pianificare un disegno sperimentale. ll ricercatore deve fornire una informazione di tipo sintetico sulla base dei dati di cui dispone; i dati quindi possono essere di diverso tipo e possono essere trattati secondo diverse modalità. La raccolta sistematica di osservazioni e misure rappresenta la base dell'attività di ricerca: dall'analisi delle osservazioni e delle misure effettuate il ricercatore cerca di trarre conclusioni che egli spera abbiano una più ampia validità. Il primo passo da compiere per effettuare una verifica sperimentale è la progettazione un'indagine definita attraverso la costruzione del "disegno sperimentale". Il disegno sperimentale consiste nella raccolta dei dati in modo tale che il rumore di fondo sia ridotto al minimo e che l'informazione sia ottenuta con precisione sufficiente per saggiare l'ipotesi di interesse sperimentale. Partendo da un'ipotesi generale, possiamo ricavare una "ipotesi 23 BIOINFOSTAT di lavoro o di ricerca", che deve essere ripetibile e verificabile da altri sperimentatori. Con essa ci poniamo un quesito su un evento futuro, o in ogni modo, su un avvenimento del quale possiamo solo supporre il risultato. Nell'ipotesi di lavoro i cardini fondamentali sono dati dall'espressione: "se .... allora ....". In termini statistici dopo il "se" si indica la variabile indipendente, e dopo "allora" quella dipendente. L’informazione finale ottenuta sarà tanto più valida quanto maggiore e precisa sarà la definizione del disegno sperimentale. Una volta terminata la sperimentazione, l'ipotesi di lavoro potrà essere: q verificata e confermata: quando è possibile affermare che il suo contenuto risponde effettivamente ai dati raccolti; q verificata e respinta: quando i dati raccolti nella sperimentazione non sono in accordo con la previsione; q non verificata: quando i risultati della ricerca non permettono né di confermare né di respingere l'ipotesi di lavoro. 24 BIOINFORMATICA EVOLUZIONE STORICA DEL CALCOLO. L’abaco rappresenta il capostipite degli strumenti di calcolo e ha costituito per molto tempo l’unico ausilio per la risoluzione delle operazioni aritmetiche elementari. Abaco Blaise Pascal Le scoperte matematiche del XVI e XVII secolo permisero di affrontare il problema della ricerca di strumenti di calcolo più idonei. Nel 1642 Blaise Pascal concepì è costruì una macchina (pascalina) che eseguiva in modo meccanico le addizioni e le sottrazioni. Dopo quasi un secolo Leibnitz ne costruì una che era in grado di effettuare anche le moltiplicazioni e le divisioni. Queste macchine vennero costruite in pochi esemplari e le operazioni erano eseguite una alla volta e non era possibile realizzare un insieme di operazioni senza l’intervento umano. Il primo calcolatore per applicazioni generali fu una calcolatrice meccanica progettata dal matematico C. Babbage ai primi del '800. Concettualmente tale macchina (macchina analitica) aveva la struttura dei moderni calcolatori, una unità di calcolo, una memoria, un dispositivo di ingresso e uscita. Charles Babbage può essere considerato il vero padre del computer; la sua idea iniziale era quella di risolvere il problema della stesura delle tavole dei logaritmi, con dispositivi meccanici. Il problema fu finanziato dal governo Inglese che mise a disposizione di Babbage ingenti somme di denaro considerando che tali sistemi si potevano applicare utilmente al calcolo delle rotte delle navi. Il problema era però tecnologico, infatti era molto difficile realizzare la miriade di ingranaggi e di rotelle necessarie al dispositivo. Il programma era decodificato su un nastro perforato, vi era una unità di calcolo chiamata "mill" (mulino) dove venivano eseguiti i calcoli, e la memoria centrale chiamata "store" (magazzino). Tale macchina era però in grado di svolgere un solo compito, quello di poter svolgere equazioni polinimiali. Babbage comprese però che un dispositivo così congegnato poteva essere usato per risolvere molti altri calcoli cambiando solo il programma. La calcolatrice era in grado di eseguire istruzioni di un programma preventivamente registrate su un nastro di carta perforato, prevedendo la possibilità di eseguire istruzioni in modo anche non sequenziale. Verso la fine del XIX secolo lo statistico americano H. Hollerith riprese il principio della scheda perforata ed attuò un sistema elettromeccanico che poteva interpretare ed elaborare i dati codificati con una perforazione del cartoncino della scheda. Questa invenzione permise di costruire le macchine meccanografiche per il censimento americano del 1890. Il risultato fu strabiliante, in soli due anni si elaborarono tutti i dati di 62 milioni di abitanti americani. Hollerith fonda IBM. Il tedesco Zuse realizzo il primo computer elettromeccanico a numerazione binaria che fu distrutto nel 1944 dai bombardamenti. Contemporaneamente però in America anche il computer di Aiken fu terminato e si chiamò Mark1, venne salutato come il sogno di Babbage. Questi calcolatori avevano scopi militari essendo utilizzati per calcolare le traiettorie delle bombe volanti che i tedeschi lanciavano su Londra. Con l’ E.N.I.A.C. (Electronic Numeric Integrator And Calculator) per la prima volta si parla di calcolatore elettronico. Infatti tale dispositivo impiegava circa 18000 valvole elettroniche. Le dimensioni erano notevoli: 18 metri di lunghezza e 2 di altezza; le operazioni venivano svolte con alte velocità per quei tempi( 25 BIOINFOSTAT dieci operazioni al secondo), le valvole avevano sostituito i mezzi meccanici, però il principio di funzionamento era ancora quello della macchina di Babbage. Nel 1940 Stibbitz fece funzionare una calcolatrice meccanica al Dormouth College; il primo calcolatore elettronico che rispondeva alle specifiche del progetto di Babbage. La macchina era di notevoli dimensioni (18 metri di lunghezza e circa 3 di altezza) ed era in grado di eseguire una moltiplicazione di due numeri di 23 cifre in circa 5 secondi. Questi computer verranno utilizzati inizialmente per scopi spaziali. ENIAC C. Babbage Nel 1944 Aiken costruì una calcolatrice elettromeccanica ad Harvard. Dopo la seconda Guerra mondiale comparvero i primi calcolatori a valvole (ENIAC). Il capostipite dei calcolatori di prima generazione richiedeva per il suo funzionamento un consumo di energia corrispondente a quello di una città di medie dimensioni. Si deve inoltre a Von Neumann il concetto di programma memorizzato. Sulla base di questo approccio il calcolatore tipico degli anni ’50 disponeva di una memoria centrale composta da valvole termoioniche e relè, collegata a memorie ausiliarie. Questo fu un fatto straordinario, nasce l’epoca dell’elaborazione automatica. Infatti fino a quel momento i dati si immettevano da una parte della macchina, mentre il programma si metteva dall’altra. Questo complicava molto le cose, infatti volendo cambiare il programma bisognava andare, fisicamente , a cambiare i collegamenti della macchina. Oggi, invece, dati e programmi si pongono entrambi nella memoria centrale della macchina. Inoltre con Von Neumann nel 1949, nascono i sistemi operativi , serie di comandi programmati per il funzionamento della macchina e residenti nella memoria del computer, utili sia per le operazioni di avvio della macchina, che per le fasi operative di trasferimento delle informazioni. Von Neumann Valvole termoioniche La struttura di base di questi primi calcolatori è nota come macchina di Von Neumann ed è rappresenta da 5 componenti: una unità logico-aritmetica, una memoria, una unità di controllo del programma, una unità di ingresso e una di uscita. Inoltre: 26 BIOINFORMATICA • Tutti i dati e tutte le istruzioni sono rappresentate mediante un codice binario e sono registrati assieme nella memoria centrale. • L’elaboratore non fa distinzione tra dati e istruzioni. Formattati: Elenchi numerati La seconda generazione (1958-1964) è caratterizzata dall’impiego dei transistor nelle unità di elaborazione che portarono innumerevoli vantaggi: Formattati: Elenchi numerati • Non si ha riscaldamento. • Le informazioni vengono registrate in modo veloce. • Le dimensioni dei calcolatori sono molto ridotte. Nella terza generazione (1964-1971) vengono impiegati i micro-circuiti miniaturizzati e per la prima volta vengono adottati i circuiti integrati. I circuiti integrati vengono realizzati con delle tecniche di fotoincisioni su piastrine di silicio (chip) e permettano di raggiungere velocità di elaborazione prossime a quelle dei neuroni cerebrali. Nasce il primo microprocessore INTEL 4004. L’inventore è Federico Faggin La quarta e la quinta generazione iniziano nel 1971 con la comparsa del primo microprocessore capace di elaborare dati sotto forma di sequenze costituite da 4 bit (parole dati di 4 bit) a cui fecero seguito i microprocessori a 8 bit immessi sul mercato nel 1980, nel 1990 vennero prodotti e si diffusero quelli a 32 bit. Attualmente sono in commercio microprocessori a 64 bit (Digital) dotati di una velocità di esecuzione molto elevata. La quinta generazione inizia con la possibilità di disporre di computer basati su una struttura multiprocessore ad architettura parallela, ovvero su più processori connessi tra di loro al fine di consentire l’elaborazione simultanea di più istruzioni del programma. Le tendenze attuali di sviluppo dell’informatica sono basate sull’evoluzione dell’architettura degli elaboratori elettronici e delle reti telematiche per la loro connessione, l’altra fonte di sviluppo è rappresentata dall’Intelligenza Artificiale (I.A.). L’elaboratore può essere definito come una macchina elettronica per il trattamento delle informazioni. Dobbiamo quindi in via preliminare procedere alla definizione dei termini e alla caratterizzazione di un elaboratore o computer. q Macchina. Indica che gli elaboratori appartengono alla stessa categoria generale delle lavatrici, delle locomotive, dei rasoi elettrici…. q Elettronica. Significa che il funzionamento è basato su un certo numero di componenti elettronici definiti come circuiti integrati. q Automatica. Indica che un elaboratore è in grado di eseguire in modo autonomo tutte le fasi per lo svolgimento di un compito. q Trattamento delle informazioni. Indica genericamente la tipologia del lavoro che un computer è in grado di eseguire. Le operazioni che i calcolatori sono in grado di eseguire possono essere suddivise in sette classi. Ingresso (input) corrisponde all’introduzione di informazioni provenienti dall’esterno. Queste operazioni si realizzano solitamente tramite tastiera. Uscita (output) permettono di prelevare le informazioni dal calcolatore, il modo più comune per visualizzare le informazioni è il video o la tastiera. Memorizzazione (storage) comporta la creazione di copie permanenti delle informazioni utilizzabili in un secondo momento dal calcolatore. Recupero (retrieval) memorizzate. consiste nella rilettura 27 di informazioni precedentemente Eliminato: ¶ BIOINFOSTAT Trasmissione (sending) consiste nella possibilità di trasmettere le informazioni da un elaboratore ad un altro per mezzo di una rete di comunicazione. Ricezione (receiving) consiste nel ricevere informazioni inviate da un altro calcolatore. Elaborazione (processing) comprende l’ordinamento, la selezione, la combinazione e la riorganizzazione delle informazioni oltre che al calcolo. In generale, escludendo l’intelligenza artificiale, un calcolatore non può prendere iniziative, fronteggiare circostanze impreviste o dare giudizi morali. Modello analogico. È un modello fisico, nel senso che utilizza le proprietà di un certo sistema (reale) per rappresentarne un altro. In particolare, in un modello analogico è possibile fare corrispondere ad una caratteristica del sistema originario espressa in una certa grandezza una caratteristica espressa in una grandezza diversa.(es: descrivere un circuito elettrico ricorrendo alle proprietà di un circuito idraulico). Eliminato: Eliminato: p Modelli Fisici Analogici Simbolici Iconici Grafici Matematici Logici Modello iconico. Fa sempre parte della classe dei modelli fisici, riproduce le caratteristiche di un sistema in una scala diversa mantenendo un rapporto di proporzionalità con l’originale (es:plastico di edifici). Modello simbolico. Rappresenta le relazioni tra le parti del sistema e il mondo esterno ricorrendo a simboli, cioè ad un linguaggio simbolico (es. linguaggio matematico). A seconda della scelta dei simboli si parla, in particolare, di modelli grafici, matematici o logici. Le informazioni: il concetto di informazione, non si deve confondere con quello di conoscenza che assume nel linguaggio comune. Le informazioni possono essere importanti, banali, vere o false; per noi questo non assume rilevanza. I dati al contrario hanno un significato molto preciso, sono informazioni codificate adatte per essere immesse e trattate da un sistema di elaborazione. In altre parole i dati sono una rappresentazione dell’informazione. I dati non hanno alcun significato, lo assumono solo quando vengono interpretati. Si avrà in questo caso una informazione significativa. INFORMAZIONE SIGNIFICATIVA = DATI + INTERPRETAZIONE Il termine sistema di elaborazione definisce semplicemente un insieme di parti interagenti tra di loro. Questo tipo di approccio si applica allo studio di un elaboratore che può essere descritto come un sistema complesso costituito da un insieme di diversi sottoinsiemi. Per rappresentare le interazioni di un sistema tra le sue componenti ed il mondo esterno possiamo ricorrere ad un modello: esistono al riguardo diversi modelli e vari modi di classificarli. Linguaggio e alfabeto Per poter elaborare le informazioni, ovvero per eseguire tutte le operazioni che possono essere effettuate sulle informazioni (inserimento, archiviazione, modifica, ordinamento, calcolo, ecc.) è necessario definire un linguaggio, ossia uno strumento che sostituisca dei simboli particolari agli oggetti ed ai concetti. Esistono diversi tipi di linguaggi, in particolare si distinguono tra: - NATURALI linguaggi - FORMALI 28 Eliminato: ¶ Eliminato: Eliminato: - BIOINFORMATICA I linguaggi naturali sono quelli utilizzati quotidianamente dagli uomini per comunicare tra loro (italiano, inglese, francese, ecc.); sono dotati in una notevole ricchezza espressiva e semantica, ma possono dar luogo ad ambiguità, imprecisione e difficoltà di interpretazione. I linguaggi formali sono quelli artificiali, creati dall’uomo secondo regole ben definite e prive di eccezioni e di ambiguità (Pascal, Cobol, ecc.); sono dedicati a scopi precisi e circoscritti. Ogni tipo di linguaggio, in ogni caso, è costruito su un alfabeto. Un alfabeto è definito come un insieme finito e non vuoto di simboli convenzionali. Una stringa è costituita da una sequenza qualsiasi di simboli. La stringa vuota è una stringa priva di simboli, indicata con λ. La lunghezza di una stringa è il numero di simboli nella stringa, per esempio |abc| = 3. Un linguaggio su un alfabeto I è un insieme di stringhe costruite su I. Con I* si indica l’insieme di tutte le stringhe su I, inclusa la stringa vuota. Con I+ si indica l’insieme di tutte le stringhe su I, esclusa la stringa vuota. Per esempio, se I = {0,1}, allora I+ = {0,1,00,10,01,11,000,111,..}. Esempi di alfabeti per i linguaggi naturali possono essere: − italiano, composto da 21 lettere; − inglese, composto da 26 lettere. Esempi di alfabeti per i linguaggi artificiali possono essere: − insieme {linea, punto} del linguaggio telegrafico; − insieme dei colori {rosso,giallo,verde} del linguaggio semaforico; − insieme delle cifre {0,1} utilizzato per il sistema di numerazione binaria. Dopo aver definito un linguaggio L su un alfabeto I, il primo problema che bisogna risolvere è la rappresentazione del linguaggio. Se L è finito, allora basta elencare le stringhe che compongono il linguaggio. Se L è infinito, allora bisogna trovare altre soluzioni: 1. un primo metodo consiste nell’introduzione di un sistema generativo, denominato grammatica. In pratica, ogni stringa del linguaggio viene costruita e strutturata in modo preciso e non ambiguo utilizzando le regole di una grammatica. Il linguaggio generato dalla grammatica G si indica con L(G) e rappresenta l’insieme delle stringhe generabili da G; 2. un secondo metodo consiste nell’utilizzo di un sistema di riconoscimento, detto automa. In pratica, l’automa accetta in input una qualsiasi stringa e risponde “SI” se la stringa appartiene al linguaggio associato, “NO” altrimenti. Il linguaggio riconosciuto dall’automa A si indica con L(A) e rappresenta l’insieme delle stringhe riconosciute da A. In generale, un automa è un dispositivo in grado di eseguire da solo, cioè in modo automatico, senza l’intervento di una persona, una sequenza di azioni stabilite in precedenza. È dotato di particolari meccanismi per acquisire elementi in input e produrre elementi in output: durante il suo funzionamento, può assumere al suo interno stati diversi tra loro. Gli aspetti che caratterizzano il funzionamento di un automa sono: i simboli forniti dall’esterno, che l’automa sa riconoscere nel loro significato; i simboli prodotti all’esterno come risultato del lavoro svolto; l’insieme di tutti i possibili stati che l’automa può assumere; l’insieme di tutte le possibili transizioni di uno stato all’altro. Il comportamento di un automa può essere descritto da un algoritmo che specifica le azioni da compiere e del quale l’automa è l’esecutore. Un automa è definito come una quintupla di elementi A = (I,S,s0,F,T): 1. alfabeto dei simboli input I = (i1, i2,…,in), cioè l’insieme finito dei simboli che l’automa è in grado di ricevere dall’esterno, riconoscendoli; 2. insieme dei possibili stati S = (s1, s2,…,sn) che l’automa può assumere durante il suo funzionamento; 3. stato iniziale s0∈S di partenza del funzionamento dell’automa; 4. insieme degli stati finali F⊆S; 29 BIOINFOSTAT 5. funzione di transizione T: (it, st-1) → (st,ot) cioè la funzione che indica lo stato successivo di transizione all’istante t e il simbolo che viene emesso verso l’esterno, in relazione di un determinato stato precedente all’istante t-1 e di un determinato simbolo input. In generale, il funzionamento di un automa consiste nell’accettare un simbolo dall’esterno ed emettere un simbolo in uscita, producendo un cambiamento di stato. L’automa non ha memoria, quindi la funzione di transizione T dipende solo dallo stato in cui si trova l’automa e dal simbolo input in lettura in quel momento. Una stringa sarà riconosciuta dall’automa se, partendo dallo stato iniziale s0 e avendo come input la stringa, esso dopo un certo numero di transizioni di stato si troverà in uno stato finale di F; se alla fine l’automa non si trova in uno stato finale, allora la stringa sarà rifiutata. Il funzionamento di un automa può essere descritto mediante un algoritmo, mediante un grafo di transizione oppure mediante la tabella della sua funzione. Esempio di automa che accetta tutte e solo le stringhe binarie con almeno due zeri consecutivi (accetta 10010 e rifiuta 10110). A = (I,S,s0,F,T), dove: I={0,1} S={p,q,r} p è lo stato iniziale F={r} T è definita dalla seguente tabella T p q r 0 q r r 1 p p r Lo stato iniziale è p. Lo stato p significa che due zeri consecutivi non sono ancora apparsi e il simbolo precedente non è uno 0. Lo stato q significa che due zeri consecutivi non sono ancora apparsi e il simbolo precedente era 0. Lo stato r significa che sono apparsi due zeri consecutivi. Quando A entra nello stato finale r, non ne esce più e rimane su questo stato sino alla fine dei simboli input. Supponiamo di avere in input la stringa 01001. L’automa effettua le seguenti transizioni: (p,01001) → (q,1001) → (p,001) → (q,01) → (r,1) → (r, λ) Poiché (r, λ) è una configurazione finale, la stringa input 01001 viene accettata dall’automa. 1 0 0 p r 0,1 q 1 DAL PROBLEMA ALL’ALGORITMO Problema – Qualunque problema che ci troviamo a dover risolvere genera delle domande a cui dobbiamo trovare una risposta. Per la risoluzione di un problema si devono affrontare alcune fasi: la prima fase consiste nell’individuare con precisione la domanda a 30 BIOINFORMATICA cui rispondere e le rispose da ottenere (dati del problema). La seconda fase consiste nella costruzione di uno schema che tenga conto solo degli aspetti importanti al fine della risoluzione del problema (modello del problema). La terza fase è quella più creativa e consiste nell’individuare le operazioni da compiere per raggiungere il risultato stabilito del problema (algoritmo). Dati e Azioni – Nella descrizione del problema occorre anzitutto definire i dati iniziali (dati di input) sui quali basare la soluzione del problema; essi non devono essere né sovrabbondanti né troppo ridotti. Poi bisogna definire i risultati che si vogliono ottenere (dati di output). In un problema i dati possono essere di tipo diverso: numerico (solo cifre: stipendio, importo, ecc.), alfabetico (solo lettere: nome, cognome, ecc.) o alfanumerico (insieme di cifre e lettere: codice fiscale, targa, ecc.). Le azioni rappresentano le attività che si compiono in un intervallo di tempo finito e che, mettendo i dati in relazione tra loro, consentono di ottenere il risultato del problema. Esse possono essere operazioni di tipo aritmetico quali i calcoli (somma, IVA 20%, ecc.) o di tipo logico (confronto tra due valori A>B, controllo per stabilire se è stata raggiunta la fine di un elenco, ecc.). Per descrivere le azioni è necessario disporre di un linguaggio; le descrizioni delle azioni sono dette istruzioni. Una regola pratica per individuare quali sono i dati e quali le azioni di un problema, consiste nel trattare i sostantivi come dati e i verbi come azioni. Modello: è una forma semplificata di rappresentazione della realtà che tiene conto di tutti e solo gli elementi determinanti per la risoluzione di un problema (per esempio, la carta stradale per la risoluzione del problema della determinazione del percorso più breve tra varie città). Algoritmo: successione ordinata e finita di tutte le operazioni che devono essere eseguite per raggiungere il risultato del problema stabilito in precedenza. Implementazione – Per implementazione di un problema si intende il suo trasferimento su un sistema di elaborazione. Risolutore – Il risolutore è colui che progetta prima il percorso di risoluzione di un problema e successivamente l’algoritmo. Esecutore – L’esecutore è l’ente, nel senso generico di umano o automatico, che esegue le azioni secondo le istruzioni dell’algoritmo. Rappresentazione degli algoritmi – Per rappresentare un algoritmo occorre seguire delle modalità e regole precise. Per quanto riguarda le modalità, possiamo dividere la sua rappresentazione in tre parti: 1) riga di intestazione: la prima riga contenente il nome che il risolutore decide di dare all’algoritmo per ricordare l’obiettivo del problema (Algoritmo Media, Algoritmo Ordina, ecc.); 2) sezione dichiarativa: una o più righe contenente la descrizione degli oggetti che vengono usati dall’algoritmo, cioè nome e tipo di dati (base, altezza: numeri reali; pigreco:costante 3,14; ecc.); 3) sezione esecutiva: inizia con la parola begin (o inizio) e termina con end (o fine), e contiene l’elenco ordinato delle istruzioni dell’algoritmo che l’esecutore deve eseguire. Vi sono poi delle regole per comunicare le istruzioni all’esecutore: a) per indicare l’istruzione di acquisizione di dati si usa il comando input (o leggi) seguito dal nome della variabile da leggere, messo fra parentesi; se le istruzioni di lettura sono più di una, si può utilizzare un elenco di variabili separandole con una virgola: input (base) input (altezza) oppure input (base, altezza); b) per indicare l’istruzione di comunicazione di dati si usa il comando output (o scrivi); output (A) 31 BIOINFOSTAT output (B) oppure output (A, B); c) per indicare l’attribuzione di un valore ad una variabile si usa l’istruzione di assegnamento: B+C. A := B+C oppure A In generale, si utilizza la regola dell’indentazione, ovvero si scrivono alcune righe più a destra per meglio evidenziare gruppi di istruzione. Sempre per una maggiore chiarezza espositiva, si indicano per convenzione in maiuscolo i nomi delle variabili e delle costanti, in minuscolo le parole proprie e riservate di ciascuna sezione, in modo da non confondere le due cose. L’esecuzione di un algoritmo può essere simulata mediante una tabella di simulazione contenente i valori assunti dalle variabili, man mano che l’algoritmo procede; ogni nuova attribuzione cancella quella precedente. Esempio 1 – Calcoliamo la media di tre numeri reali assegnati. algoritmo MEDIA; variabili A,B,C,M : numeri reali; begin input (A,B,C); M (A+B+C) / 3; output (M) end Esempio 2 – Dato un numero intero, calcolare il precedente e il successivo. algoritmo PREC_SUCC; variabili N,P,S : numeri interi; begin input (N); N – 1; P S N + 1; output (P,S) end Esempio 3 – Calcolare il punteggio totale attribuito da una giuria di 10 elementi ad un iscritto ad una gara. algoritmo SOMMA; variabili C,S,N : numeri interi; begin C 0; S 0; repeat input (N); S S + N; C C + 1; until C <= 10 output (S) end 32 BIOINFORMATICA C S N Valori iniziali 0 0 Tabella di simulazione Primo Secondo passaggio passaggio 1 2 8 14 8 6 Terzo passaggio 3 24 10 .... ... ... ... IL LIVELLO DEI LINGUAGGI Linguaggi di basso livello Sono tutti quelli che comunicano direttamente con il computer, utilizzando i codici operativi dello stesso processore, quindi in "linguaggio macchina". Questo modo di programmare dà al tecnico la più ampia libertà e potere, ma nello stesso tempo lo porta a scendere al più basso dei livelli dei linguaggi formali, ovvero deve parlare la stessa lingua operativa della macchina, adoperando una catena molto lunga di istruzioni elementari, quindi con molta difficoltà di scrittura e di verifica del corretto funzionamento. Prima della nascita dei linguaggi formali di alto livello (high-level languages) questa era l'unica maniera per fare compiere un lavoro ad un computer. Linguaggi di alto livello Sono invece tutti quelli che fanno uso di uno pseudo-linguaggio umano, utilizzando allo scopo parole-chiave o codici operativi ispirati quasi esclusivamente alla lingua inglese. Ovviamente ciò facilita molto sia la stesura che la rilettura di un programma, ma non mette il computer in condizione di capire direttamente cosa vogliamo. Per ottenere il risultato finale è dunque necessario applicare un "interprete" che traduca il nostro linguaggio simbolico e decisamente più sintetico, in reali istruzioni di macchina. Nel tempo l'interpretazione del linguaggio simbolico (programma "sorgente") ha messo in evidenza la lentezza causata dalla traduzione contemporanea durante lo svolgimento del calcolo e perciò si è pensato di creare dei "compilatori" che svolgessero un ruolo molto più completo e produttivo. Il compilatore è un programma (scritto in linguaggio macchina) in grado di leggere le istruzioni del sorgente, verificarne la correttezza linguistica, e sviluppare automaticamente le corrispondenti istruzioni in codice operativo di macchina (ottenendo così un programma "oggetto" o "eseguibile" che dir si voglia). In questo modo abbiamo ottenuto un valido compromesso, tra il parlare come la macchina e il parlare con la nostra lingua naturale. Ovviamente i linguaggi simbolici impongono nuove regole di grammatica e sintassi, per cui dobbiamo comunque fare uno sforzo iniziale per apprenderne le esigenze, ma dopo ci troviamo la vita più facile perchè con termini sintetici riusciamo a ottenere ciò che vogliamo dal computer. ATTRIBUTI DEI LINGUAGGI Generalmente si tende a suddividere i linguaggi ad alto livello in 3 categorie: - imperativi - funzionali - dichiarativi Però la classificazione può anche essere più ampia, e soprattutto comprendere alcuni attributi particolari che ne definiscono meglio le capacità. Linguaggi Imperativi: sono composti da una sequenza di istruzioni in grado di modificare il contenuto della memoria del computer o di determinare le modalità di esecuzione di altre istruzioni. Molto importante è l'istruzione di assegnazione. Quasi tutti i linguaggi più comuni (RPG, Pascal, Basic, Fortran, C, Cobol, ecc.) agiscono in questo modo. Linguaggi Funzionali: che servono a calcolare il valore di una funzione. In un linguaggio funzionale puro l'assegnazione esplicita risulta addirittura completamente assente (si 33 BIOINFOSTAT utilizza soltanto il passaggio dei parametri). In tale modello rivestono particolare importanza la ricorsione, in pratica l'utilizzo di funzioni che richiamano se stesse e, come struttura dati, la lista (sequenza ordinata di elementi) Il più importante rappresentante di questa categoria è senz'altro il Lisp (LISt Processing). Linguaggi Dichiarativi (o logici): dove il programma è considerato come la dimostrazione della verità di una asserzione. Il sorgente è costituito da una sequenza di asserzioni di fatti e regole. Non è necessario indicare esplicitamente il flusso di esecuzione, ma dato un obiettivo di partenza è il sistema che cerca di individuare i fatti e le regole rilevanti. Il fatto che vi sia una netta separazione tra la parte dichiarativa (il cosa fare) e la parte procedurale (il come) rende un programma scritto in un linguaggio logico particolarmente leggibile. I linguaggi logici risultano molto adatti a risolvere problemi che riguardano entità e le loro relazioni, mentre nelle normali applicazioni risultano essere di difficile utilizzo, anche perché, comportano un modo di programmare completamente diverso dal solito. Il linguaggio più famoso di questo tipo è il Prolog (PROgramming in LOGic). Altri attributi dei linguaggi Linguaggi Strutturati: la programmazione strutturata è una tecnica il cui scopo è di semplificare la stesura dei programmi, limitando l'uso dei controlli a pochi casi semplici, tutti con un solo ingresso e una sola uscita.Tale metodo è stato adottato da molti linguaggi anche preesistenti. Ad esempio per evitare l'uso indiscriminato del famoso GOTO (salto incondizionato) sono state introdotte istruzioni di controllo strutturato del flusso, come i blocchi IF-THEN-ELSE, DO WHILE, CASE, FOR, ecc. L'adozione di nuove regole di strutturazione non impedisce, in casi in cui sia ritenuto veramente utile, l'utilizzo dei vecchi comandi di salto (GOTO), ancora in uso, per esempio, per uscire da una routine in caso di errore. Linguaggi Object-Oriented: il programma opera su insiemi di oggetti (insiemi di dati e regole che manipolano questi dati) che comunicano tra loro e verso l'esterno mediante messaggi. L'Object-Oriented ha adottato nuovi concetti come l'incapsulamento, l'ereditarietà e il polimorfismo. Oltre a linguaggi specializzati che implementano i principi di tale metodologia, come Smalltalk, ad esempio, sono nate delle estensioni dei linguaggi già esistenti, che li integrano (ad es. C++ per il C, il Visual BASIC, Visual RPG, ecc.). Linguaggi Event driven: per programmare in ambienti di tipo Windows è necessario provvedere alla gestione contemporanea del possibile verificarsi di tutta una serie di eventi (movimento del mouse, click, comandi da tastiera, ecc.). In un ambiente guidato da eventi non determinabili a priori, ma appunto "event driven" non esiste più una sequenza determinata di comandi da eseguire, ma ad ogni evento bisogna promuovere una determinata azione. Per questo motivo anche il linguaggio di programmazione deve poter essere in grado di gestire questi fatti segnalati dal sistema, ma non tutti i linguaggi lo sanno fare. Il grande successo che ha riscosso il Visual Basic della Microsoft, o MS Access, derivano anche da queste loro spiccate attitudini, che permettono di creare facilmente applicazioni sotto Windows, fornendo anche la capacità di governare un flusso di tipo event driven. LE CARATTERISTICHE DEI LINGUAGGI In queste poche righe non vi è la velleità di affrontare e risolvere il complesso problema dei linguaggi di programmazione e del loro utilizzo migliore, ma il contenuto può servire ai profani per comprendere e sensibilizzarsi sulla grandezza del problema, rimandando gli interessati ad altre fonti di approfondimento più qualificate. Ci sono due strade altrettanto importanti per valutare un linguaggio di programmazione: 34 BIOINFORMATICA - capire "cosa" sa fare il linguaggio, ovvero le motivazioni che ne hanno spinto la realizzazione, ma non alle sue origini, che magari si perdono nella notte dei tempi, bensì nel suo stato più recente di disponibilità - capire "come" lo sa fare, nel senso che molti linguaggi presentano strumenti di sviluppo analoghi tra loro, ma possono presentarsi con regole grammaticali o sintattiche anche molto diverse, oppure avere altri limiti, anche gravi, se valutati nel contesto delle nostre esigenze. Oggi la scelta di un linguaggio da adottare per una certa applicazione si presenta assai vasta e complessa. Sono finiti i tempi in cui un programmatore studiava e imparava un solo linguaggio e campava con quello per tutta la sua carriera. La conoscenza di differenti linguaggi è indispensabile perchè il mondo informatico tende ad ampliarsi sempre di più, integrando in una stessa applicazione problemi che possono essere di gestione dei dati di un database, di comunicazioni remote, di accesso a Internet, di gestione della sicurezza, di controllo dei processi, di collaborazione e scambio informazioni tra varie piattaforme o tra vari sistemi operativi e via dicendo. Un conto è dovere scegliere un linguaggio per sviluppare dei giochi al computer, ben diversa la scelta per l'insegnamento universitario ed ancora diversa quella per realizzare, invece, applicazioni in ambienti aziendali. Solo per citare tre differenti approcci al problema. Il più elevato numero di programmi e di righe di codice oggi è sicuramente legato al mondo aziendale, o commerciale o del business o del gestionale, che dir si voglia. E' per questo motivo che anche molti linguaggi "puri", nati semplicemente per lo studio o con scopi ben più teorici e nobili, hanno finito, prima o poi, per essere implementati e presentati anche sul mercato del "grande business". La domanda di sviluppatori competenti è quindi sempre più orientata a questa area di interesse, che non a tutte le altre. Allora nella marea di linguaggi proponibili per lo sviluppo di applicazioni aziendali dobbiamo essere in grado di fare scelte precise e vincenti. Chiariamo un altro concetto: imparare un nuovo linguaggio richiede tempo e fatica e soprattutto un buon periodo di esercitazione pratica, senza la quale non s'è imparato un bel niente! Sbagliare scelta, sia in termini di cultura personale che -a maggior ragione- in termini di scelta aziendale, può costare molto caro e condannarci a proseguire per quella strada nel nostro sviluppo di programmi, non potendo buttare via tutto il lavoro già fatto per ricominciare daccapo. Gli elementi più critici da valutare possono quindi riguardare: - la standardizzazione e diffusione del linguaggio e relativa tranquillità e fiducia nel fornitore, che deve offrire tutte le garanzie di proseguire nella sua evoluzione, adeguando di volta in volta il suo prodotto al rinnovarsi delle tecnologie, senza piantarci in asso, magari alla versione 0.1/beta, del suo prodotto - le caratteristiche strutturali del linguaggio, gli strumenti che mette a disposizione e le sue doti fondamentali, ovvero: elasticità, flessibilità, completezza, affidabilità, auto documentabilità, semplicità e chiarezza,manutenibilità, sicurezza, economicità (rendimento in termini di tempi di scrittura e debug), e via dicendo - la portabilità del codice su varie piattaforme hardware e sistemi operativi diversi. Ognuno dei suddetti punti è più o meno importante e siccome non esiste il linguaggio ideale, come non esistono tante altre cose ideali, bisogna dare pesi diversi ai vari attributi, in base alle nostre specifiche esigenze. Per esempio, in alcune circostanze la portabilità di un applicativo è fondamentale, mentre in altre situazioni può non essere un grave problema. Teniamo anche presente che molto spesso esistono tools che alla più disperata ci potrebbero aiutare molto a migrare da una soluzione ad un'altra. 35 BIOINFOSTAT Così pure la manutenibilità non è sempre un requisito primario. Tutti i programmi si possono manutere, ma chiaramente in un' applicazione rivolta a paghe e stipendi o a gestire una produzione assai variabile nel tempo, questo problema può essere cruciale, mentre in altri processi potrebbe passare in secondo ordine di importanza. Al di là, poi, delle caratteristiche intrinseche di ogni linguaggio di programmazione c'è una valutazione altrettanto importante che deve essere fatta: la conoscenza già acquisita. Se un linguaggio è già in uso da un certo team di lavoro, anche se non è il linguaggio migliore, probabilmente i risultati che loro riescono ad ottenere saranno ancora più validi di quelli conseguibili se passassero ad un nuovo linguaggio. Bisogna anche pensare che l'approccio al problema della scelta è radicalmente diverso se visto dal lato degli interessi aziendali piuttosto che da quello del giovane che vuole affrontare la sua carriera. L'azienda ha il dovere di scegliere strade sicure e soluzioni basate su linguaggi ben diffusi, in modo da non correre rischi di trovarsi in un vicolo cieco con l'investimento o di essere posta sotto ricatto dal fornitore di software esclusivo. Il tecnico, invece, può anche seguire i suoi gusti personali e fare scelte di specializzazioni di nicchia, rischiando qualcosa in più, ma giocando la carta della richiesta sul mercato. Oggi, per esempio, quanta gente al mondo sa programmare (o comunque dice di saper programmare) in codice HTML? Sicuramente in tantissimi. Mentre quanti tecnici si sono specializzati in Postscript? O conoscono bene l'ASP o XML o Perl o Delphi o Visual RPG? Sicuramente molti di meno. Ma ciò non significa che non ci sia una domanda anche per quelle conoscenze. Un punto è fondamentale nell'area delle applicazioni aziendali è la scelta di un linguaggio che sia il più possibile "problem oriented", ovvero che non richieda grandi sforzi di stesura del codice, ma che lasci al programmatore il tempo e la mente libera per potersi concentrare molto di più sulle reali esigenze aziendali e la loro traduzione in programmi gestionali, piuttosto che arrovellarsi il cervello sul perchè una certa attività del programma non funzioni. Le applicazioni aziendali muovono un'infinità di dati e oggi sono tutte imperniate su database relazionali. Il programmatore in questo campo deve dunque essere più un fedele e sensibile interprete ed esecutore della volontà direzionale o della sua società di servizi, che non un tecnico che si diverta a fare cose sofisticate al computer. IL MODELLO LOGICO-FUNZIONALE DELL’ELABORATORE. In termini di componenti, definiamo un elaboratore come un insieme di elementi raggruppabili in due grosse categorie: l’hardware - insieme dei componenti fisici, allo stato solido o di altro genere, che costituiscono un elaboratore. Eliminato: ¶ Eliminato: e il software - insieme dei programmi che controllano il funzionamento di un elaboratore. L’hardware di un elaboratore può essere variamente costituito (come si vedrà nel seguito) ma rispecchia il modello concettuale ideato da John Von Neumann nel 1946. Von Neumann individuò i blocchi logici indispensabili a definire un elaboratore e le relazioni esistenti tra essi, definendo formalmente uno schema che rappresenta ancora oggi il modello a cui i moderni calcolatori fanno riferimento. Le unità di I/O e le memorie ausiliarie vengono di 36 Eliminato: ¶ BIOINFORMATICA norma chiamate periferiche in quanto rappresentano il tramite tra il mondo esterno e il cuore di ogni calcolatore. Main Memory Input Output Central Processing Unit Elaboratore Le frecce dello schema indicano il sistema di trasmissione tra i vari blocchi che viene chiamato bus. Il personal computer Un computer è uno strumento per elaborare informazione. Il computer lavora partendo da informazioni in ingresso (l'input del processo di elaborazione), la elabora in base a una serie di regole (un programma), e restituisce informazione in uscita (l'output del processo). La quasi totalità dei computer oggi utilizzati è digitale, lavora cioè con informazioni "convertite in numeri" (digit=cifra). Di solito si considera il computer come l'insieme di due componenti: hardware e software entrambe indispensabili al corretto funzionamento del sistema. l'Hardware rappresenta la "ferraglia", la macchina e le sue periferiche, i componenti elettronici e meccanici che costituiscono l'elaboratore, le cose del computer che si possono toccare. Costituiscono l'hardware: il processore, la memoria RAM, il disco rigido,le schede, il monitor o video, la tastiera, il mouse, ecc. ecc. Il software fa funzionare l'hardware: trasforma la macchina e le sue periferiche in un sistema funzionante. Software è anche sinonimo di programmi: applicazioni finalizzate alla soluzione di un determinato problema o alla realizzazione di una particolare attività. Sono software il sistema operativo, i programmi applicativi, i driver per il corretto funzionamento delle periferiche. Possiamo distinguere i computer in due grandi famiglie: • i personal computer sono sistemi monoutente (Personal = per uso personale). • i mainframe possono essere utilizzati contemporaneamente da diversi utenti attraverso i terminali. I terminali sono generalmente costituiti da un insieme di video e tastiera (a volte anche mouse) per colloquiare con il sistema centrale. I terminali non sono computer, sono periferiche di input/output. Prima di approfondire i vari blocchi funzionali dell’elaboratore vediamo un esempio. Esempio. Per comprendere la struttura di un computer si può immaginare il comportamento di un cuoco nella sua cucina. Il cuoco prepara delle pietanze, o piatti, che gli sono stati ordinati, basandosi sulle indicazioni delle ricette corrispondenti. Le ordinazioni vengono effettuate dai clienti che si rivolgono al cuoco perché hanno appetito. § Il computer è la cucina; § Il cuoco è il microprocessore o CPU; § L'appetito è il bisogno da soddisfare ovvero il problema da risolvere; § La ricetta è il programma che il microprocessore deve eseguire; 37 BIOINFOSTAT § Gli ingredienti sono l'input del programma; § Le pietanze o i piatti sono l'output del programma. Il cuoco, per poter lavorare, appoggia tutto quanto, ingredienti e ricetta, sul tavolo di lavoro. Su una parte del tavolo sono incise alcune istruzioni che al cuoco servono sempre, e in particolare quelle che il cuoco deve eseguire ogni volta che la cucina viene aperta (pulire il tavolo, controllare tutti gli strumenti: pentole, tegami, coltelli, cucchiai ecc., e ricevere le ordinazioni assieme alle ricette); senza queste istruzioni di inizio, il cuoco non saprebbe nemmeno che deve accingersi a ricevere delle ordinazioni. Il tavolo di lavoro del cuoco rappresenta, dunque, la memoria centrale che si suddivide in ROM e RAM. La ROM è quella parte di memoria che non può essere alterata (nell'esempio del cuoco, si tratta delle istruzioni incise sul tavolo); la RAM è il resto della memoria che può essere alterata a piacimento dalla CPU (il resto del tavolo). Il computer è pertanto una macchina composta da una o più CPU che si avvalgono di una memoria centrale per trasformare l'input (i dati in ingresso) in output (i dati in uscita). Il computer, per poter ricevere l'input e per poter produrre all'esterno l'output, ha bisogno di dispositivi: la tastiera e il mouse sono dispositivi di solo input, lo schermo e la stampante sono in grado soltanto di emettere output. I dischi sono dispositivi che possono operare sia in input che in output. Il cuoco si avvale di dispense per conservare derrate alimentari (pietanze completate, ingredienti, prodotti intermedi) e anche ricette. Ciò perché il tavolo di lavoro ha una dimensione limitata e non si può lasciare nulla sul tavolo quando la cucina viene chiusa, altrimenti si perde tutto quello che c'è sopra (a eccezione di ciò che vi è stato inciso). I dischi sono le dispense del nostro cuoco e servono per immagazzinare dati elaborati completamente, dati da elaborare, dati già elaborati parzialmente e i programmi. Diverse cucine possono essere collegate tra loro in modo da poter condividere o trasmettere ricette, ingredienti, etc. Le interfacce di rete e i cavi che le collegano sono il mezzo fisico per collegare insieme diversi computer, allo scopo di poter condividere dati e servizi collegati a essi, e anche per permettere la comunicazione tra gli utenti dei vari computer connessi. COMPONENTI HARDWARE DI UN CALCOLATORE cabinet: è la scatola che contiene le parti elettroniche principali del personal computer come: alimentatore motherboard o scheda madre BIOS BUS processore o CPU memoria centrale disco rigido o hard disk unità a dischetto o floppy disk scheda video porte di comunicazione scheda di rete schede aggiuntive opzionali: • scheda audio • modem • schede di input/output dati unità di memoria opzionali: • lettore CD e DVD • unità di backup a nastri • ecc. 38 Eliminato: interruzione pagina BIOINFORMATICA CABINET involucro che ha all'esterno interruttori e led e all'interno sostegni per l'alloggiamento delle parti elettroniche. Può avere tre forme: • tower (verticale) • desk top (orizzontale) • lap top (portatile) ALIMENTATORE Abbassa e rettifica la corrente elettrica, per alimentare le altre parti del computer. Necessita di raffreddamento, quindi la ventola deve sempre girare e non va ostruita La scheda madre (motherboard). La scheda madre è senza dubbio la componente più importante del computer: le funzioni della scheda madre sono moltissime, per primo consente il funzionamento del computer stesso. Le schede madri sono in commercio in due formati principali: il formato AT e quello ATX. Una scheda madre AT può essere montata solo ed esclusivamente in un apposito case (denominato appunto AT) e una ATX in un case ATX. Il formato AT è meno recente dell'ATX ed e' stato introdotto verso la fine degli anni ottanta, mentre quello ATX verso a metà del 1997. Il formato ATX prevede delle porte di I/O integrate in piastra madre: una porta parallela (LPT1) femmina 25 pin di colore viola, 2 porte seriali maschi 9 pin di colore blu, 2 porte USB che possono collegare al PC qualsiasi tipo di periferica esterna (se la periferica non ha una porta USB sono in commercio degli adattatori con altri tipi di porte). Fornisce gli alloggiamenti sui quali si inseriscono numerose componenti: il processore (CPU), la memoria RAM, controller per unità a dischetti e dischi fissi, gli slot (alloggiamenti delle schede di espansione) a 16 e 32 bit. La scheda madre determina anche il tipo di processore utilizzabile. Eliminato: ¶ Eliminato: il Eliminato: i La scheda madre si occupa anche delle comunicazioni con le periferiche esterne attraverso le porte di comunicazione quali le porte seriali, parallele, joystick, PS/2 e USB. In pratica queste porte permettono di collegare al computer periferiche come stampanti, modem esterni, scanner. I dischi rigidi e i CD-ROM sono collegati solitamente con un controller EIDE. Sulla motherboard è anche presente un gruppo di elementi detto chipset che si incarica di gestire e coordinare il funzionamento di tutti gli altri componenti. Ad esso è delegato il controllo dell'I/O (Input/Output), dell'I/O del bus e, nelle schede più recenti, dell'elettronica di gestione dei dischi fissi e CD-ROM. Il chipset coordina anche le richieste di interrupt (IRQ) e gli accessi diretti alla memoria (DMA). Un altro componente presente sulla scheda madre è un chip contenente il BIOS (Basic Input Output System). Questo particolare tipo di memoria, di tipo PROM o Flash ROM sulle schede recenti, contiene un codice che viene eseguito all'accensione del PC e consente una procedura di autodiagnostica (POST, Power On Self Test) che esegue tutta una serie di controlli e verifiche sulla memoria RAM, tastiera, processore, drive, disco fisso, porte di comunicazione. 39 Eliminato: BIOINFOSTAT Eliminato: Un al componente pre scheda madre è contenente il BI Input Output Sy Questo particola memoria, di tipo Flash ROM sulle recenti, contiene che viene esegu all'accensione de consente una pr autodiagnostica Power On Self T esegue tutta una controlli e verific memoria RAM, t processore, driv fisso, porte di comunicazione. 1. Socket A: è il connettore della CPU sul quale viene montato il processore e bloccato per mezzo di una leva di bloccaggio. 2. North bridge del chipset: nelle nuove motherboards questo componente è raffreddato da un piccolo dissipatore di calore, in questo caso anche da una ventola, per via dell'elevata temperatura che raggiunge durante il funzionamento, in quanto deve gestire un elevata mole di dati da e per il processore, la memoria centrale e il bus AGP. 3. South bridge del chipset: gestisce tutte le parti della piastra madre dalle quali non transitano grandi quantità di dati come i bus PCI e ISA, le porte seriali e parallele, il controller IDE. 4. Generatore di clock: questo chip fornisce la frequenza di bus utilizzata dalla scheda madre. 5. Batteria per salvare il contenuto della memoria CMOS 6. Connettori per i due canali EIDE entrambi gestiti dal south bridge del chipset. 7. Connettore per due unità floppy disk. 8. Due connettori per canali EIDE supplementari, gestiti dal controller EIDE opzionale installato su questa scheda madre. Questi due canali dispongono di funzionalità RAID. 9. Slot AGP: connettore per l'adattatore grafico. 10.Slot PCI: connettore per differenti tipologie di periferiche (schede video, controller SCSI, schede audio, ecc..). 40 BIOINFORMATICA 11.Slot ISA: connettore per periferiche per il quale si sta assistendo ad un progressivo abbandono, nelle schede madri più recenti, in quanto non veloce e, pertanto, adatto all'impiego con le periferiche più moderne. 12.Bios della scheda madre, su zoccolo estraibile. 13.Slot memoria: come riferimento nell'immagine è stata presa una scheda madre Socket A per cpu AMD Athlon, Athlon XP e Duron. Gli Slot memoria sono del tipo Dimm tradizionale, per moduli memoria SDRAM Single Data Rate. 14.Porte parallela (sopra) e seriali (due, poste sotto). 15.Due porte USB per la connessione di periferiche esterne 16.Porte PS/2 per tastiera e mouse. 17.Connettore di alimentazione ATX. L’Unità Centrale di Processo (Central Processing Unit). BREVE STORIA DEI MICROPROCESSORI Potremmo collocare l'inizio dell'era dei Personal Computer nel fatidico anno 1981, quando nacque il PC IBM, dotato di un processore denominato 80088 sviluppato nei laboratori Intel. Da allora in poi le CPU, con l'unica eccezione del Pentium, sono state sempre contraddistinte da una duplice serie di numeri: il primo è la sigla di progettazione ed è sinonimo della quantità di informazioni che il microprocessore è in grado di trattare in una sola volta; il secondo numero rappresenta i megahertz del processore ed indica la velocità con cui le informazioni vengono trasferite da e verso la CPU. Alcuni processori sono contraddistinti anche da lettere del tipo SX o DX, che indicano la versione del processore. Di seguito viene fornita una sintetica descrizione dei principali modelli di microprocessore: 80088 e 80086 Rappresentano la preistoria dei microprocessori ed hanno una velocità variabile da 4,7 a 10 MHz. I computer che utilizzano questi processori sono denominati XT e sono usciti di produzione verso la metà degli anni 80. 80286 Nato nel 1985 dà inizio alla "storia infinita" dei computer denominati AT. La sua velocità varia dagli 8 ai 20 MHz. Non viene più prodotto dal 1992. 80386 Inseriti sul mercato a partire dal 1986, hanno una velocità dai 16 ai 40 MHz. Esistono due diversi modelli gli SX e i DX. Mentre i secondi sfruttano a pieno la tecnologia appena immessa sul mercato, gli SX rappresentano una sorta di compromesso nato per fattori economici, pur trattandosi di 80386 a tutti gli effetti sono montati su schede madre di precedente generazione che non riescono a sfruttare a pieno titolo le prestazioni del processore. Con questa generazione di processori è comparso anche il modello denominato SL, equivalente ad un SX ma a basso consumo di energia, particolarmente sfruttato soprattutto nei PC portatili. 80486 Nel 1991 sono stati presentati i primi modelli della fortunata serie 80486 contraddistinta dalla caratteristica innovativa dell'incorporazione del coprocessore matematico direttamente all'interno della CPU. Esistono 4 diversi modelli dei processori 80486: gli SX, i DX, i DX2 e i DX4, più alcuni modelli a basso consumo energetico come gli SL. Anche il processore 80486 SX rappresenta una sorta di "anello di transizione" nato per fini economici, in quanto è l'unico dell'intera serie a non essere dotato di coprocessore matematico; la sua velocità varia da 25 a 33 MHz. I modelli DX raggiungono una velocità massima di 50 MHz e hanno rappresentato, unitamente ai loro "fratelli maggiori" la vera piattaforma di decollo per la grafica e la multimedialità. I DX2 e DX4 utilizzano una tecnologia conosciuta sotto il termine di "doppio orologio", in grado di raddoppiare o addirittura quadruplicare la velocità interna della CPU. Mentre un DX lavora in tutta la scheda madre a 50 MHz, un DX2 lavora a 25 MHz nel resto del computer e a 50 MHz all'interno della CPU. Le velocità dei DX2 variano da 50 a 66 MHz, mentre i DX4 raggiungono normalmente i 100 MHz. 41 Eliminato: ¶ BIOINFOSTAT PENTIUM Secondo la tradizione avrebbe dovuto chiamarsi 80586, ma è stato battezzato PENTIUM a causa delle leggi americane che non consentono di registrare un marchio di fabbrica composto di soli numeri. Il nome è figlio di una problematica legale nata quando sul mercato si sono affacciati i "cloni" dei processori della casa produttrice Intel. Lo stratagemma del nome è nato per garantire alla Intel l'univocità di denominazione. Si tratta di un processore immensamente potente la cui velocità varia dai 60 ai 200 MHz. La sua storia è macchiata da un "neo" che la Intel si è affrettata a correggere con tempestività: nelle sue primissime versioni in effetti restituiva un errore sul calcolo di una tipologia di equazioni neppure particolarmente complesse; ma tecnici e progettisti si sono messi immediatamente a lavoro, e ben presto l'azienda è stata in grado di sostituire gratuitamente il processore agli acquirenti della sfortunata versione. Ogni generazione di microprocessori sfoggia un numero di "piedini" superiore alla precedente. Questi piedini costituiscono l'unico veicolo di comunicazione tra il processore e le varie componenti presenti sulla scheda madre: ciascuno di essi assolve un ruolo unico ed insostituibile. I processori 80386, vero spartiacque dell'universo delle CPU in quanto i chip precedenti sono esclusi dalla prerogativa delle gestione avanzata della memoria, hanno 132 piedini. Con l'entrata nel mercato degli 80486 siamo arrivati a 168 piedini; cui ne è stato aggiunto un 169° nel caso dei processori dotati di Overdrive. I PENTIUM, per assicurare le prestazione a 64 bit, richiedono addirittura 273 piedini; che però possono scendere fino a 238 nel caso di Overdrive PENTIUM, funzionanti internamente a 64 bit ma in grado di comunicare con l'esterno a soli 32 bit! In aggiunta al microprocessore esistono anche i coprocessori matematici, progettati appositamente per utilizzare quei programmi che effettuano calcoli molto complicati – in virgola mobile - come, ad esempio, i programmi di grafica, i programmi CAD... La presenza del coprocessore matematico è praticamente ininfluente per i programmi che richiedono calcoli particolarmente complessi: se ad esempio utilizzo un programma di videoscrittura non ottengo alcun vantaggio dalla presenza del coprocessore matematico. Tuttavia nell'ultima generazione di processori - a partire dal 486 - il coprocessore matematico è direttamente integrato nel processore, al fine di favorire le prestazioni multimediali. Ha la funzione di elaborare i dati e di controllare il sistema, rappresenta, quindi, il calcolatore vero e proprio. Si divide nei seguenti blocchi logico-funzionali: q Unità Aritmetico-Logica (Arithmetic-Logic Unit) Esegue le operazioni aritmetiche e logiche in algebra binaria, comandi come l'addizione, la sottrazione, la moltiplicazione e la divisione. I messaggi provenienti dall'unità di controllo indicano all'ALU le operazioni da eseguire, quindi questa unità preleva i dati dai componenti più vicini, i registri, per completare l'attività. Eliminato: - q Unità di Governo (Central Unit) Controlla e gestisce tutte le altre componenti del calcolatore durante l’esecuzione di un programma. Al suo interno si può individuare un particolare elemento, detto unità di decodifica, che si occupa di tradurre le complesse istruzioni dal linguaggio macchina in un semplice formato riconosciuto dall'unità ALU e dai registri. L’unità di controllo, quindi, in base alle istruzioni provenienti dall'unità di decodifica, crea dei segnali di controllo che indicano all'unità ALU e ai registri come operare, su che cosa operare e che cosa fare con il risultato. In altre parole, l'unità di controllo garantisce che tutto avvenga nel posto giusto al momento giusto. Eliminato: – Una memoria locale formata da registri, locazioni di memoria ad accesso privilegiato utilizzate dall’ALU per memorizzare i dati necessari a completare le attività richieste dall'unità di controllo. In questo modo, l'unità ALU può recuperarli rapidamente e in modo efficiente. Alcuni di questi registri sono specializzati nel senso che vengono utilizzati per una funzione precisa, fra questi vi sono: Eliminato: u q 42 Eliminato: ; Eliminato: in Eliminato: Eliminato: ; Eliminato: ; BIOINFORMATICA Accumulatore utilizzato per salvare operandi e risultati intermedi dell’elaborazione. La sua dimensione è un indicatore della potenza di calcolo del processore; Eliminato: – Registro Istruzioni (Instruction Pointer) contiene l’istruzione da eseguire; Eliminato: – Registro Contatore di Programma (Program Counter) contiene l’indirizzo della prossima istruzione da eseguire. Eliminato: – La memoria centrale (Main Memory). La Central Processing Unit è il motore del computer, la parte che elabora le informazioni. Le caratteristiche principali dei processori sono il numero di informazioni che possono essere elaborate contemporaneamente, la quantità di istruzioni eseguibili (ad es. modelli 286- 386- 486- Pentium) e la velocità di elaborazione (frequenza espressa in Mhz) Il microprocessore o CPU (acronimo inglese di Central Processing Unit) si incarica di dirigere tutte le operazioni e di trasferire le informazioni risultanti a tutti i componenti del computer: costituisce il "cervello" vero e proprio del nostro elaboratore. Un "cervello" infinitamente potente e non più grande di 10 cm quadrati. Rappresenta la grande area di memorizzazione per i dati e le istruzioni situata all'interno del computer principale e all'esterno della CPU. Più precisamente, la memoria centrale è un dispositivo in grado di conservare temporaneamente dati espressi in codice binario (sequenze di 0 e 1). La memoria centrale può essere vista come una grande tabella divisa in celle ognuna delle quali è individuabile attraverso un indirizzo univoco. Usando, quindi, l’indirizzo è possibile accedere ad una qualsiasi di queste celle per eseguire una lettura o una scrittura di informazioni; questo è il motivo per cui questa memoria viene detta Random Access Memory. dato dato dato CU ...... ALU Unità di decodifica istruzione istruzione ...... istruzione Registri A IP PC ...... CPU Memoria Centrale clock L'unità di memorizzazione è il byte, la dimensione di una memoria è scelta tra le potenze di 2. Con un byte (8 bit) si possono rappresentare 256 diversi valori, con 1 kb si arriva a 1024. Nella tabella seguente sono riportati i multipli del byte. 43 Eliminato: ¶ Eliminato: ¶ BIOINFOSTAT Il processo di esecuzione delle istruzioni ed il movimento delle informazioni sia all'interno della CPU che con le altre componenti è regoPrefisso Simbolo Valore lato da un orologio (clock). Questo orologio è semplicemente un segnale elettrico che può Kilo Kb 210 cambiare di stato tra alto e basso voltaggio centinaia di volte al secondo. Mega Mb 220 Eliminato: interruzione pagina 230 La velocità del clock viene misurata in milioni di Hertz (o cicli per secondo), comunemente Tera Tb 2 indicata con MHz. L’intervallo tra due segnali successivi del clock definisce un passo elementare di funzionamento (ciclo macchina). Giga Gb 40 Definite le componenti di una macchina di Von Neumann, cosa succede quando questa deve eseguire un programma, inteso semplicemente come una sequenza di istruzioni scritte in un linguaggio riconoscibile dalla macchina. Intuitivamente si può pensare che la CPU per poter svolgere il suo compito di “unità di processo” deve conoscere, istante per istante: - l’istruzione da eseguire; - i dati da elaborare e la loro posizione in memoria; - l’indirizzo della prossima istruzione da eseguire. Eliminato: ¶ ¶ Eliminato: (cod macchina)? I passi sono: 1. La CU preleva l’istruzione dalla memoria all’indirizzo contenuto nel registro PC (Program Counter) e la memorizza nel registro IR (Instruction Register); 2. Il valore del PC viene aggiornato in modo che contenga l’indirizzo della prossima istruzione da eseguire; 3. La CPU, grazie all’unità di decodifica, interpreta l’istruzione e la esegue con il supporto dell’unità aritmetico-logica (ALU); Se l’istruzione prevede l’elaborazione di dati (es: una somma tra due valori in memoria), la CPU li preleva per salvarli temporaneamente nei suoi registri accumulatori. Dopo aver svolto l’operazione il risultato viene spostato dalla CPU alla memoria. Naturalmente a seconda del comando contenuto nell’istruzione la CPU si comporterà in modo diverso, ma, volendo tentare una generalizzazione, si può affermare che ogni ciclo macchina è idealmente diviso in tre fasi: Me Ce Eliminato: Eliminato: l Eliminato: ¶ fase di fetch → comprende tutte le operazioni svolte dalla CU necessarie al reperimento dell’istruzione; fase di decode → interpretazione dell’istruzione da parte dell’unità di decodifica; fase di execute → esecuzione vera e propria dell’istruzione. Come accennato, le istruzioni sono composte da parole espresse in codice macchina. Immaginiamo di volere sommare due numeri 2 e 3. In codice macchina (attenzione! Il codice macchina dipende dal sistema hardware) questa operazione potrebbe diventare: 180 2 176 3 2 224 44 Eliminato: ¶ BIOINFORMATICA Il numero 180 viene riconosciuto dalla CPU come l’istruzione "copia il valore 2 nel registro AH"; il 176 indica di copiare il numero 3 nel registro AL. L'istruzione 2 224 indica di sommare il contenuto del registro AH con quello del registro AL e di mettere poi il risultato in AH. Le memorie. Vi sono molti tipi di memoria ma le due principali categorie sono: RAM (Random Access Memory) e ROM (Read Only Memory). MEMORIA Veloce Costosa Lenta Economica Volatile Interna (RAM) MEMORIA Esterna (dischi) Permanente La RAM equivale, da un punto di vista logico-funzionale, al blocco di Memoria Principale presente nel modello di Von Neumann. Grazie alla tecnologia e ai materiali utilizzati, le RAM hanno un alto grado di integrazione ed è, quindi, possibile integrare memorie da più megabytes su un singolo chip. Tale tecnologia ha però lo svantaggio di non permettere altissime velocità nel senso che il tempo di accesso è dell’ordine di qualche decina di nanosecondi (10-9 sec). La ROM contiene solo piccole quantità di software di sistema, necessarie ad avviare il calcolatore; è una memoria a sola lettura. Nel campo dell’hardware uno degli obiettivi è certamente quello di ridurre sempre più i tempi di accesso alla memoria e di trasferimento dei dati. In quest’ottica è stata sviluppata la tecnica della memoria cache che fornisce un compromesso tra velocità e costi utilizzando una porzione di memoria veloce per contenere i dati acceduti più di frequente mantenendo l’uso della RAM per consentire l’uso economico di memorie di grandi dimensioni. La memoria cache si trova fisicamente vicino alla CPU e raggiunge la velocità dei nanosecondi. Quando è richiesto una lettura della memoria la cache è ricercata per prima. Una ulteriore possibilità è rappresentata dall'impiego del coprocessore al quale vengono demandate una classe particolare di operazioni. La FPU (Floating Point Unit) è una unità per il calcolo in virgola mobile. Un termine formale per indicare quello che più comunemente è conosciuto come coprocessore matematico (un’altra denominazione è quella di Numeric Data Processor - NDP). Il processore primario nasce per eseguire unicamente calcoli sui numeri interi e quando deve affrontare calcoli più complessi diminuisce sensibilmente la propria efficienza. Il termine di virgola mobile si riferisce a un particolare tipo di notazione matematica che permette di rappresentare in modo sintetico anche numeri molto grandi. La notazione in virgola mobile riporta il segno del numero, il numero stesso (mantissa), la radice del sistema di numerazione in uso (10 nel caso di un sistema decimale) e l’esponente da applicare a tale radice. Il coprocessore matematico è un chip dedicato ai calcoli matematici a virgola mobile (ad esempio il Motorola 68882), alcuni coprocessori sono dedicati al trasferimento dei dati al modem, alla stampante; nel caso si debba lavorare con grafici e colori ad alta risoluzione si deve considerare l'acquisto di coprocessori grafici come ad esempio l'AMD 29000. Nel caso ci si interessi di audio si rendono necessari i chip DSP (processore digitale di segnale). 45 Eliminato: interruzione pagina Eliminato: ¶ BIOINFOSTAT Al fine di guadagnare velocità esistono dei processori chiamati RISC (Reduced Instruction Set Computer) che dispongono di una serie semplificata di istruzioni nella decodifica e nella fase di preparazione degli argomenti di ogni singola istruzione. La velocità maggiore di questi processori viene ottenuta essenzialmente in quanto questi limitano l'accesso alla memoria operando direttamente tra un registro e l'altro. Per questo motivo i RISC dispongono di un numero più elevato di registri. SLOT DI ESPANSIONE. Sono gli alloggiamenti per la scheda grafica, il controller SCSI, la scheda audio, l'adattatore di rete e qualsiasi altro tipo di espansione. Sono di tipo PCI (32 bit a 33 MHz) e ISA (16 bit a 8 MHz). Nelle schede recenti esiste anche uno slot di tipo AGP (Accelerated Graphics Port) per l'interfacciamento con schede grafiche ad alta velocità (32 bit a 66 o 133 MHz) BUS. I componenti del computer ricevono e spediscono informazioni attraverso dei canali chiamati bus. Esistono diversi tipi di bus in ogni computer ma il più importante è il bus che consente il passaggio tra la memoria e il processore. La questione più importante è relativa alla velocità di passaggio dei dati e delle istruzioni. Due sono i fattori che governano questo passaggio la velocità del clock e la larghezza del bus. La velocità è rappresentata dalla quantità di dati che possono essere trasferiti con una operazione. I primi modelli di Pc disponevano di un bus con 8 bit, che può essere rappresentato da 8 linee parallele. Questo implica che l'informazione possa essere trasferita dalla memoria alla CPU un byte per volta. BUS AGP. L'unità attraverso la quale le istruzioni provenienti dalla memoria principale del computer vengono trasferite da e verso il microprocessore. Per assecondare l’incremento della potenza di calcolo delle Cpu, Intel ha sviluppato una nuova architettura denominata Agp. In pratica, tutti i dati in ingresso/uscita dalla Cpu vengono smistati all’AgpSet, che lo convoglia direttamente alla scheda video, alla Ram o al bus Pci. In questo modo si decongestiona il bus Pci, che non deve più trasferire i dati dalla Cpu al controller grafico. Un altro vantaggio dell’Agp è la possibilità da parte della scheda video di utilizzare la Ram di sistema con un evidente vantaggio economico. CHIPSET. Come già accennato, il chipset si incarica di gestire tutti gli elementi presenti sulla scheda madre. I chipset più diffusi per processori Pentium® sono contraddistinti dalle sigle: Hx con supporto della memoria Fast-Page e EDO Ram. Vx che supporta anche le veloci SDRAM e indirizza fino ad un massimo di 128 Mb Tx evoluzione del vecchiotto Vx, gestisce 6 banchi e indirizza fino a 512 Mb supporta anche il protocollo Dma/33 Eide per raddoppiare la velocità massima di trasferimento del controller Eide. Lx per Pentium II composto da 2 chip con supporto alla AGP, SDram, USB e Ultra DMA. Il CHIPSET si divide in NORTHBRIDGE e SOUTHBRIDGE il primo si occupa dei dati diretti alla memoria centrale e alla Cache, il secondo serve a controllare le porte seriali e tutte le periferiche. Cos'è: è un microprocessore integrato nella piastra madre. • Che compito ha: al chipset sono affidati tutti i trasferimenti di dati tra le varie periferiche e tra loro e il microprocessore; è quindi opportuno scegliere un buon chipset nell'assemblare un computer di qualità. • Come è strutturato: è composto da due differenti chip, il North Bridge e il South Bridge; il primo ha dimensioni maggiori rispetto al secondo, mentre il secondo è posto, generalmente, nella metà inferiore della motherboard, nelle vicinanze degli Slot PCI e ISA. Mentre i primi chipset per sistemi Pentium (quelli montati su motherboard dotate di Socket 5) erano formati da più di due chip, da un paio di anni a questa parte tutti i produttori si sono orientati verso una costruzione a due chip, il North Bridge e il South Bridge per l'appunto. In dettaglio, le funzioni di questi due chip sono: 46 BIOINFORMATICA • North Bridge: controlla il funzionamento di tutti i bus e il corretto funzionamento del processore, della memoria centrale e del'adattatore video, installato su bus AGP o PCI; • South Bridge: gestisce i dati che sono indirizzati a tutte le periferiche presenti che non sono indispensabili per il funzionamento del sistema, come il controller per sistemi di memorizzazione di massa, le porte seriali e parallela, le porte USB, PS/2 (Mouse e tastiera) le porte infrarossi, il controller Floppy Disk, i bus PCI e ISA. Le caratteristiche da tenere in considerazione nella scelta di un chipset sono diverse, e tutte hanno un ruolo di notevole importanza per quanto riguarda prestazioni e affidabilità. Le piu' importanti sono: • tipologia cache L2: modalità di gestione della cache L2; • dimensione massima cache L2: quantitativo massimo di memoria cache L2 che può essere gestita dal chipset; questo valore è interessante solo per le motherboard Socket 7 e Super 7, in quanto nelle cpu Slot 1 la cache L2 è direttamente integrata nella cpu stessa; • memoria massima supportata: quantitativo massimo di memoria che il chipset può gestire; • memoria massima cacheable: quantitativo massimo di memoria che può essere letta attraverso la cache L2; se la quantità di memoria installata eccede tale limite si ha un impatto negativo sulle prestazioni complessive; • tipi di memoria supportata: FP (Fast Page); EDO (Extend Data Output); SDRAM (Synchronous Dynamic Random Access Memory); • n^ cpu gestibili: indica quante cpu, dello stesso tipo, il chipset può gestire (configurazioni mono, bi, quadri processore); • USB: supporto all'Universal Serial Bus, bus di comunicazione tra scheda madre e periferiche di controllo e visualizzazione (tastiere, mouse, monitor, altoparlanti, ecc...) di recente implementazione; • AGP: supporto all'Advanced Graphic Port, standard di fatto per gli acceleratori video; • plug & play: supporto al plug & play per il riconoscimento automatico delle periferiche installate da parte del sistema operativo; • versione PCI: la specifica 2.0 ha quale frequenza massima i 33 Mhz per le periferiche PCI, mentre quella 2.1 i 66 Mhz; • ACPI: l'ACPI (Advanced Configuration and Power Interface) è un'interfaccia di programmazione che gestisce le modalità di risparmio energetico della motherboard; • Presenza o meno di controller AUDIO o VIDEO integrati: per ridurre i costi di produzione di PC, alcuni chipset (intel serie 810 e 815, Via MVP4 e KM133) integrano schede audio e schede video. La memoria grafica delle schede video è una frazione (di quantitativo regolabile da bios) della memoria di sistema. Essendo questo tipo di memoria più lento, le prestazioni saranno ridotte rispetto allo stesso modello di scheda video su BUS 47 BIOINFOSTAT AGP o PCI. Un altra caratteristica dei chipset è il tipo di processori che esso può supportare. Questa caratteristica è definita dal tipo di collegamento del processore. CACHE DI ISTRUZIONI. La cache di istruzioni è un magazzino di istruzioni situato proprio sul chip, in modo tale che il microprocessore non deve fermarsi a cercarle nella memoria principale del computer. Questo accesso rapido velocizza l'elaborazione, in quanto le istruzioni vengono trasferite tramite 'fetching' nell'unità di prefetch, dove vengono disposte nell'ordine corretto per l'elaborazione. UNITÀ DI PREFETCH. L'unità di prefetch stabilisce quando ordinare i dati e le istruzioni provenienti dalla cache di istruzioni o dalla memoria principale del computer, in funzione dei comandi o dell'attività in corso. Quando arrivano le istruzioni, l'attività più importante dell'unità di prefetch consiste nell'assicurarsi che vengano tutte allineate correttamente per essere poi inviate all'unità di decodifica. UNITÀ DI DECODIFICA. L'unità di decodifica, come indica il nome, decodifica o traduce le complesse istruzioni in linguaggio macchina in un semplice formato riconosciuto dall'unità ALU (Arithmetic Logic Unit) e dai registri. In questo modo, l'elaborazione diventa più efficiente. UNITÀ DI CONTROLLO. L'unità di controllo è uno dei componenti più importanti del microprocessore, in quanto è responsabile dell'intero processo. In base alle istruzioni provenienti dall'unità di decodifica, crea dei segnali di controllo che indicano all'unità ALU (Arithmetic Logic Unit) e ai registri come operare, su che cosa operare e che cosa fare con il risultato. L'unità di controllo garantisce che tutto avvenga nel posto giusto al momento giusto. ALU (Arithmetic Logic Unit). L'unità ALU rappresenta l'ultima fase di elaborazione nel chip. Si tratta del componente intelligente del chip che esegue comandi come l'addizione, la sottrazione, la moltiplicazione e la divisione. Inoltre, sa leggere i comandi logici come OR, AND o NOT. I messaggi provenienti dall'unità di controllo indicano all'ALU le operazioni da eseguire, quindi questa unità preleva i dati dai componenti più vicini, i registri, per completare l'attività. REGISTRI. I registri sono una piccola area di memorizzazione per i dati utilizzati dall'unità ALU per completare le attività richieste dall'unità di controllo. I dati possono provenire dalla cache di dati, dalla memoria principale o dall'unità di controllo e vengono tutti memorizzati in posizioni speciali all'interno dei registri. In questo modo, l'unità ALU può recuperarli rapidamente e in modo efficiente. CACHE DI DATI. La cache di dati opera a stretto contatto con i suoi "partner dell'elaborazione", vale a dire l'unità ALU, i registri e l'unità di decodifica. È qui che vengono memorizzati i dati con etichette speciali provenienti dall'unità di decodifica per essere poi utilizzati dall'unità ALU, ed è qui che vengono preparati i risultati finali prima della distribuzione ai diversi componenti del computer. MEMORIA PRINCIPALE. La grande area di memorizzazione per i dati situata all'interno del computer principale e all'esterno del microprocessore. Di volta in volta, la memoria principale può inviare dati o istruzioni per l'unità di prefetch, che spesso vengono memorizzati in un indirizzo della cache di istruzioni per essere utilizzati in seguito. MEMORIA CACHE. Una delle attività più lente in un elaboratore è il ricorso alla memoria, sovente l’accesso alla memoria si effettua molte volte durante il ciclo di elaborazione, la velocità di accesso quindi può condizionare le prestazioni di un processore. Per migliorare le prestazioni si ricorre ad una memoria secondaria chiamata cache che viene posta tra la memoria principale e il resto del processore. L’utilizzo di una memoria cache parte dal presupposto che i dati e le istruzioni siano poste in allocazioni vicine fra loro nella memoria principale. 48 BIOINFORMATICA I DISPOSITIVI Come già accennato, i dispositivi sono qualcosa che è separato dal computer inteso come l'insieme di CPU e memoria centrale. A seconda del tipo e della loro collocazione, questi possono essere interni o periferici, ma questo tipo di distinzione è quasi scomparso nel linguaggio normale, tanto che molti chiamano ancora periferiche tutti i dispositivi. Vale la pena di distinguere fra tre tipi di dispositivi fondamentali: • dispositivi di memorizzazione; • dispositivi per l'interazione tra l'utente e il computer; • interfacce di rete. I dispositivi di memorizzazione sono qualunque cosa che sia in grado di conservare dati anche dopo lo spegnimento della macchina. Il supporto di memorizzazione vero e proprio potrebbe essere parte integrante del dispositivo stesso oppure essere rimovibile. I supporti di memorizzazione possono essere di qualunque tipo, anche se attualmente si è abituati ad avere a che fare prevalentemente con dischi (magnetici, ottici o magnetoottici). In passato si è usato di tutto e il primo tipo di supporto di memorizzazione sono state le schede di cartoncino perforate. Anche i dispositivi per l'interazione con l'utente possono avere qualunque forma possibile e immaginabile. Non è il caso di limitarsi all'idea che possa trattarsi solo di tastiera, schermo e mouse. Soprattutto non è il caso di supporre che un computer possa avere solo uno schermo, oppure che possa avere una sola stazione di lavoro. Le interfacce di rete sono i dispositivi che permettono la connessione tra diversi computer in modo da permettere la condivisione di risorse e la comunicazione in generale. Anche in questo caso, non si può semplificare e pensare che possa trattarsi esclusivamente di schede di rete: qualunque porta verso l'esterno può diventare una interfaccia di rete. DISPOSITIVI DI MEMORIZZAZIONE. I dispositivi di memorizzazione sono fondamentalmente di due tipi: ad accesso sequenziale e ad accesso diretto. Nel primo caso, i dati possono essere memorizzati e riletti solo in modo sequenziale, senza la possibilità di accedere rapidamente a un punto desiderato, come nel caso dei nastri magnetici usati ancora oggi come mezzo economico per archiviare dati. Nel secondo caso, i dati vengono registrati e riletti accedendovi direttamente, come nel caso dei dischi. I dispositivi di memorizzazione ad accesso diretto, per poter gestire effettivamente questa loro caratteristica, richiedono la presenza di un sistema che organizzi lo spazio disponibile al loro interno. Questa organizzazione si chiama filesystem. DISPOSITIVI DI MEMORIA SECONDARIA. Il disco fisso è quella parte del sistema che memorizza i file di dati. Uno dei primi e dei più importanti standard introdotti nell’hardware del PC è costituito dallo IDE (Integrated Drive Electronics): uno standard che controlla il flusso dei dati tra il processore e il disco fisso. Un controller IDE può gestire due dischi e la velocità di trasferimento è di 1-4 Mbyte al secondo. L’idea IDE è stata proposta inizialmente nel 1986 da Western Digital e da Compaq, per superare i limiti nelle prestazioni dei primi standard. Una delle principali innovazioni portate con sé dal sistema IDE è stata l’integrazione delle funzioni del controller all’interno del disco stesso. Il rendimento risulta influenzato in maniera determinante dal controller, cioè dalla scheda preposta al controllo del disco. Una seconda tipologia di controller è rappresentata dallo SCSI (Small Computer Interface), una tecnologia più complessa in grado di gestire fino a 7 unità con una velocità di trasferimento di circa 5 Mbyte al secondo. Un parametro per valutare le prestazioni di questi dispositivi è dato da il "tempo medio di accesso": si tratta del tempo impiegato dal disco per individuare la traccia nella quale è immagazzinato un dato, oltre che la sua posizione specifica all’interno della traccia. Questo valore viene normalmente indicato in millisecondi (ms). 49 BIOINFOSTAT Oltre al tempo medio di accesso, è necessario prendere in considerazione il "transfer rate", cioè la velocità con la quale il disco è in grado di trasferire i dati dalla sua superficie verso la CPU. Questo valore viene in generale indicato in Mbyte al secondo (Mbps). Una unità a dischi magnetici è costituita da uno o più piatti (anche una decina) ricoperti da materiale magnetico. I dischi più piccoli sono chiamati floppy e sono formati da un solo piatto. Ciascuna delle superfici è fornita di una testina di lettura che si muove verso l'interno o l'esterno per leggere le informazioni che sono scritte a distanze differenti dal centro. L'unità disco ruota con una velocità di diverse migliaia di giri al minuto; in questo modo la testina passa circa 60 volte al secondo sulla stessa superficie. Le informazioni sono disposte sul disco in tracce, un dischetto a singola faccia usa una sola superficie del piatto e può avere da 40 a 80 tracce suddivise in sezioni o settori, mentre un hard disk può avere 10 piastre con venti superfici ed ogni superficie può avere 1000 tracce, ed ogni traccia contenere 50.000 byte. del sistema nella RAM (questa operazione è chiamata boot-loader) Nelle altre zone circolari del dischetto (settori) vengono memorizzate le copie della tabella di allocazione dei file che si chiama FAT (File Allocation Table) e che costituisce una mappa dei settori utilizzati e di quelli liberi. Quindi ogni informazione viene individuata con un indirizzo fisico definito dal numero del settore, numero della traccia, numero del lato; a questo viene associato un indirizzo logico corrispondente al numero progressivo del settore. La tabella di allocazione dei file viene realizzata in più copie per reperire le informazioni corrette. DIR 1 FAT 1 BOOT Quando si effettua una cancellazione di un file, nella pratica si elimina solo il primo carattere dell’indirizzario di appartenenza e rendendo disponibile lo spazio sul disco mappato. In questo momento i dati sono ancora residenti e vengono cancellati solo quando nel settore viene soprascritta. Di seguito vengono riportati alcuni esempi di DIR e di FAT. SCHEMA DIR Nome Dimensioni Data Ora Indirizzo Attributi FILE1 1425 10-05-01 13:45 3 A FILE2 2255 10-07-01 18:12 4 A FILE3 1589 18-05-01 04:19 5 A SCHEMA FAT 1 9 X EOF 2 X 0 3 4 0 4 5 5 0 EOF 0 6 8 0 7 EOF 0 8 9 0 Il termine EOF indica la fine del file. I file del nucleo del sistema operativo risiedono nei primi settori del disco fisso e sono protetti dalle normali operazioni di cancellazione o modifica accidentale. 50 BIOINFORMATICA LE UNITÀ WROM. (Write Once, Read Many times) consentono di scrivere una sola volta, ma di leggere molte volte il disco; hanno una capacità variabile tra 400 e 800 Mb. Una tecnologia nuova sono le unità magneto-ottiche che consentono la riscrittura dei dischi. Hanno a seconda delle dimensioni una capacità da 500-600 Mb nelle cartucce da 5" 1/4, mentre nel formato da 3"1/2 il contenuto é di 125 Mb, i tempi di accesso sono dell'ordine di 60 millisecondi. NASTRO MAGNETICO. Rappresenta il sistema più economico per l’immagazzinamento di grandi quantità di dati, simile per struttura ai comuni tape per la registrazione delle musica. Le unità a nastro magnetico consentono di registrare e leggere su nastro e sono costituite da una testina di lettura e scrittura e nelle apparecchiature più complesse di colonne di depressione per mantenere in tensione il nastro e per consentire un arresto rapido del nastro. Il nastro magnetico presenta un accesso di tipo sequenziale. CD-ROM. Il CD-ROM, ormai uno standard su quasi tutti i nuovi PC, è in grado di memorizzare una quantità di dati più di 400 volte superiore rispetto ad un dischetto, vale a dire 650 MB. L'unità CD-ROM di un sistema da acquistare dovrebbe essere almeno di tipo 16x. Il numero che precede la "x" indica il numero per cui moltiplicare la velocità di trasferimento dati di un normale lettore di CD audio; si tenga presente che diversi lettori CD-ROM utilizzano la sigla maX per indicare la massima velocità raggiungibile nella sezione più esterna del supporto CD-ROM. Il CD-ROM standard serve da dispositivo di memorizzazione per i dati. Un altro tipo di CD è il CD-R, che è scrivibile oltre che leggibile. Questo tipo di unità è particolarmente adatto per la memorizzazione di immagini, audio e file di dati. DVD. Si tratta dell'ultimo sviluppo nel campo della memorizzazione e del trasferimento di dati. Il DVD, acronimo di Digital Versatile Disk, consente di memorizzare una quantità di dati circa 10 volte superiore rispetto ad un'unità CD-ROM standard. Con questo tipo di capacità, è iniziata una nuova era ricca di opportunità per il software ad elevato contenuto multimediale. Attualmente, il DVD offre video di qualità e altri tipi di intrattenimento in una soluzione compatta e facile da utilizzare. La capacità dei dischi DVD varia da 4,7 GB (singola faccia, singola densità) a 15,9 GB (doppia faccia, doppia densità) e le unità sono anche in grado di leggere i CD-ROM tradizionali. Per il momento, il DVD non è scrivibile. DISPOSITIVI PER L'INTERAZIONE TRA L'UTENTE E LA MACCHINA. Se escludiamo il periodo delle schede perforate, si può dire che il primo tipo di strumento per l'interazione tra utente e macchina sia stato la telescrivente: una sorta di macchina da scrivere in grado di ricevere input dalla tastiera e di emettere output attraverso la stampante. In questo modo, l'input umano (da tastiera) era costituito da righe di testo che terminavano con un codice per il ritorno a capo (newline), e nello stesso modo era composto l'output che appariva su carta. La telescrivente era (ed è) un terminale del computer. Ormai, la stampante della telescrivente è stata sostituita da uno schermo, che però, spesso si comporta nello stesso modo: emette un flusso di testo dal basso verso l'alto, così come scorre la carta a modulo continuo attraverso una stampante. In questa situazione, la stampante ha preso un suo ruolo indipendente dal terminale originale e serve come mezzo di emissione di output finale, piuttosto che come mezzo per l'interazione. Il terminale, composto da tastiera e schermo, o comunque da una unità per ricevere l'input ed un'altra per emettere l'output, viene visto normalmente come una cosa sola. Quando si tratta di quello principale, si parla in particolare di console. TASTIERA. La tastiera è una tavoletta composta da un insieme di tasti, ognuno dei quali genera un impulso particolare. È il computer che si occupa di interpretare e tradurre gli impulsi della tastiera. Questo sistema permette poi di attribuire ai tasti particolari funzioni. Questo significa anche che non esiste uno standard generale di quello che una tastiera deve avere. Di solito si hanno a disposizione tasti che permettono di scrivere le lettere dell'alfabeto inglese, i simboli di punteggiatura consueti e i numeri; tutto il resto è opzionale. Tanto più opzionali sono i tasti a cui si attribuiscono solitamente funzioni particolari. Questa considerazione è importante soprattutto per chi non vuole rimanere 51 BIOINFOSTAT relegato a una particolare architettura di computer. Nell'ambito della ricerca è importante che nella tastiera sia riservato uno spazio per il tastierino numerico, necessario per accelerare l'immissione di dati numerici. SCHERMO. Il terminale più semplice è composto da una tastiera e uno schermo, ma questa non è l'unica possibilità. Infatti, ci possono essere terminali con più schermi, ognuno per un diverso tipo di output. Nel tempo, l'uso dello schermo si è evoluto, dalla semplice emissione sequenziale di output come emulazione di una stampante, a una sorta di guida di inserimento di dati attraverso modelli-tipo. Le maschere video sono questi modelli-tipo attraverso cui l'input della tastiera viene guidato da un campo all'altro. L'ultima fase dell'evoluzione degli schermi è quella grafica, nella quale si inserisce anche l'uso di un dispositivo di puntamento, solitamente il mouse, come una estensione della tastiera. STAMPANTE. Le stampanti tradizionali sono solo in grado di emettere un flusso di testo, come avveniva con le telescriventi. Più di recente, con l'introduzione delle stampanti ad aghi, si è aggiunta la possibilità di comandare direttamente gli aghi in modo da ottenere una stampa grafica. Ma quando la stampa diventa grafica, entrano in gioco le caratteristiche particolari della stampante. Per questo, l'ultima fase evolutiva della stampa è stata l'introduzione dei linguaggi di stampa, tra cui il più importante è stato ed è PostScript, come mezzo di definizione della stampa in modo indipendente dalle caratteristiche della stampante stessa. In questo modo, l'output ricevuto dalle stampanti può essere costruito sempre nello stesso modo, lasciando alle stampanti l'onere di trasformarlo in base alle loro caratteristiche e capacità. CODICI A BARRE. I codici a barre sono diventati attualmente uno standard per descrivere le informazioni sui prodotti. Un codice a barre è formato da una serie di righe verticali, scritte con un inchiostro nero. I caratteri sono rappresentati dallo spessore delle righe che si combinano tra di loro. Il codice che ha la maggior diffusione è l’European Article Number (EAN) che associa ad ogni articolo un codice di dodici cifre, più una cifra di parità. Sistema operativo. Il sistema operativo di un computer è il programma più importante. È quello che viene attivato al momento dell'accensione del computer; esso esegue gli altri programmi. Sarebbe come se il cuoco eseguisse una ricetta (il sistema operativo) che gli da le istruzioni per poter eseguire le altre ricette. Il sistema operativo determina quindi il comportamento del computer. Cambiare sistema operativo in un computer è come cambiare il direttore di un ufficio: a seconda della sua professionalità e delle sue doti personali, l'ufficio funzionerà in modo più o meno efficiente rispetto a prima, e pur se non cambia niente altro, per gli impiegati potrebbe tradursi in un modo di lavorare completamente nuovo. UTENTE COMANDI Sistema Operativo INTERPRETE PROGRAMMI APPLICATIVI TRADUTTORE 52 NUCLEO Sistema Operativo BIOINFORMATICA Un utente del computer ha la necessità di utilizzare le risorse della macchina e di programmarla a tale scopo il sistema operativo gli mette a disposizione diversi strumenti. 1-Comandi di lettura scrittura sui diversi supporti di memorizzazione senza che l’utente debba conoscere le caratteristiche dei diversi dispositivi. 2-Gestore dei file (file System) è un sistema semplice ed efficiente di archiviazione e ricerca delle informazioni. 3-Traduttori una serie di traduttori che permettono di tradurre le istruzioni in un linguaggio simbolico (sorgente) in microistruzioni in linguaggio macchina. I traduttori di basso livello vengono definiti come assemblatori. I compilatori traducono un intero programma sorgente in un linguaggio macchina, mentre gli interpreti se viene interpretata ogni singola linea di programma e posta in esecuzione immediata. 4-Caricatore (loader) che prevede a copiare il programma dalla memoria di massa alla memoria centrale RAM affinché possa essere eseguito dal processore: 5-Editore di testi (text Editor) che consente di comporre testi in formato ASCII mediante tastiera. 6-Un analizzatore di errori di programma (debugger) che consente la correzione e la messa a punto dei programmi. 7-Una serie di programmi per la gestione della memoria e delle periferiche. 8-Programmi per l’ordinamento dei dati (sortine) e la loro successiva ricerca. 9-Programmi di interfaccia sistema/utente, anche di tipo grafico per facilitare la comunicazione uomo/macchina. Ci sono sicuramente affinità tra un sistema operativo e l'altro, ma questo vuol sempre dire una marea di dettagli differenti e soprattutto l'impossibilità di fare funzionare lo stesso programma su due sistemi operativi differenti, a meno che ciò sia stato previsto e voluto da chi costruisce i sistemi operativi. Il Sistema operativo costituisce una piattaforma sulla quale sono appoggiati tutti i programmi che consentono il funzionamento del Computer. L’adozione del sistema determina le applicazioni che possono funzionare ed essere utilizzate sul computer. Data la struttura dei sistemi operativi è evidente che i programmi devono essere costruiti per quel particolare sistema operativo. Il sistema operativo non si limita solo a rendere possibile l’esecuzione dei programmi, regola il collegamento con tutte le periferiche. Attualmente la stragrande maggioranza dei computer utilizza i sistemi operativi derivati da Windows, ma esistono soluzioni alternative che possono presentare dei vantaggi. Un sistema operativo è costituito da una serie di programmi, logicamente separati tra loro, che assieme formano un software spesso di grandi dimensioni. Senza un sistema operativo un elaboratore personale è praticamente inutilizzabile. Nella pratica quindi un sistema operativo fornisce un metodo per poter interagire con l'utente. Un sistema operativo deve svolgere delle funzioni essenziali per il funzionamento di un elaboratore. Non è però chiaro quali siano esattamente le funzioni che devono appartenere al sistema operativo e quelle che possono essere considerate delle semplici applicazioni. Nel campo informatico sono stati sviluppati diversi sistemi operativi, che differiscono considerevolmente nelle funzionalità di base e nella filosofia che li anima nella gestione delle risorse. Si pensi all'enorme differenza che esiste tra alcuni sistemi operativi, da cui deriva anche una certa difficoltà al confronto in quanto si tratta di oggetti diversi, nati e cresciuti con obiettivi e finalità diverse. Negli anni '70 la scena del mercato dei computer era dominata dalla IBM che produceva macchine enormi destinate ai centri di calcolo; per effettuare un calcolo si doveva prendere appuntamento, programmare i calcoli, e successivamente si otteneva un listato chiamato output di stampa, sul quale si potevano leggere i risultati dei calcoli. Una piccola rivoluzione nacque con l'introduzione sul mercato dei minicomputer ed in particolare del 53 BIOINFOSTAT modello Pdp 10 della Digital. Su questa macchina iniziò a lavorare Bill Gates che di notte controllava gli errori dei programmi (debugging). In quel periodo non esisteva quello che noi conosciamo come il software, ma ogni macchina aveva dei programmi specifici. Nel 1974 sempre Bill Gates creò una versione particolare del Basic ed iniziò a commercializzarlo. Negli stessi anni una società americana la Altair inizia le vendite per corrispondenza del primo microcomputer, le capacità operative di questa macchina erano davvero limitate. Paul Allen e Bill Gates prepararono una versione Basic per l'Altair che montava un processore Intel 8080, e contemporaneamente fondarono la Microsoft. Il successo fu enorme tanto da spingere la IBM a creare una task force dedicata allo sviluppo dei minicomputer; non si parlava ancora dei personal computer. Nel 1981 viene presentato il primo personal computer IBM con una struttura standard espandibile attraverso il bus Isa. Il computer montava un processore Intel in un ambiente Basic nella Rom e il nuovo sistema operativo chiamato DOS (Disk Operating System). In effetti il sistema DOS non è stato creato dalla Microsoft, ma bensì acquistato da una società di Seattle che aveva creato un clone del sistema Cp/M della Digital. La Digital stessa si rifiutò di sviluppare il DOS e la IBM ricorse all'aiuto di Gates ed Allen che fornirono il sistema. Si chiude in questo momento la prima fase dell'era informatica. Lo scopo di un sistema operativo è quello di nascondere la struttura intima di un calcolatore. Si ha una struttura a cipolla. All'interno della cipolla si ha l'hardware, nel primo strato esterno si impiega il linguaggio macchina e si trovano le procedure di gestione delle interruzioni e dei driver. Le procedure di interruzione mettono il computer in uno stato di attesa di un evento. Ad esempio attende che un tasto della tastiera venga premuto. Un driver (letteralmente autista) è generalmente una astrazione che consente di risparmiare molto tempo nelle operazioni di trasferimento. In pratica ogni dispositivo di ingresso/uscita possiede un suo proprio drive che ne regola direttamente la gestione senza disturbare il programma in esecuzione. Nel secondo strato troviamo i device, cioè dispositivi logici che sfruttano e comandano i vari dispositivi fisici; sono device ad esempio, il monitor, la tastiera, la stampante. Un device non comanda direttamente i dispositivi esterni, ma sfrutta i driver presenti al primo livello. Un device ha quindi una serie di procedure indispensabili per accedere alle funzioni dei dispositivi. Nel terzo livello troviamo lo strato file system, che rappresenta le modalità con cui viene interrogata la memoria di massa. Il file system consente ad esempio di conservare degli oggetti anche quando si spegne la macchina. Un file è una sequenza logica di informazioni che nelle memorie di massa sono necessarie per riconoscere un documento. L'accesso alle memorie di massa generalmente è casuale e frammentato, pertanto il file deve essere ricostruito prelevandolo dai diversi blocchi nei quali è stato posizionato. Si tratta quindi di dare tutte le informazioni di posizionamento alle testine di lettura per recuperare le informazioni richieste e trasformarle in codice binario. Nel terzo strato troviamo una specie di convertitore che trasforma ed ordina logicamente i file nelle cartelle. Il quarto stato effettua il collegamento con gli strati inferiori e le applicazioni finali, in alcuni sistemi l'intero strato è denominato User Interface Toolbox e risulta suddiviso in blocchi logici separati chiamati con il nome di Manager. Ciascun gruppo è rappresentato da una serie di procedure, che ogni applicazione può richiamare per ottenere dei servizi dal sistema operativo. L'insieme di tutte le procedure viene chiamata API (Application Program Interface). Esistono quindi diversi Manager; possiamo avere una Memory Manager che fornisce una serie di istruzioni per la gestione della memoria RAM, il Font Manger si occupa della gestione dei caratteri, il Window Manger, il Control Manger, il Dialog Manager, tutti manager che gestiscono la visualizzazione di oggetti tipici dell'interfaccia. L'ultimo strato del sistema è rappresentato dall'interfaccia utente. Una volta veniva chiamato semplicemente interprete comandi, in quanto l'utente interagiva direttamente con la macchina attraverso dei comandi. I compiti essenziali di un'interfaccia utente sono quelli di rendere visibile l'organizzazione dei file, di fornire assistenza al lancio di applicazioni. 54 BIOINFORMATICA IL SISTEMA OPERATIVO. Il sistema operativo è ciò che regola il funzionamento di tutto l'insieme di queste cose. Volendo schematizzare, si possono distinguere tre elementi Formattati: Elenchi numerati • il kernel • la shell • i programmi di utilità. KERNEL. Il kernel è il nocciolo del sistema. Idealmente, è una sorta di astrazione nei confronti delle caratteristiche fisiche della macchina ed è il livello a cui i programmi si rivolgono per qualunque operazione. Ciò significa, per esempio, che i programmi non devono (non dovrebbero) accedere direttamente ai dispositivi fisici, ma possono utilizzare dispositivi logici definiti dal kernel. Questa è la base su cui si fonda la portabilità di un sistema operativo su piattaforme fisiche differenti. Il kernel avvolge idealmente il computer e i suoi dispositivi fisici, ovvero tutto l'hardware, e si occupa di interagire con i programmi che ignorano il computer fisico. La portabilità è quindi la possibilità di trasferire dei programmi su piattaforme differenti, e ciò si attua normalmente in presenza di kernel che forniscono funzionalità compatibili. PROGRAMMI SHELL KERNEL SHELL P R O G R A MM I HARDWARE KERNEL Kernel e Shell Naturalmente esistono sistemi operativi che non forniscono kernel tanto sofisticati e lasciano ai programmi l'onere di accedere direttamente alle unità fisiche del computer. Si tratta però di sistemi di serie "B'', anche se la loro nascita è derivata da evidenti necessità causate dalle limitazioni di risorse dei computer per i quali venivano progettati. SHELL. Il kernel offre i suoi servizi e l'accesso ai dispositivi attraverso chiamate di funzione. Però, mentre i programmi accedono direttamente a questi, perché l'utente possa accedere ai servizi del sistema occorre un programma particolare che si ponga come intermediario tra l'utente (attraverso il terminale) e il kernel. Questo tipo di programma è detto shell. Come suggerisce il nome (conchiglia), si tratta di qualcosa che avvolge il kernel, come se quest'ultimo fosse una perla. La shell è il programma che consente all'utente di accedere al sistema. I terminali attraverso cui si interagisce con la shell sono comunque parte dell'hardware controllato dal kernel. Un programma shell può essere qualunque cose, purché in grado di permettere all'utente di avviare, e possibilmente, controllare i programmi. La forma più semplice, e anche la più vecchia, è la riga di comando presentata da un invito, o prompt. Questo sistema ha il vantaggio di poter essere utilizzato in qualunque tipo di terminale, compresa la telescrivente. Nella sua forma più evoluta, può arrivare a un sistema grafico di icone o di oggetti grafici simili, oppure ancora a un sistema di riconoscimento di comandi in forma vocale. Si tratta sempre di shell. 55 BIOINFOSTAT MULTITASKING. Una componente del sistema operativo è responsabile delle risorse dei computer tra le diverse task, si definisce questo processo task schedular. Esistono due possibilità nella gestione delle task. Uno scheduling preventivo e uno cooperativo detto anche non preventivo. Con lo scheduling preventivo, il task scheduler é legato al battito interno del computer che regola le operazioni. Il task schedular assegna ad ogni task il controllo delle risorse del computer per un tempo determinato. Quando questo tempo è trascorso il sistema operativo mette in attesa l'applicazione e dedica il suo tempo all'applicazione successiva. Nello scheduling cooperativo non esiste un tempo di allocazione riservata. La divisione del tempo del microprocessore è divisa tra tutte le applicazioni in esecuzione. Una applicazione quindi deve cedere il controllo del microprocessore ad intervalli frequenti in modo che le altre applicazioni abbiano il tempo per l'esecuzione. Se un programma si impossessa del microprocessore per troppo tempo, l'esecuzione degli altri programmi rallenta vistosamente fino all'arresto. L'inconveniente di questo sistema è che se un programma si blocca, tutto il sistema resta bloccato. PROGRAMMI DI UTILITÀ. I programmi di utilità sono un insieme di piccole applicazioni utili per la gestione del sistema. Teoricamente, tutte le funzionalità amministrative per la gestione del sistema potrebbero essere incorporate in una shell, in pratica, questo solitamente non si fa. Dal momento che le shell tradizionali incorporano alcuni comandi di uso frequente, spesso si perde la cognizione della differenza che c'è tra le funzionalità fornite dalla shell e i programmi di utilità. PROGRAMMI APPLICATIVI. Il computer non può essere una macchina fine a se stessa. Deve servire a qualcosa, al limite a giocare. È importante ricordare che tutto nasce da un bisogno da soddisfare. I programmi applicativi sono quelli che (finalmente) servono a soddisfare i bisogni, e quindi, rappresentano l'unica motivazione per l'esistenza dei computer. IL SISTEMA OPERATIVO IN 5 PUNTI MULTIUTENTE = possono essere utilizzati da più utenti contemporaneamente. MULTITASKING = possono essere eseguite contemporaneamente più applicazioni. MULTIHREADING = possono essere eseguite in modo concorrente diverse componenti di una stessa applicazione. MULTIPROCESSING = possibilità di utilizzare più unità centrali contemporaneamente. SISTEMI REAL-TIME = dare la garanzia di risposta in tempi brevissimi. MS-DOS. Quando IBM introdusse il primo personal computer negli anni '80 si prevedeva la vendita di poche unità e la società non si preoccupò di renderli di facile utilizzo. La IBM si accordò con una piccola società; la Microsoft, per dotare i calcolatori di un sistema operativo. La Microsoft fornì un sistema chiamato MS-DOS che si rilevò un enorme successo commerciale, non si può dire che il sistema fosse facile in quanto richiede agli utenti di digitare parole chiave mnemoniche. Tale sistema è considerato un'interfaccia a linea di comando; i comandi devono essere digitati al prompt del DOS e non viene fornita nessuna indicazione del nome da immettere. Ad esempio compare c:/> Attualmente i computer sono diventati più potenti e più veloci, ma nessuno vuole abbandonare il sistema MS-DOS in quanto tutti i programmi costruiti in DOS potrebbero non essere più compatibili. WINDOW. Il progetto Windows nasce nel 1983 per sopperire ai limiti del DOS. Microsoft era consapevole che MS-DOS stesse invecchiando molto velocemente, gli utenti abituati ad esempio al telecomando non erano disponibili a digitare complicate istruzioni per eseguire qualsiasi operazione. Nasce da questa esigenza Window, che presentava sullo schermo 56 BIOINFORMATICA una serie di immagini chiamate icone; con le icone era necessario semplicemente puntare il mouse sulle icone stesse. Negli stessi anni nasce il fenomeno commerciale delle Compaq che tende ad imporre uno nuovo standard costruttivo, basato sull'architettura Microchannel dei Ps/2. Il sistema era proprietario e quindi costoso, il mercato in notevole fermento propose un sistema equivalente, la Pci. IBM voleva avere dei computer unici e superiori a quelli della concorrenza e che tali computer facessero riferimento sia per l'architettura che per il sistema operativo a quelli dei suoi grandi computer i mainframe. IBM, che aveva una alleanza con Microsoft dal 1985 voleva che Windows fosse destinato alla fascia bassa del mercato per un passaggio al sistema Os/2. Il mercato nella fase iniziale non offrì la rispondenza attesa. Nel frattempo si sviluppano versioni di programmi definiti di "produttività personale" o di office automation. Nel maggio 1990 viene presentato Windows 3.0 e Bill Gates conia la celebre frase "information at your fingertips" (informazioni sulla punta della dita) ed inizia il vero successo commerciale di Windows. Negli anni successivi la crescita dell'hardware ha guidato la crescita del software. Windows 3 non era un multitasking e non era in grado di sfruttare al meglio la modalità protetta e il codice era a 16 bit, la capacità di coesistenza delle applicazioni era demandata alle applicazioni stesse, piuttosto che al sistema operativo, si trattava sostanzialmente di un multitasking cooperativo. Negli anni '90 i rapporti con IBM si fanno tesi e nel 1992 la IBM presenta una prima versione autonoma del sistema a 32 bit del suo Os/2, le relazioni si rompono e la Microsoft annuncia il progetto NT, un sistema di fascia alta. Le successive versioni di Windows 3.x affinano sempre più le capacità di gestione, vengono rese pubbliche le librerie di programmazione del sistema operativo (sono chiamate API), successivamente vengono rese pubbliche anche le librerie Win 32, un set di API che dovrebbero essere comuni a Windows NT e al successore del 3.x che in codice viene chiamato Chicago. Si tratta dunque di un progetto che tende a far evolvere dai 16 bit ai 32 bit (il che permette di superare ogni limite di indirizzamento della memoria: 4 Gigabyte). Nasce da precise esigenze di mercato Windows 95 e la sua evoluzione Windows 98. Siamo di fronte a sistemi che adottano un codice misto a 16 e 32 bit, ad un multitasking in parte cooperativo e in parte preemptiv, con alcune tracce ancora del vecchio Dos. Con il termine Fat32 indichiamo la struttura della tabella di allocazione dei file e con il termine 32 i bit supportati per la definizione dei singoli campi. Uno dei grossi limiti di Windows 95 è stato quello di non prevedere una partizione di grandezza superiore ai 2 Giga byte. Con l'utilizzo della Fat32 viene drasticamente ridotta la dimensione dello spazio fisico occupato dai file di piccole dimensioni e pertanto sfruttiamo meglio lo spazio a disposizione sul disco rigido. Windows 98 eredita quindi da Windows 95 ed aggiunge dei componenti fondamentali per il passaggio a NT, attraverso un driver chiamato Win "Device Driver Model" ed uguale per i due sistemi. Per concludere questa breve rassegna possiamo dire che il sogno di IBM si è realizzato con un piccolo particolare che il sistema sul quale converge Windows non è OS/2 ma NT 4, o la prossima versione NT 5 attesa per il 2000. Window è stato un grosso successo, ma il problema di fondo rimaneva in quanto Window non sostituisce il DOS, ma funzionava sopra il DOS. Da un punto di vista commerciale era quindi necessario acquistare sia il DOS che Window per rendere operativo un Pc. UNIX. Il nome Unix deriva da MULTICS, acronimo di Multiuser Interactive Computer System, un progetto iniziato al M.I.T. verso la metà degli anni '60. In questo progetto vi era la finalità di definire uno standard per i sistemi operativi, attuabile da tutti i produttori. In questo modo i programmatori potevano elaborare pacchetti di software eseguibili in molti tipi di computer, inoltre gli utenti che avevano confidenza con una interfaccia avrebbero potuto utilizzare con più facilità computer differenti. Pur avendo deluso in parte queste attese UNIX rimane uno standard per i computer a livello superiore. Il sistema operativo UNIX è generalmente installato sui mini e microcalcolatori, tale sistema ha conosciuto un notevole sviluppo ed una diffusione negli anni recenti in quanto si adatta ad ambienti di lavoro diversi (editoria, elaborazione testi, applicazioni scientifiche). L'interesse é aumentato in quanto il grandi calcolatori interagiscono tra loro attraverso UNIX. Le caratteristiche di semplicità sono il risultato di un insieme ridotto di meccanismi ben 57 BIOINFOSTAT combinati tra di loro che lo rendono un sistema operativo adatto allo sviluppo di programmi. Il sistema UNIX nasce nei laboratori Bell, sviluppato da D. Ritchie e K. Thompson nel 1969, le prime versioni vennero distribuite gratuitamente alle scuole, College ed Università americane. Una delle prime scuole a ricevere UNIX fu l'Università di Berkeley che in seguito commercializzò una versione chiamata UNIX BSD (Berkeley Software Distribution) giunta attualmente alla versione 4.3. Una delle principali versioni di Unix sviluppata nel periodo che va dal 1979 al 1993 presso il Computer System Research Group dell’Università di Berkeley in California. Il BSD ha giocato un ruolo fondamentale nel favorire la crescita di Internet poiché è stata la prima versione di Unix a incorporare gratuitamente il protocollo TCP/IP oltre ad altre funzioni innovative come la commutazione dei task (task switching), l’uso di 255 caratteri per i nomi dei file e la gestione della memoria virtuale (area su disco che viene vista come un’estensione della memoria centrale, altrimenti detta RAM). Il gruppo incaricato di questo sviluppo fu capitanato da Bill Joy fino al 1982, anno in cui quest’ultimo fondò la Sun Microsystems usando la versione 4.2 del BSD Unix come base per il proprio SunOS. Il BSD fu distribuito gratuitamente a centinaia di college e università americane e fu utilizzato da queste come ambiente di lavoro e di connessione in rete. Oggi l’Università di Berkeley non è più impegnata direttamente nello sviluppo di Unix, tuttavia alcune delle componenti introdotte allora, come le socket, sono diventate uno standard per tutte le versioni di Unix in commercio. Molti dei laureati di Berkeley si impiegarono in società informatiche pertanto derivarono delle versioni UNIX particolari; Sun OS della Sun Microsystem, HP-UNIX della Hewelett-Pakard, AIX della IBM. La Bell successivamente sviluppò una versione conosciuta come System 5. A questo punto il Sistem V e l'UNIX BSD si fusero insieme creando una società la Open Software Foundation che iniziò a commercializzare un altro tipo di UNIX: OSF/1. Senza un sistema operativo sofisticato un computer può eseguire una sola unzione alla volta; con UNIX nasce il multitasking; cioè la possibilità di volgere più attività contemporaneamente, inoltre UNIX è multiutente, esiste la possibilità per diversi utenti di condividere lo stesso computer nello stesso arco di tempo. Il sistema è fornito di strumenti di elaborazione testi, programmi di utilità, un programma per la gestione della posta elettronica e un file system per memorizzare queste informazioni. Il Sistema UNIX si divide in tre parti: Il nucleo che gestisce ed organizza le operazioni tra le diverse unità. Il file system è la struttura che organizza i dati e rappresenta una parte molto importante. La shell è l'interprete dei comandi e costituisce il guscio esterno del sistema a diretto contatto con l'utente. Gli interpreti si dividono in due gruppi il Bourne ed è evidente quando al promt compare il simbolo $. L'interprete C attribuisce essenzialmente ai caratteri di punteggiatura un maggior numero di significati. Come MS-DOS, Unix è un sistema operativo, dice al computer come fare certe cose. Ora, anche se UNIX ha la reputazione di essere più complesso di MS-DOS, nella maggior parte dei casi pochi comandi semplici e basilari saranno sufficienti. A differenza di MS-DOS, UNIX è sensibile alle maiuscole, se si digitano i comandi o le directory nel modo sbagliato, si riceverà un messaggio d'errore. DOS UNIX DIR 1s-al Lista dei file nella directory Descrizione DIR/W 1s Semplice lista dei file DEL rm Elimina un file COPY cp Copia un file RENAME mv Rinomina un file 58 BIOINFORMATICA FIND grep Trova una stringa ASCI in un file Le directory di UNIX sono organizzate come i rami di un albero. Alla base è presente la directory "root", con sotto-directory che si ramificano da questa (e le sotto-directory possono avere delle altre sotto-directory). L'equivalente Mac di una sotto-directory UNIX è una cartella contenente un'altra cartella. 59 BIOINFOSTAT BASI DI DATI Al contrario dei dati utilizzati all'interno di un programma (come ad esempio le variabili, gli array, le strutture dati dinamiche, ecc.), archivi (o file) e basi di dati (database) memorizzano dati in maniera permanente (i dati rimangono in memoria anche in seguito alla terminazione di una data applicazione o allo spegnimento della macchina). Si definisce archivio l'insieme dei dati che vengono salvati su un supporto di memorizzazione (disco). Un database è un archivio con una particolare struttura. In particolare, i database sono formati da oggetti detti record. Un passo fondamentale (ma non l'unico) nella definizione di un database consiste nella descrizione di come sono formati i record, ovvero il numero, il nome e i tipi di dato che essi contengono, oltre ad altre informazioni complementari.In altri termini, definire un database significa sia descrivere i dati che lo compongono, sia fornire una definizione di questi dati (ad esempio, come sono organizzati, il loro significato, ecc.). La principale differenza tra archivio e database, dunque, è la seguente: Se si usano gli archivi, la definizione dei dati, del loro significato e del modo in cui sono organizzati è parte integrante dell'applicazione: Se si usano i database, la definizione della struttura dei dati è indipendente dall'applicazione: DataBase Management System Un DBMS è una collezione di file tra loro collegati ed un insieme di programmi che permettono accessi e modifiche ai dati. Lo scopo principale di un DBMS è di fornire un ambiente efficiente e conveniente per accedere e memorizzare grandi collezioni di dati. La gestione di questi dati implica la definizione di strutture fisiche per la memorizzazione e di meccanismi per la manipolazione delle informazioni. Un DBMS deve inoltre gestire e controllare l’accesso concorrente degli utenti e le loro autorizzazioni. Un DBMS fornisce agli utenti una visione astratta dei dati, occupandosi dei dettagli riguardanti la memorizzazione e il mantenimento. 60 BIOINFORMATICA vista1 vista2 ... vistaN Livello logico Livello fisico Un database è visto in base a tre livelli di astrazione: Livello fisico: è il livello più basso in cui si descrive come i dati sono effettivamente memorizzati (usando le strutture dati); Livello concettuale (o logico): è il livello in cui si descrive quali sono i dati memorizzati nel DB e le associazioni tra di essi. L’intero DB è descritto da un numero limitato di strutture dati relativamente semplici sebbene la loro implementazione possa comportare l’uso di strutture fisiche assai complesse. Livello esterno (view): è il livello più alto e mostra una porzione dell’intero DB. Possono essere definiti più livelli esterni per lo stesso DB, ognuno di essi fornisce la visibilità di una parte dei dati. Un DBMS consente di realizzare DB e accedere ai dati attraverso uno schema logico, occupandosi di tradurre in modo efficiente le richieste dell’utente in operazioni “fisiche” (come l’accesso a file) con l’ausilio di strategie ad-hoc e l’apporto di informazioni di sistema. Il DBMS permette inoltre di: definire vincoli di integrità sui dati, definire utenti e privilegi con diversi livelli di visibilità per garantire la sicurezza dei dati, accedere in modo concorrente ai dati. Architettura di un DBMS All’interno di un DBMS si possono individuare un certo numero di componenti funzionali ognuno dei quali ha un ruolo ben preciso e interviene a seconda dell’operazione da svolgere: - query parser: controlla la correttezza sintattica dei comandi espressi nei linguaggi del DBMS e li traduce in un formato interno; - query optimizer: trasforma una richiesta utente in una equivalente ma più efficiente; - authorization and integrity manager: verifica i vincoli di integrità sui dati e controlla i diritti di accesso degli utenti; - recovery manager: assicura che il DB rimanga in uno stato consistente nel caso di cadute del sistema; - concurrency controller: gestisce e controlla l’accesso concorrente ai dati. buffer manager: si occupa del trasferimento dei dati da disco a memoria centrale e viceversa con l’obiettivo di ridurre al minimo gli accessi al disco; 61 BIOINFOSTAT - file manager: stabilisce la strategia di mappatura delle strutture dati in file mentre il sistema operativo si occupa dell’allocazione e dell’organizzazione dello spazio su disco; Per poter svolgere queste funzioni il DBMS utilizza, oltre ai dati utente anche informazioni di sistema quali il dizionario dei dati, l’elenco delle autorizzazioni, gli indici e alcuni dati statistici utili per le scelte strategiche. Modelli dei dati Un modello dei dati è un insieme di strumenti concettuali (cioè un formalismo) per descrivere i dati, le associazioni tra i dati e i vincoli (semantici) tra i dati. Il modello dei dati è la colonna vertebrale di un DBMS in quanto permette di rappresentare elementi del mondo reale mediante strutture di dati (artificiali) che il DBMS è in grado di trattare. I modelli dei dati possono essere suddivisi in: modelli semantici (modello E-R, modello binario, etc); modelli logici “tradizionali” (reticolare, gerarchico, relazionale); modelli orientati agli oggetti; modello deduttivo. Il modello Entity-Relationship. E’ un modello concettuale che fa uso dei componenti essenziali di entità, attributi e relazioni. Prima di implementare un'applicazione che fa uso di uno o più database, è bene scrivere ed aver chiaro in mente il modello dei dati che si intende utilizzare. Un modello dei dati consiste in una rappresentazione astratta delle strutture dei dati di un database. L'atto della creazione di un modello dei dati prende il nome di modellazione dei dati o data modeling. La stragrande maggioranza delle applicazioni esistenti che fanno uso dei database, esano un particolare tipo di modello per i dati, noto con il nome di modello Entità-Relazione (E-R). Il suo nome deriva dal fatto che permette di modellare il mondo reale utilizzando esclusivamente due concetti: entità e relazioni. Le entità sono gli oggetti principali su cui vengono raccolte informazioni. Ogni entità del modello E-R serve a rappresentare un concetto, concreto o astratto, del mondo reale. Quando si parla di entità, una nozione molto importante da capire è quella di istanza di una entità. L'istanza di una entità consiste in un singolo oggetto descritto dall'entità. Esempio: Una entità potrebbe essere uno studente. In questo caso, una istanza di questa entità potrebbe essere un particolare studente. Dal precedente esempio, risulta chiaro che, al fine di poter definire delle istanze, e quindi avere a disposizione degli oggetti precisi, occorre specificare in modo esatto come sono fatte le entità. In generale, una entità è composta da una serie di attributi. Una particolare istanza di un attributo è detta valore. I valori degli attributi devono permettere di distinguere tra le varie istanze delle entità. Esempio: Prendiamo di nuovo in considerazione l'esempio precedente. Al fine di poter usare il concetto di studente, e quindi poter caratterizzare particolari studenti, occorre specificare come vogliamo che sia definito uno studente nell'applicazione. Un esempio tipico è il seguente: uno studente è definito dalla seguente tripla: (nome, cognome, numero di matricola). A questo punto, una entità (ovvero un particolare studente!) potrà essere, ad esempio: (Paolo, Rossi, 87364). In questo esempio: • (nome, cognome, numero di matricola) è ciò che rappresenta l'entità studente all'interno del programma. Si può anche dire che è l'entità studente. 62 BIOINFORMATICA • (Paolo, Rossi, 87364) è un'istanza dell'entità studente. • nome è un attributo. • Paolo è un valore dell'attributo nome. Si dice dominio di un attributo la collezione di tutti i valori possibili di quell'attributo. Gli attributi possono essere classificati come chiavi o descrittori. Le chiavi identificano univocamente una istanza di una entità. I descrittori, invece, descrivono una caratteristica non unica di una entità. Un’entità è un oggetto che esiste nella realtà e che è distinguibile dagli altri oggetti. Ogni entità è caratterizzata da un insieme di attributi che ne definiscono le proprietà. La combinazione di diversi valori degli attributi determinano le istanze di un’entità. Ad esempio nel caso di un’entità Persona con attributi codice_fiscale, cognome e nome, la tupla (‘PRRSFN60J54Z679K’, ‘Pirra’, ‘Stefano’) rappresenta un’istanza dell’entità Persona. Se poi uno o più attributi distinguono un’istanza da un’altra questi vengono detti chiave. Ad esempio, nel caso dell’entità Persona l’attributo codice_fiscale è chiave. Un insieme di entità correlate, ovvero esistenti in una stessa porzione di realtà, costituiscono un set di entità e definiscono i confini del modello. Una relazione è un’interconnessione tra entità. Esistono due tipi di relazioni, quelle tra attributi di entità e quelle tra entità nel loro complesso, anche chiamate associazioni. Es. Entità: cliente(nome, indirizzo) conto(numero, saldo) Associazione: cliente-conto, associa ad ogni cliente della banca il proprio conto. user query query parser strategy selector log user transaction recovery manager concurrency controller buffer manager buffer lock table file manager disk storage statistical data index User data System data Una associazione può essere una corrispondenza di tipo: 1:1 (uno a uno o biunivoca) quando ogni istanza della prima entità si associa ad un’unica istanza della seconda entità (es. persona e passaporto nell’ambito di una nazione). 63 BIOINFOSTAT 1:N (uno a molti) quando ogni istanza della prima entità si può associare ad una o più istanze della seconda entità mentre ogni istanza della seconda si deve associare ad un’unica istanza della prima (es. persona e prestito nell’ambito di una biblioteca). N:N (molti a molti) quando ogni istanza della prima entità si può associare ad una o più istanze della seconda e viceversa (es. docente e studente nell’ambito di una scuola). Nella figura seguente viene riportato lo schema E-R di un DB su tesi, tesisti e relatori. Titolo Matricola Codice Cognome Nome (1,1) (1,n) TESISTA TT TESI Codice Descrizione (1,1) (1,3) (1,1) (1,3) ARGT REL COR (1,n) (1,n) ARGOMENTO Codice Cognome Nome Indirizzo Tel RELATORE/CORRELATORE Dipartimento Ditta INTERNO ESTERNO Qualifica I modelli logici Il modello logico discende da quello concettuale e disegna un’architettura che dipende dal tipo di DBMS, ossia tiene conto delle strutture dati e delle operazioni eseguibili da quel DBMS. Tra i modelli logici quello di gran lunga più utilizzato è quello relazionale e, di conseguenza, i più diffusi DBMS sul mercato sono RDBMS, cioè relational DBMS. Il modello relazionale. La ragione principale della popolarità di questo modello è che ha permesso lo sviluppo di linguaggi semplici (dichiarativi) e potenti con cui esprimere richieste di accesso e manipolazione dei dati. Questo modello inoltre si basa sull’algebra relazionale ed è quindi supportato da una solida base teorica che permette di dimostrare formalmente proprietà di dati e operazioni. Senza approfondire troppo l’argomento assai vasto, vediamone i concetti fondamentali. I dati e le relazioni tra i dati sono rappresentati per mezzo di un insieme di tabelle bidimensionali ognuna delle quali è formata da righe e colonne con nomi unici (all’interno della stessa tabella). Le colonne rappresentano gli attributi mentre le righe rappresentano le tuple della relazione. 64 BIOINFORMATICA Es.codicecitta (città, provincia, regione, CAP) CITTA PROVINCIA REGIONE CAP Sesto San Giovanni MI Lombardia 20099 Cinisello Balsamo MI Lombardia 20092 ...... .... .... .... Il più piccolo insieme di attributi che distingue fra loro le tuple della relazione viene detto chiave. Nell’esempio la chiave è definita dal solo attributo CAP, per definizione identificativo univoco di una città. Vi possono essere più chiavi per una stessa relazione, in questo caso normalmente ne viene selezionata una definita primaria. La chiave ha una funzione fondamentale nella fase di ricerca dei dati. Vi sono un certo numero di operazioni applicabili alle relazioni che definiscono completamente l’algebra relazionale. Le cinque operazioni di base sono unione, differenza, prodotto cartesiano, proiezione e selezione a cui se ne aggiungono altre tra cui JOIN che, pur non aumentando la potenza espressiva del linguaggio, ne facilitano l’uso. Il risultato dell’esecuzione di queste operazioni tra relazioni è a sua volta una relazione e, quindi, può essere utilizzata per successive operazioni. I concetti del modello relazionale verranno ripresi nel seguito a proposito del linguaggio SQL. Linguaggi di un DBMS Si è già accennato come il DBMS funga da interfaccia tra utente e database nel senso che tutte le richieste di operazioni sui dati devono essere indirizzate al DBMS il quale si preoccupa di controllarle, tradurle in comandi interni ed eseguirle. Questa funzione il DBMS la svolge anche per le applicazioni che dovessero richiedere accessi ad un database. Infatti un DBMS può ricevere comandi direttamente dall’utente in modo interattivo, tramite un linguaggio di interrogazione; oppure attraverso un linguaggio di manipolazione dei dati proprio del DBMS; o, infine, tramite un programma scritto in un linguaggio di programmazione. Ogni DBMS fornisce dei linguaggi ad-hoc, il cui scopo è descritto nel seguito. Data Definition Language (DDL) – è il linguaggio che permette di definire lo schema (logico) di un DB. Il risultato della compilazione delle espressioni del DDL è un insieme di tabelle che sono memorizzate nel dizionario dei dati. Un dizionario dei dati contiene metadati, cioè dati che descrivono altri dati ed è consultato dal DBMS prima di accedere o modificare i dati. Storage Definition Language (SDL) – è il linguaggio che permette di definire le strutture dati e i metodi di accesso. Il risultato della compilazione delle espressioni del SDL è un insieme di istruzioni che specificano i dettagli di implementazione degli schemi del DB. I DBMS attuali hanno solitamente un SDL molto limitato e svolgono autonomamente quasi tutti i compiti di definizione delle strutture dati. Data Manipulation Language (DML) – fornisce le primitive per l’inserimento, la modifica e la cancellazione di dati contenuti nel DB. Il DML permette, inoltre, il reperimento (o accesso) delle informazioni memorizzate nel DB. Solitamente tali primitive vengono indicate a parte con il nome di Query Language (QL). 65 BIOINFOSTAT Esistono due tipi di DML, procedurali e dichiarativi. Nel primo caso l’utente deve specificare quali dati vuole e in che modo reperirli, nel secondo caso l’utente indica solamente i dati che desidera. Fa parte di questa categoria il linguaggio SQL, certamente il più diffuso linguaggio di interrogazione esistente. Passi nell’esecuzione di una interrogazione. Una volta che l’utente formula la richiesta nell’opportuno linguaggio, il DBMS svolge alcune operazioni e, infine, accede ai dati e restituisce il risultato. I passi sono: Parsing: viene controllata la correttezza sintattica della query e ne viene generata una rappresentazione interna; Controllo di esistenza: viene controllata l’esistenza di tabelle e colonne specificate; Controllo autorizzazioni: vengono controllati i permessi di accesso al DB; Trasformazioni algebriche: rappresenta la prima fase di ottimizzazione, attraverso il calcolo relazionale si ottiene una query equivalente ma più efficiente in termini di accessi al DB; Selezione ed esecuzione della strategia: si determina in modo preciso come la query sarà eseguita e si eseguono gli accessi al disco. Naturalmente queste operazioni sono nascoste all’utente il quale si deve solo preoccupare di esprimere in modo semanticamente corretto la propria interrogazione. Il linguaggio SQL Nel 1974 esce, dai laboratori di ricerca dell’IBM, SEQUEL (Structured English Query Language), un linguaggio per la definizione delle caratteristiche dei database relazionali, successivamente contratto in SQL. Ha inizio così lo sviluppo di sistemi di gestione di database relazionali che porterà nei primi anni ottanta alla presentazione di prodotti commerciali, in particolare DB2 di IBM e Oracle della Relational Software. Nel corso degli anni ottanta altre compagnie, tra cui Informix, commercializzarono prodotti basati su SQL, che divenne così lo standard industriale di fatto per quanto riguarda i database relazionali. Nel 1986 arrivò anche il riconoscimento dell’ANSI (American National Standard Institute) che adottò SQL come standard per i linguaggi relazionali e nel 1987 seguì anche lo standard ISO (International Standards Organization). Lo standard venne chiamato SQL/86; oggi, dopo aver subito varie revisioni, è arrivato alla versione SQL/92 ed è in corso, da parte degli organismi ANSI e ISO, lo studio di uno standard rinnovato che comprenda anche la gestione di tipi di dati multimediali. Nonostante esista uno standard, gli attuali RDBMS in commercio non implementano la versione completa del linguaggio preferendo l’adozione di comandi proprietari. Il linguaggio SQL consente all’utente di: - definire e modificare l’architettura del DB (funzioni di DDL), - inserire e modificare i dati (funzioni di DML), - gestire utenti e permessi di accesso (funzioni di Data Control Language, DCL), - interrogare il DB (funzioni di QL). In realtà gli attuali DBMS forniscono interfacce grafiche che permettono di svolgere diverse attività senza utilizzare direttamente SQL. Questo però è l’unico linguaggio riconosciuto da tutti gli RDBMS in commercio e, dunque, permette in linea teorica di essere indipendenti dal prodotto. 66 BIOINFORMATICA Ricordiamo che attualmente i DBMS relazionali più diffusi in commercio sono Oracle, IBM DB2, MS SQLServer, MySQL della MySQLAB e, per l’home-computing, MS Access. Il resto di questo capitolo è dedicato all’esplorazione dei principali comandi SQL. L’esempio descritto di seguito sarà un utile ausilio a tale scopo e verrà arricchito di volta in volta. Docente(codice, cognome, nome, classe_concorso, tipo_contratto, anzianità_servizio, codiceIstituto) Questa relazione potrebbe rappresentare la realtà degli insegnanti impiegati in una determinata provincia. Gli attributi individuano la materia insegnata, il tipo di contratto (tempo indeterminato/temporaneo), l’anzianità di servizio calcolata in base al numero di anni di servizio e il codice dell’istituto di appartenenza. Il tracciato della tabella risultante è il seguente dove il campo codice rappresenta la chiave primaria. Codice Cognome Nome C_concorso T_contratto A_servizio C_istituto Si supponga di aver definito la tabella e di aver inserito un certo numero di tuple, a questo punto è possibile interrogare il DB utilizzando la clausola SELECT di SQL. Nel caso più semplice in cui si vuole ottenere l’intero contenuto della tabella si scriverà: SELECT * FROM DOCENTE; Il simbolo speciale * indica che si desiderano tutti gli attributi della relazione. Il risultato di tale interrogazione è: Codice Cognome Nome C_concorso T_contratto A_servizio 1054 Agnoletti Antonio A050 I 12 C_istituto MI0691 1061 Giotto Giacomo A042 T 15 MI0145 1077 Zanna Daniela A031 I 5 MI0145 1062 Andora Giuseppe A037 I 7 MI0721 1123 Boldi Luisa A042 T 2 MI0902 1063 Bianchi Andrea A037 I 11 MI0691 1298 Cerpi Elisa A048 T 1 MI0537 1301 Palo Anna A048 T 0 MI0537 1028 Torti Paolo A033 I 25 MI0145 1325 Delta Carlo A031 T 0 MI0145 1035 Gentili Angela A042 I 9 MI0902 La clausola WHERE del comando SELECT permette di specificare condizioni da applicare alle tuple. Es. Selezionare nome, cognome e classe di concorso di tutti i docenti impiegati nell’istituto con codice MI0145. 67 BIOINFOSTAT SELECT Cognome, Nome, C_concorso FROM DOCENTE WHERE C_istituto=”MI0145”; Risultato: Cognome Nome C_concorso Giotto Giacomo Zanna Daniela A031 Torti Paolo A033 Delta Carlo A031 A042 Operatori logici. Gli operatori logici permettono di specificare più condizioni all’interno di una stessa clausola WHERE. Utilizzando l’operatore logico AND si possono specificare più condizioni che devono essere tutte verificate. Es. Selezionare nome, cognome e classe di concorso dei docenti impiegati nell’istituto MI0145 con anzianità superiore ai 10 anni. SELECT Cognome, Nome, C_concorso FROM DOCENTE WHERE A_servizio>10 AND C_istituto=”MI0145”; Risultato: Cognome Nome Giotto Giacomo A042 Torti Paolo A033 C_concorso Usando l’operatore OR si ottengono, invece, tutte le tuple che soddisfano almeno una delle condizioni. SELECT Cognome, Nome, C_concorso FROM DOCENTE WHERE A_servizio>10 OR C_istituto=”MI0145”; Risultato: Cognome Nome Agnoletti Antonio A050 Giotto Giacomo A042 C_concorso Zanna Daniela A031 Bianchi Andrea A037 Torti Paolo A033 Delta Carlo A031 Usando l’operatore NOT posso, ad esempio, selezionare tutti i docenti con servizio superiore ai 10 anni e non appartenenti all’istituto MI0145. SELECT Cognome, Nome, C_concorso FROM DOCENTE 68 BIOINFORMATICA WHERE A_servizio>10 AND NOT C_istituto=”MI0145”; Risultato: Cognome Nome C_concorso Agnoletti Antonio A050 Bianchi Andrea A037 Ordinamento del risultato di una query. Usando la clausola ORDER BY si può indicare al DBMS di ordinare i risultati secondo una o più colonne. La parola chiave DESC indica un ordinamento decrescente. Es. Selezionare l’elenco dei docenti impiegati nell’istituto MI0145 ordinandolo per cognome. SELECT Cognome, Nome, C_concorso FROM DOCENTE WHERE C_istituto=”MI0145” ORDER BY Cognome; Risultato: Cognome Nome C_concorso Delta Carlo A031 Giotto Giacomo A042 Torti Paolo A033 Zanna Daniela A031 Es. Selezionare l’elenco dei docenti impiegati nell’istituto MI0145 ordinandolo per classe di concorso e per anzianità in senso decrescente. SELECT Cognome, Nome, C_concorso, A_servizio FROM DOCENTE ORDER BY C_concorso, A_servizio DESC; Risultato: Cognome Nome C_concorso Zanna Daniela A031 5 Delta Carlo A031 0 Torti Paolo A033 25 Bianchi Andrea A037 11 Andora Giuseppe A037 7 Giotto Giacomo A042 15 Gentili Angela A042 9 Boldi Luisa A042 2 Cerpi Elisa A048 1 Palo Anna A048 0 69 A_servizio BIOINFOSTAT Agnoletti Antonio A050 12 La clausola DISTINCT. Se volessi conoscere l’elenco delle discipline presenti nella relazione DOCENTE potrei scrivere: SELECT C_concorso FROM DOCENTE; Così facendo però otterrei molti duplicati, uno per ogni docente appartenente alla medesima classe di concorso. Per eliminare questi duplicati si usa la clausola DISTINCT: SELECT DISTINCT C_concorso FROM DOCENTE; Risultato: C_concorso A050 A042 A031 A037 A048 A033 Funzioni di gruppo. Le funzioni di gruppo permettono di estrarre informazioni riassuntive da gruppi di tuple di una relazione. Es. Stabilire il numero di docenti per classe di concorso. SELECT C_concorso, COUNT(*) FROM DOCENTE GROUP BY C_concorso; Risultato: C_concorso COUNT(*) A050 1 A042 3 A031 2 A037 2 A048 2 A033 1 Es. Selezionare le classi di concorso con un numero di docenti inferiore a 2. SELECT C_concorso, COUNT(*) FROM DOCENTE GROUP BY C_concorso HAVING COUNT(*)<2; Risultato: C_concorso COUNT(*) 70 BIOINFORMATICA A050 1 A033 1 Oltre alla funzione COUNT(*) vi sono SUM (esegue la somma dei valori di una colonna), MAX (determina il massimo valore di una colonna), AVG (determina la media di una colonna). Interrogazioni su più relazioni. Supponiamo di aggiungere al modello l’entità istituto con i suoi attributi. Istituto(codiceIstituto, nome, tipologia, preside,numero_utenti, indirizzo, città) La tabella risultante ha il seguente tracciato, dove C_istituto è chiave primaria: C_istituto Nome Tipo Preside N_utenti Indirizzo Citta Per visualizzarne l’intero contenuto: SELECT * FROM ISTITUTO; Risultato: C_istituto Nome Tipo Preside MI0691 B. Croce ITI Membretti MI0145 L. da Vinci L.S. Giara MI0721 G. Leopardi ITC MI0902 G. d’Arco MI0537 A. Manzoni N_utenti Indirizzo Citta 600 .... Bollate 200 .... Corsico Paolini 900 .... Sesto S.G. ITI Rossi 400 .... Milano L.S.T. Acerra 300 .... Milano Per individuare gli istituti scolastici con un numero di utenti superiore a 500 scriverò: SELECT Nome, Tipo, N_utenti FROM ISTITUTO WHERE N_utenti>500; Risultato: Nome Tipo B. Croce ITI N_utenti 600 G. Leopardi ITC 900 Le tabelle DOCENTE e ISTITUTO sono legate da una relazione 1:N che individua le caratteristiche di un istituto e l’elenco dei docenti impiegati presso di esso. A questo punto possiamo selezionare i nomi e i presidi degli istituti che hanno un numero di docenti inferiore a 20. SELECT Nome, Preside, COUNT(*) FROM ISTITUTO, DOCENTE WHERE ISTITUTO.C_istituto = DOCENTE.C_istituto GROUP BY C_istituto HAVING COUNT(*)<20; 71 BIOINFOSTAT Oppure possiamo estrapolare i dati dell’istituto in cui è impiegata la prof.ssa Gentili Angela. SELECT Nome, Tipo, Preside, N_utenti, Citta FROM ISTITUTO, DOCENTE WHERE ISTITUTO.C_istituto = DOCENTE.C_istituto AND DOCENTE.Cognome=”Gentili” AND DOCENTE.Nome=”Angela”; Risultato: Nome Tipo Preside G. d’Arco ITI Rossi N_utenti 400 Citta Milano Le condizioni che specificano la relazione tra le due tabelle realizzano l’operazione di join che, in questo caso, permette di concatenare informazioni provenienti da entrambe le tabelle grazie al campo C_istituto. Subquery. Una caratteristica che rende potente il linguaggio SQL è la possibilità di esprimere query complesse in termini di query più semplici. La clausola WHERE, infatti, può contenere al suo interno un’altra query, chiamata subquery. Es. Si vogliono selezionare tutti i docenti che appartengono alla stessa classe di concorso di Gentili Angela. SELECT Cognome, Nome FROM DOCENTE WHERE C_concorso= (SELECT C_concorso FROM DOCENTE WHERE Cognome=”Gentili” AND Nome=”Angela”); Il risultato della subquery viene utilizzato per creare dinamicamente la condizione C_concorso=”A048” e svolgere la query principale. Risultato: Cognome Nome Giotto Giacomo Boldi Luisa Gentili Angela I quantificatori ALL e ANY. Se la subquery ritorna più di un valore è necessario specificare come questi debbano essere utilizzati all’interno della clausola WHERE. Ad esempio, se volessimo conoscere i nomi degli istituti che hanno un numero di utenti maggiore di tutti gli Istituti Tecnici Industriali scriveremmo: SELECT Nome, Tipo, N_utenti FROM ISTITUTO WHERE N_utenti > ALL (SELECT N_utenti FROM ISTITUTO WHERE Tipo=”ITI”); Risultato: 72 BIOINFORMATICA Nome G. Leopardi Tipo N_utenti ITC 900 Se sostituissimo il quantificatore ALL con ANY otterremmo i nomi di tutti gli istituti che hanno un numero di utenti superiore ad almeno un ITI. Subquery correlate. La subquery viene svolta ripetutamente, per ogni tupla candidata dell’interrogazione principale. Es. Selezionare, per ogni tipo di istituto, quello col minor numero di utenti. SELECT Nome, Tipo, N_utenti FROM ISTITUTO X WHERE N_utenti < ALL (SELECT N_utenti FROM ISTITUTO WHERE X.Tipo=Tipo); X viene detto alias di relazione e quando appare in una subquery si riferisce ad una tupla candidata dell’interrogazione principale. Risultato: Nome Tipo N_utenti B. Croce ITI L. da Vinci L.S. 200 G. Leopardi ITC 900 A. Manzoni L.S.T. 300 600 SQL: funzioni di DDL SQL contiene anche i comandi per la creazione di tabelle. In realtà questa parte dipende molto dal DBMS, soprattutto per quanto riguarda i tipi di dati permessi e i loro nomi. Creazione tabelle. Es. Creare la tabella associata alla relazione Docente. CREATE TABLE DOCENTE(Codice Decimal not null, Cognome Char(25), Nome Char(20), C_concorso Char(4) not null, T_contratto Char(2), A_servizio Decimal(2), C_istituto Char(6)) not null; I valori tra parentesi indicano la dimensione massima della colonna, mentre not null specifica che la colonna non può contenere valori nulli. E’ il DBMS che, in fase di inserimento dati, controllerà che questi vincoli siano rispettati prima di procedere alla memorizzazione vera e propria. 73 BIOINFOSTAT Il comando CREATE TABLE può essere esteso per permettere la definizione di chiavi e vincoli di integrità referenziale. Questi vincoli stabiliscono il comportamento del DBMS in caso di cancellazione delle tuple. La sintassi estesa è la seguente: CREATE TABLE table-name ( Col-name-1 type-1 [NOT NULL] [,Col-name-2 type-2 [NOT NULL] …..] [, PRIMARY KEY (col-name-list)] [, FOREIGN KEY (col-name-list) REFERENCES other-table-name [ON DELETE {RESTRICT | CASCADE | SET NULL}] [, FOREIGN KEY …]] ) dove le opzioni RESTRICT, CASCADE, SET NULL indicano rispettivamente: § la cancellazione della tupla viene effettivamente eseguita solo se nella tabella referente non esiste alcuna tupla che abbia come chiave esterna la chiave della tupla (es. un istituto viene cancellato solo se nella tabella DOCENTE non vi sono tuple che abbiano nel campo C_istituto il codice dell’istituto in questione); § la cancellazione della tupla implica la cancellazione di tutte le tuple della tabella referente che abbiano come chiave esterna quella della tupla. (es. quando viene cancellato un istituto vengono eliminati anche tutti i docenti che hanno nel campo C_istituto quel codice); § la cancellazione di una tupla comporta che in tutte le tuple della tabella referente con chiave esterna uguale a quella della tupla, tale chiave venga posta, se ammesso, a valore NULL (es. quando viene cancellato un istituto le tuple dei docenti ad esso legati vengono modificate ponendo a 0 il campo C_istituto). Comando DROP TABLE. Utilizzato per eliminare tabelle dal DB. Es: DROP TABLE ISTITUTO; Comando ALTER TABLE. Permette di modificare la struttura delle tabelle. Naturalmente è buona norma non modificare la struttura del DB dopo aver già eseguito degli inserimenti in quanto l’operazione potrebbe comportare una perdita di dati. Vi sono due comandi di modifica: ALTER TABLE ADD permette di aggiungere una colonna alla tabella, ALTER TABLE MODIFY permette di modificare le proprietà di una colonna. Es. Aggiungere alla tabella DOCENTE la colonna Mailbox. ALTER TABLE DOCENTE ADD (Mailbox Char(20)); Es. Aumentare la lunghezza della colonna Cognome della tabella DOCENTE. ALTER TABLE DOCENTE MODIFY (Cognome Char(30)); Creazione di viste. Le viste sono relazioni virtuali attraverso cui è possibile vedere i dati memorizzati nel DB. Una vista, dunque, non contiene dati ma riferimenti alle tabelle di base. Il meccanismo delle viste è utile in quanto permette di semplificare l’accesso ai dati 74 BIOINFORMATICA oltre a garantirne la privatezza. Su una vista si possono eseguire (un gruppo ristretto di) query e modifiche. Es. Creare una vista che raggruppi dati provenienti dalle due tabelle di base e metta in risalto nome e tipo di ogni istituto insieme al numero dei docenti. CREATE VIEW Ist_Doc(Nome_Ist, Tipo, N_doc) AS SELECT ISTITUTO.Nome, ISTITUTO.Tipo, COUNT(*) FROM DOCENTE, ISTITUTO WHERE DOCENTE.C_istituto=ISTITUTO.C_istituto GROUP BY C_istituto; Risultato: Nome_Ist Tipo N_doc B. Croce ITI L. da Vinci L.S. 4 G. Leopardi ITC 1 G. d’Arco ITI 2 A. Manzoni L.S.T. 2 2 Il valore della colonna N_doc viene ricalcolata a partire dalle relazioni di base ognivolta che la vista viene usata in modo da rispecchiare gli eventuali cambiamenti apportati alle tabelle di base. A questo punto posso svolgere interrogazioni sulla vista. Es. Selezionare l’istituto col maggior numero di docenti. SELECT Nome_Ist FROM Ist_Doc WHERE N_doc = (SELECT MAX(N_doc) FROM Ist_Doc) L’uso delle viste “alleggerisce” la scrittura delle interrogazioni e quindi facilita l’accesso ai dati inoltre permette all’amministratore del DBMS di definire modalità di accesso al DB diverse a seconda dei privilegi degli utenti. Comando DROP VIEW. Permette di cancellare una vista. Es: DROP VIEW Ist_Doc; SQL: Funzioni di DML SQL fornisce anche primitive per inserire e modificare i dati nel DB. Per queste operazioni i DBMS, generalmente, mettono a disposizione degli utenti anche strumenti come le maschere, speciali finestre che permettono di lavorare più agevolmente con i dati sia in fase di inserimento sia in fase di visualizzazione. Comando INSERT. Permette l’inserimento di una tupla nel DB. Es: INSERT INTO DOCENTE VALUES (269, ‘Antico’, ‘Giovanni’, ‘A053’, ‘I’, 13, ‘MI0256’); 75 BIOINFOSTAT Va rispettato l’ordine delle colonne così come impostato in fase di creazione della tabella. E’ possibile anche inserire in una relazione tuple provenienti da un’altra relazione combinando i comandi INSERT e SELECT. Es. Supponiamo di voler creare una nuova relazione NUOVI_ASSUNTI che contenga solo i docenti con anzianità di servizio pari a zero. Una volta creata la nuova tabella, il comando di inserimento sarà: INSERT INTO NUOVI_ASSUNTI (Cognome, Nome, C_istituto) SELECT Cognome, Nome, C_istituto FROM DOCENTE WHERE A_servizio = 0; Comando UPDATE. Permette di modificare i dati contenuti nel DB. Ad esempio, si vuole incrementare di un’unità gli anni di servizio di tutti i docenti registrati: UPDATE DOCENTE SET A_servizio = A_servizio+1; E’ possibile modificare più colonne con un unico comando usando la virgola come separatore. Comando DELETE. Permette di cancellare una o più tuple di una relazione. Es. Cancellare dal DB tutti i docenti impiegati nell’istituto B. Croce: DELETE FROM DOCENTE WHERE C_istituto= 76 BIOINFORMATICA BANCHE DATI La necessità di reperire le informazioni scientifiche non è un problema nuovo, l'impossibilità di sfogliare le pagine dei periodici di settore (nel campo biomedico si pensa esistano oltre 10.000 riviste) ha portato alla creazione dei primi repertori o indici bibliografici. L'Index Medicus ad esempio venne creato nel 1897 e continua ancora oggi. Negli anni '50 con la possibilità offerta dall'informatica diveniva possibile riordinare le informazioni e con un opportuno programma di ricerca estrarre una qualunque citazione. Nasceva in questo modo una Base di Dati. In seguito le possibilità offerte dalla telematica hanno consentito la trasmissione dei dati dal calcolatore ad un operatore remoto; inoltre la possibilità di lavorare con uno stesso collegamento ha consentito a molti utenti l’utilizzo delle risorse di calcolo (time-sharing). Nel 1977 nasceva il sistema MEDLARS la prima banca dati che poteva essere interrogata da qualunque ricercatore che disponesse di un modem o di un telex. Si pensa che attualmente esistano oltre 8.000 basi di dati su supporto elettronico generalmente online, e distribuite da 2500 produttori. Una Base Dati corrisponde ad un archivio di informazioni strutturate, vale a dire di dati che si ripetono secondo una struttura costante, a prescindere dal mezzo destinato alla loro conservazione e gestione, e può essere informatizzata ma anche cartacea. Gli archivi cartacei presentano limiti evidenti soprattutto dal punto di vista gestionale. Questi limiti sono sia di tipo operazionale, relativi cioè all’aggiornamento (modifica, cancellazione, aggiunta di dati) che nella maggior parte dei casi non è possibile se non attraverso la sostituzione di singole unità dell’archivio, sia di tipo funzionale quali ad esempio la duplicazione dei dati: l’archivio cartaceo infatti non consente ordinamenti secondo criteri differenti se non attraverso la duplicazione dell’archivio stesso. Tali archivi richiedono pertanto un lavoro più oneroso di quelli informatizzati, sia in termini di tempo che di risorse umane. L’informatizzazione delle Basi Dati ha inizio intorno agli anni ‘60. La spinta innovativa nasce principalmente dall’esigenza, sempre più sentita, di reperire informazioni estraendole, nel minor tempo possibile, dalla marea di quelle prodotte. 77 BIOINFOSTAT Tale esigenza porterà, in breve tempo, alla trasformazione delle versioni a stampa di repertori e indici bibliografici, quali ad es. Index Medicus, nato circa un secolo prima negli Stati Uniti, in versioni elettroniche, grazie soprattutto all’impulso dato dallo sviluppo dell’informatica e degli strumenti ad essa destinati. Una base di dati è una collezione di informazioni omogenee e strutturate che possono essere reperite rapidamente attraverso uno specifico software definito DBMS (Data Base Management System) in pratica sistema per la gestione delle basi di dati. È importante considerare che un data base contiene dei dati ma anche le relazioni che esistono tra essi. Un data base deve rispondere ad una serie di requisiti • Non devono esserci dei dati duplicati (ridondanza). • Gestire velocemente i dati. • Indipendenza dei dati rispetto ai programmi. • Disponibilità di linguaggi di interrogazione. Formattati: Elenchi numerati L’informatica ha permesso di raccogliere enormi quantità di materiale strutturalmente organizzato, permettendone all’occorrenza la reperibilità pressoché immediata e consentendone una maggiore diffusione e l’utilizzo da parte di più utenti contemporaneamente. Ciò è stato possibile principalmente grazie a due innovazioni tecnologiche: • La telematica, ossia la possibilità di trasmissione dati da un calcolatore ad un operatore remoto tramite linea telefonica • Il time-sharing (sistema multiutenza), capacità di tale calcolatore di lavorare contemporaneamente con più operatori remoti. Formattati: Elenchi numerati Le basi dati possono essere classificate in base alla loro morfologia: q Numeriche = se contengono dati in forma numerica (proprietà chimiche, valori di tossicità). q Basi dati fattuali o repertori elettronici: mettono a disposizione direttamente le informazioni. Possono essere di diverso tipo a seconda della informazione contenuta. q Testuali = se prevalgono gli aspetti testuali (monografie, leggi). q Grafiche = le informazioni sono espresse in forma grafica. q Basi dati di riferimento: rimandano alla fonte primaria dove sono reperite le informazioni. q Basi dati bibliografiche = sono una sottocategoria delle basi di riferimento in quanto le fonti primarie sono i periodici. q Basi dati testuali o fulltext = non sempre possono essere considerate vere Banche Dati ma di fonti informative primarie. q Base dati portatile = quando l'informazione è contenuta in un dischetto o CD-ROM e non necessita di un collegamento in linea. 78 Formattati: Elenchi numerati BIOINFORMATICA MEDLARS (Index Medicus on-line) è la prima Base Dati con queste caratteristiche. Una Base Dati corrisponde quindi ad un archivio di informazioni in un certo campo del sapere, memorizzabile su diversi supporti o accessibile on-line, costruito ed aggiornato da un producer che provvede alla raccolta, selezione, indicizzazione e validazione delle informazioni. Un esempio è costituito dalla Base Dati Medline il cui producer è la National Library of Medicine. Possiamo distinguere alcune categorie tipo di Basi Dati: • fattuali: che danno accesso direttamente all’informazione, a loro volta distinguibili in numeriche, testuali e grafiche in base al tipo di dati contenuti (ad es. la Base Dati Hazardous Substances Data Bank - HSDB); • di riferimento: che rimandano alle fonti primarie delle informazioni, tra queste possiamo ricordare le basi dati bibliografiche che rimandano a monografie e periodici (ad es. Developmental And Reproductive Toxicology - DART); • full-text: vere e proprie fonti primarie di informazione (ad es.: Core biomedical collection). Formattati: Elenchi numerati Le Basi Dati vengono gestite da strutture, pubbliche o private che ne costituiscono i vendors dette Banche Dati o più genericamente Hosts, ad esempio la statunitense Dialog corporation. Le Banche Dati memorizzano e gestiscono le Basi Dati attraverso l’Hostcomputer che costituisce l’Hardware sul quale viene installato il Software di gestione e di dialogo con gli operatori remoti. Le reti permettono la connessione tra utenti e Banche Dati per mezzo di terminali e computers. I Software sviluppati per la gestione degli archivi rientrano fondamentalmente in due tipologie: • Data Base Managment Systems (DBMS), soprattutto i relazionali (RDBMS) nel significato dato a questo termine dalla matematica moderna, nei quali le relazioni vengono rappresentate in tabelle opportunamente correlate a costituire il database, e associate agli indici; • Information Retrieval Systems (IRS) che rendono possibile la operazionale e la ricerca, il riordino ed il trasferimento dei dati stessi. gestione Mentre gli RDBMS sono destinati più ad un impiego amministrativo-aziendale, per la rapidità con cui sono in grado di ricercare un elemento in una colonna di tabella, gli IRS trovano migliori applicazioni nel campo della documentazione in quanto orientati maggiormente, rispetto ai precedenti, alla ricerca delle informazioni in basi dati testuali, strutturate e non, nelle quali permettono di effettuare ricerche molto sofisticate attraverso la combinazione di termini. Un’altra caratteristica che differenzia le due tipologie è che mentre nei primi la struttura dei campi si presenta a lunghezza fissa nei secondi tale lunghezza è variabile e non essendo vincolati alla struttura tabellare essi si prestano alla gestione di documenti anche eterogenei. I modelli più diffusi di programmi possono utilizzare le seguenti tipologie di strutturazione: • Relazionali il legame viene stabilito da corrispondenze (relazioni) e quindi associati tra loro attraverso alcuni campi definiti campi chiave. • Gerarchico è basato sulla struttura ad albero ed è caratteristico delle prime banche dati. • Reticolare è basato su un modello a rete. 79 Formattati: Elenchi numerati Formattati: Elenchi numerati BIOINFOSTAT Il massimo rendimento nella gestione degli archivi è ottenibile qualora si utilizzino, per il trattamento dei dati, entrambe le tipologie: la prima per la produzione, la seconda per la ricerca, ma ciò è certamente svantaggioso dal punto di vista economico. La ricerca della localizzazione di una frase e di una parola nelle Banche dati ci si avvale di particolari programmi chiamati text-retrival-system che si basano sulla indicizzazione. La ricerca di una parola secondo lo schema adottato nei programmi di scrittura come ad esempio Word presenta alcune limitazioni. I Software di gestione utilizzati dalle Banche Dati, text-retrieval-systems, non utilizzano la ricerca sequenziale, che richiede la lettura dei dati dall’inizio alla fine, ma si basano sul concetto di indicizzazione. La ricerca avviene in modo sequenziale, cioè il programma legge tutte le parole e le confronta con quella cercata e le segnala nel caso di perfetta equivalenza. Tale equivalenza viene riconosciuta solo se esiste una identità assoluta (maiuscola, minuscola). Per quanto attiene ai linguaggi per la creazione e la gestione di un data base possiamo avere • DDL (Data Defintion Language) ovvero il linguaggio per la definizione della struttura dei dati che permette in sintesi di costruire lo schema del Data Base. • DML (Data Manipulation Language) è il linguaggio adottato per la manipolazione dei dati, consente di estrarre le informazioni di dati, la loro modifica (interfaccia utente). • SQL (Sistem Query Language) è il linguaggio di manipolazione dei dati ed è costituito da un numero ristretto di istruzioni e regole. Affinché il software possa gestire efficacemente la Basi Dati è fondamentale che essa sia costruita secondo una organizzazione strutturale e uno standard costante. Rete dati Non è possibile effettuare ricerche che prevedano la presenza contemporanea di due o più parole. Come si può comprendere un tale sistema non può essere adottato nel caso di ricerche da effettuarsi su grandi basi dati con miliardi di parole. L'efficacia di una ricerca dipende dalla strutturazione dei dati. L'insieme della Base dei dati viene suddiviso in unità elementari definite records che rappresentano la singola citazione bibliografica. Ogni record viene suddiviso in parti omogenee che sono rappresentate dai 80 Formattati: Elenchi numerati BIOINFORMATICA campi, tali campi offrono le informazioni sugli autori, la rivista, l'indirizzo degli autori, il titolo del lavoro il riassunto ect. Nella fase di archiviazione ogni campo è indicizzato in modo da consentire la creazione di un indice; un indice per autori, per il titolo ect. La suddivisione in campi e tanti indici separati consente di effettuare ricerche più precise. Ad esempio possiamo identificare gli articoli in cui Red è uno degli autori, ma non verranno evidenziati gli articoli in cui compare ad esempio red cells. Le Basi Dati bibliografiche coprono generalmente le pubblicazioni dagli anni ‘60 in poi. I produttori appartengono prevalentemente all’area anglosassone e spesso, per questo motivo, selezionano una determinata letteratura scientifica tralasciandone altra di diversa appartenenza geografica. Alcune fonti poi, come ad esempio molti congressi e la letteratura grigia vengono spesso ignorate. Supponendo che una ricerca sia stata eseguita in modo corretto, esistono fondamentalmente due parametri per valutare dal punto di vista qualitativo e quantitativo Basi Dati confrontabili. Struttura Record • Recall: numero di citazioni recuperate in una Base Dati in rapporto al numero totale di citazioni recuperabili, su un determinato argomento; • Precision: rapporto tra citazioni mirate reperite nella Base Dati e totale delle citazioni recuperate nella stessa Base Dati, su un dato argomento. Formattati: Elenchi numerati Maggiore è il richiamo, minore è la precisione e viceversa. Ricerca verso diverse Banche dati Oltre l’autorevolezza dell’ente produttore, due sistemi di controllo permettono inoltre di valutare identità e qualità dei dati stessi, essi sono: • Data control: sistemi che permettono di assicurare l’identità fra dati memorizzati e dati presenti nelle fonti primarie • Peer review: valutazione delle informazioni da parte di esperti, che ne garantisce l’affidabilità. I programmi text retrival consentono di effettuare ricerche complesse, in quanto permettono di effettuare selezioni utilizzando degli operatori logici come ad esempio AND, OR, NOT. Considerando di ricercare due termini, vengono create due liste con AND si crea una lista che comprende solo i records che contengono entrambi i termini. Con il termine NOT si ha una differenza logica creando un criterio di esclusione, cioè si selezionano tutti gli articoli che contengono la prima parola e non la seconda. Una somma 81 Formattati: Elenchi numerati BIOINFOSTAT logica si ottiene con OR; si creano due liste e vengono confrontate e si crea una unica lista in cui compaiano entrambi i termini ricercati. Nel caso in cui i criteri di conoscenza fossero incompleti si può ricorrere a particolari operatori che consentono di ricercare semplicemente la radice della parola. Si possono utilizzare dei caratteri di troncatura o Wild-cards. Possiamo avere il simbolo * che ritrova l'insieme dei caratteri di qualunque lunghezza ed il simbolo ? per un singolo carattere. Esempio di troncatura DEPRESS* = DEPRESSION, DEPRESSIVE, DEPRESSED WART? = WARTH, WARTS, WART SM?TH = SMITH, SMYTH SM?TH* = SMITH, SMYTH, SMITHE SMYTHE Text retrival Gli operatori di contiguità sono uno strumento che consente di efficacia la ricerca, infatti come nell'esempio precedente potremo della ricerca siano nel contesto distanti tra di loro, mentre interessati ad una associazione stretta tra i termini. Nel nostro essere esplicitata come segue: CATTLE ADJ DAIRY selezionare con maggior trovare che i due termini nel nostro caso siamo caso la ricerca dovrebbe Le basi dati possono contenere semplici citazioni bibliografiche, dati numerici, interi testi o periodici o anche immagini grafiche. Solitamente le basi dati di tipo scientifico contengono sono di tipo bibliografico e quindi la politica del produttore è quella di scegliere le riviste e gli aggiornamenti. É evidente che se cercassimo la stessa informazione nelle tre banche dati otterremmo dei risultati diversi; in pratica esiste una sovrapposizione del 30%. Il ricercatore è quindi invogliato per ottenere una ricerca completa a selezionare più banche dati. La qualità delle risorse fornite da una banca dati risiede in larga misura dal tipo di indexing adottato dal produttore, dalla precisione che possiedono i recensori. Particolare importanza riveste anche l'assegnazione di particolari descrittori che facilitano la ricerca. BANCHE ANNO FONTI RECORDS AGGIORNAMENTO MEDLINE 1966 3.200 6.500.000 settimanale EMBASE 1974 4.000 4.000.000 settimanale BIOSIS 1968 9.000 7.000.000 quindicinale BIOSIS possiede un programma di ricerca amichevole “user friendly” che consente di accedere ad alcune banche dati specializzate: q AIDS in Focus. Contiene riferimenti ad articoli e convegni sul tema dell’AIDS. q Bioexpress. Riporta articoli di riviste di biomedicina. q Biopatent. Riporta i brevetti nel settore della biotecnologia e biomedicina in USA. q Biomeetings. biomedicina. q Biotheses. Riporta le tesi e i master di biomedicina di oltre 500 Università. Si riferisce ad interventi, 82 manifestazioni nell’ambito della Formattati: Elenchi numerati BIOINFORMATICA q Forthcoming. Informazioni su seminari, meeting workshop del settore della medicina. In questo ambito si ha un sistema a tendina che facilita la ricerca:DMC (Dialog Medical Connection) nei seguenti data Base: Medical Reference Library (Medline, Clinical Abstract, Cancerlit….). Bioscience Reference Library (Biosis, Previews, Agricola, CAB, Food Science & Technology….). HGMP. (Human Genome Mapping Project). Permette di accedere alle banche dati del settore della genetica molecolare e di usufruire dei programmi con un collegamento Telnet. Servizio di Posta Elettronica. Permette lo scambio di messaggi da una lista del gruppo BIOSC, che si occupa di biologia molecolare. I partecipanti ricevono un bollettino con aggiornamenti su convegni e congressi. Analisi e manipolazione delle sequenze. Consente un collegamento alle banche dati delle sequenze nucleotidiche e proteiche (GenBank, EMBL Library NBRF, Swissprot). Genoma Data. È possibile usufruire delle informazioni della base di dati OMIN (McKusick’s online Mendelian Iheritance in Man) che corrisponde a Human Gene Map and Molecular Defects List, inoltre è possibile accedere alla GDB (Human Genome Database) della J. Hopkins University di Baltimora che contiene informazioni sul mappaggio dei geni umani. Genetic Linkage Analysis. Comprende i pacchetti di alcuni programmi come Linkage di Lathrop e Lalouel, il programma CRIMAP, MAP per la concatenazione genetica. Nel campo chimico la ricerca di un prodotto sulla base della nomenclatura chimica può essere particolarmente difficile (l'Index Guide del Chemical Abstracts dedica circa 200 pagine alle regole di nomenclatura) pertanto le ricerche si basano sulla formula di struttura che rappresenta un mezzo immediato per definire un prodotto e non sussistono diversità nelle convenzioni in quanto riflettono il linguaggio naturale dei chimici. La possibilità di ricercare una struttura risiede evidentemente nell'esistenza di una codificazione delle informazioni. CSD Cambridge Structural Database, Data base chimico inglese del Council for Central Laboratory of the Research Council Daresbury che fornisce informazioni sulla spettroscopia, cristallografia offre informazioni anche di biologia molecolare SEQNET. http://www. ccl.ac.uk Le banche dati nel settore biomedico sono particolarmente numerose: ABDA-Pharma contiene cinque archivi con informazioni bibliografiche e testuali su circa 15.000 sostanze farmaceutiche, per ogni sostanza vengono fornite le indicazioni sul dosaggio, gli effetti collaterali e le controindicazioni. Banche dati di chimica 83 BIOINFOSTAT CCML (Comprensive Core Medical Library). Riporta il testo completo di alcune riviste mediche di rilievo internazionale (Lancet, Annals of Internal Medicine, British Medical Journal) e dei manuali di medicina. Telgen. Contiene i riferimenti bibliografici con gli Abstract della letteratura mondiale sulle biotecnologie e sull’ingegneria genetica. Le fonti sono rappresentate da oltre 7.000 riviste, libri atti di convegno. In questa banca dati possiamo utilizzare 15 descrittori per effettuare la ricerca. La postelaborazione. IntelliGenetic Suite è un particolare programma per l'interrogazione di dati di sequenze nucleotidiche o peptidiche che consente il confronto ragionato tra sequenze, la determinazione del grado di omologia, la generazione di mappe restrizione a partire dai dati concernenti i singoli frammenti. I DATA BASE ITERATIVI. Alcune Banche Dati consentono all'utente la possibilità di interagire con l'informazione contenuta in maniera molto spinta rispetto alle Banche Dati tradizionali. Queste Banche dati sono quelle che riportano archiviate le sequenze, i distributori di queste Banche hanno sviluppato dei software di interrogazione che consentono di ritrovare una sequenza anche quando esiste una parziale differenza rispetto a quella proposta dall'interrogante. PRODUTTORE CAS EMBL DATA BASE DISTRIBUTORE CASSEQ vari EMBL BioNet IntelliGenetics GENBANK IntelliGenetics Derwent GENESEQ IntelliGenetics NBRF NBRF BioNet NBRF PIR BioNet MEDLINE (Index Medicus Online). La ricerca comincia dalla scheda Search Formulation; che si avvale di un sistema chiamato Knowledge Finder per accedere all'archivio della National Library of Medicine del Dipartimento della Sanità americano che comprende gli articoli di circa 3.400 riviste di medicina. Le specifiche della ricerca vanno poste nel campo Topic Search Statement, in questo Logo della Medline campo possiamo inserire frasi, concetti parole chiave per un massimo di 32.000 caratteri. L'algoritmo individua tutti i termini specificati e successivamente tutte le schede che racchiudono il maggior numero di termini. Effettuando un settaggio con il Relevance Filter possiamo ottenere un maggior numero di schede ma con un minor grado di attinenza oppure un minor numero di schede ma con un grado di attinenza superiore. La ricerca può essere orientata utilizzando MeSH 84 BIOINFORMATICA (Medical Subject Heading) che è un tesaurus dei termini utilizzati nella composizione delle schede MEDLINE. La possibilità di utilizzare l'opzione Word Variant possiamo allargare la ricerca ai termini simili a quelli specificati. Indicate tutte le specifiche si attiva l'icona Search che consente di individuare le schede di interesse che appaiono attivando l'icona Eyes. La prima scheda è quella che presenta la maggior attinenza rispetto alle specifiche richieste. L'opzione Save File consente di salvare le schede in un file a cui è possibile accedere attraverso altre applicazioni o con applicazioni specifiche come Pro-cite. Medical Subject Headings (MeSH). Ogni record nel database di MEDLINE include un certo numero di termini che sono riportati in un tesaurus denominato MeSH. In MEDLINE ci sono circa 18.000 termini raggruppati in una struttura da albero con appositi indici per un intercollegamento. La struttura ad albero è di tipo gerarchico per cui discendendo si aumenta la specificità. In aggiunta i termini MeSH sono accompagnati da uno o più sottoindici che indicano un particolare aspetto in discussione per esempio: therapeutic use, etiology, toxicology etc. MEDLINE utilizza i termini MeSH come testo. È possibile individuare i termini MeSH in diversi modi. Se si effettua un click verrà presentato un box nel quale si potranno ricercare i termini desiderati. Se ad esempio ricerchiamo diverticulitis noi troveremo 9 potenziali termini MeSH. Se clicchiamo il termine avremo delle informazioni più specifiche, introducendo i termini più appropriati nel Limit box del form di ricerca; tutte le ricerche verranno limitate al termine o ai termini inseriti in Evaluated TM MEDLINE. Visualizzazione della gerarchia MeSH. È possibile mostrare la struttura del tesaurus utilizzando il livello discendente e visualizzare ogni ramo per ogni specifico step. Esempio: diseases (C) digestive system diseases (C6) gastrointestinal diseases (C6.405) intestinal diseases (C6.405.469) enteritis (C6.405.469.314) Cliccando è possibile inserire ogni termine o gruppo di termini nel Limit box. Tutte le ricerche saranno limitate ai termini selezionati fintanto che saranno rimossi utilizzando l'opzione Clear Search. Selezione dei termini MeSH dai records. Il record full text di MEDLINE include una lista di termini MeSH. Tali termini possono essere ricopiati nel Search form. Cliccando sui termini the MeSH è possibile vedere i descrittori in forma gerarchica. Qualificatori MeSH. I qualificatori MeSH sono indicati per particolari record. Per esempio, servono per distinguere un particolare di un farmaco tra utilizzo terapeutico effetti negativi e impiego veterinario del farmaco. Esempio: 'enteritis *5 ve' si individuano i farmaci di utilizzo veterinario legati all'enterite. 85 BIOINFOSTAT Campo Codice Esempio Autore au 'smith a':au Autore Indirizzo ad 'new york':ad CAS Registry number rn '54 04 6':rn Country of Journal cy Data di Pubblicazione dp 1995:dp Riassunto in Inglese ea a:ea Mese di ingresso em 9603:em Simbolo di Gene gs Nome della rivista ta 'am j med sci':ta MeSH Mh heart:mh MeSH qualificatori mhql tu:mhql Un certo numero di qualificatori possono essere applicati ad un singolo termine MeSH, ma è raccomandato non impiegare più di 5 qualificatori. Esempio: tu:mhql Non tutti i qualificatori possono essere utilizzati con tutti i termini MeSH. I qualificatori disponibili sono riportati nel MeSH term. Restrizione della ricerca. La ricerca può essere limitata utilizzando un campo di ricerca. Esempio: blood:ti In questa ricerca il termine 'blood' verrà ricercato solo nel titolo del lavoro. I seguenti campi possono essere utilizzati (lista non esaustiva). Restrizione per rivista. La ricerca può essere limitata ad una particolare rivista utilizzando il codice jc, nell'esempio si ottiene malaria and nsc:jc e vengono riportati solo gli articoli della rivista Nature. Restrizione per tipo di pubblicazione. Abstract Bibliography Classical-Article Clinical-Conference Clinical-Trial Clinical-Trial-Phase-I Clinical-Trial-Phase-II Clinical-Trial-Phase-III Esempio di ricerca in MEDLINE sui records della caffeina legati a prove cliniche caffeine and Clinical-Trial:pt 86 BIOINFORMATICA Restrizione per lingua. Ogni lingua possiede un codice come riportato nella tabella a titolo di esempio African afr Bulgaro bul Italiano ita Portoghese por Svedese swe Ucraino ukr Esempio selezioniamo russo che parlano Simboli speciali (wildcard) di polmonite rus:la tutti gli and articoli in pneumonia *include le lettere e i numeri . Esempio: sul*ur ricerca i termini sulphur e sulfur. Esempio: m*cclements trova i records che contengono "McClements" o "MacClements". I simboli wildcard possono essere utilizzati per trovare le parole che iniziano con una desinenza comune. Esempio: catheter* consente catheterization; catheterise etc. di trovare i termini catheters; catheterisation; ? indica uno solo carattere Esempio: sulf?nyl ha come risultato sulfonyl or sulfinyl. Soundex matching. Se si utilizza il simbolo $ si ricorre ad una ricerca sulla fonetica, vengono riportati i termini che possiedono suoni simili. Esempio: stevenson$:au vengono riportati 'stevenson', 'stephenson' e 'stephens' CAB. Nell'ambito della medicina Veterinaria il CAB ha prodotto un CD chiamato VETCD, che include i record relativi a diversi aspetti della medicina veterinaria: patologia, fisiologia e biochimica degli animali domestici, ispezione degli alimenti, zootecnia. Informazioni sono disponibili anche per quanto concerne gli artropodi, i protozoi e i parassiti degli animali selvatici e domestici. Le micotossine e tutti gli aspetti dei funghi sono coperti da questo CD. Le informazioni riguardano: animali domestici, animali da compagnia, e tutti gli animali di interesse economico compresi i pesci, gli animali selvatici e degli zoo. Il VETCD database comprende i records ottenuti da 10.000 riviste, monografie, Congressi realizzati in oltre 100 Paesi. Approssimativamente 26.000 nuovi records si aggiungono ogni anno. Il CAB Thesaurus del 1990 contiene oltre 50.000 descrittori. Gli articoli che possiamo individuare hanno dei descrittori principali che offrono utili indicazioni. Si consideri ad esempio l'indirizzo degli Autori, se scrivete agli Autori e richiedete il testo completo del loro lavoro al 95% avrete l'articolo che stavate ricercando. 87 BIOINFOSTAT TI Titolo del lavoro OT Titolo originale se non in inglese AU Autori CA Istituzione di appartenenza AD Indirizzo dell'Autore SO Citazione bibliografica PY Anno di pubblicazione LA Lingua della pubblicazione LS Lingua del riassunto AB Riassunto DE Descrittori SU Soggetto principale GE Area geografica PT Tipo di pubblicazione AV Disponibilità CI Citazione secondaria IS Numerazione internazionale per i libri CAB Numero del CAB UD Codice AN Numero CAB Per esempio si vogliono trovare gli articoli in lingua inglese che riguardano l'impiego della salomicina nei suini. Ricerca con il CAB La prima operazione che dobbiamo compiere è quella di inserire la richiesta nel riquadro. Find Records: scriviamo english in la, che significa i lavori scritti in lingua inglese. Nella parte superiore comparirà l'informazione relativa ai record trovati. Nel nostro caso verranno individuati nel Search History 128.000 articoli scritti in lingua inglese. Si pone la seconda domanda inserendo nel Find Records salinomycin and (pig* in de). Significa trovare i records che contengono la parola salinomycin e il suino o suini. In questo caso troviamo un numero di articoli relativi alla salinomicina 219 che evidentemente riguardano tutti gli animali domestici. Per i suini troviamo un numero di oltre 11.000 articoli, nella selezione congiunta salomicina suino e suini troviamo un numero ridotto di articoli: 18. Passiamo alla fase finale che è quella di individuare gli articoli in lingua inglese. Dobbiamo allora porre le condizioni in #1 con quelle #4 ed otterremo la #5 che ci indica l'esistenza di 8 articoli che rispondono alle nostre esigenze. Considerate che il tempo di esecuzione di questa ricerca è estremamente rapido. Ricerca con CAB. Per visionare i record trovati dovremo fare click su Show Records button: per vedere tutti i record selezionati. I record possono essere salvati con l'opzione Save. In questo caso vengono salvati in formato testo, per recuperarli si deve aprire il file direttamente dal programma di scrittura. 88 BIOINFORMATICA Esempio di record relativo alla combinazione tra la ricerca 1 e 4, si riferisce al 3° record degli 8 trovati. Chiunque debba compiere una ricerca bibliografica su Internet troverà abbondanti risorse. Il nucleo storico della rete è costituito da Istituti di Ricerca Universitari ed è naturale che gli atenei abbiano provveduto a condividere le informazioni archiviate nelle rispettive biblioteche. L'Università degli Studi di Milano dispone di una serie numerosa di Banche dati consultabili attraverso il Risultati della ricerca. sistema Ovid, l'accesso a queste banche dati è riservato ai ricercatori muniti di password. 89 BIOINFOSTAT 90 BIOINFORMATICA INTELLIGENZA ARTIFICIALE “L’intelligenza artificiale” è un ramo dell’informatica interessato allo studio e allo sviluppo di sistemi computerizzati che esibiscano qualche forma di intelligenza: sistemi che apprendono nuovi concetti o compiti; sistemi che ragionano e traggono delle conclusioni; sistemi che comprendono un linguaggio naturale; sistemi che percepiscono e interpretano una scena visiva; sistemi che eseguono azioni che comportano forme di intelligenza umana.” Nel secolo scorso alcuni filosofi avevano ipotizzato che una macchina in grado di effettuare calcoli sarebbe stata simile al cervello umano e di conseguenza avrebbe manifestato un comportamento intelligente. Quando nel dopoguerra vennero realizzati i primi computer ci si accorse che i computer non manifestavano un comportamento intelligente, anche se erano straordinariamente abili in matematica. Alla fine degli anni '40, alcuni scienziati pensarono di poter costruire computer le cui prestazioni fossero equiparabili all'opera dell'ingegno umano. Per realizzare un computer dotato di pensiero si deve da un lato cercare di capire la natura dell'apprendimento, del linguaggio e della percezione sensoriale e, dall'altro, comprendere il funzionamento dei miliardi di neuroni interconnessi che compongono il cervello umano. Molti ricercatori ritenevano fosse più difficile la comprensione del funzionamento della mente umana che non l'emulazione del suo comportamento. In verità, i ricercatori trovarono difficoltà a definire l'intelligenza; per alcuni consisteva nel risolvere problemi difficili, per altri nella capacità di confrontarsi ed adattarsi alla realtà e per altri, infine‚ nell'apprendimento oppure nella formulazione di generalizzazioni o analogie. Molti ricercatori accettarono la prova di Turing secondo la quale un computer si poteva considerare intelligente se riusciva ad ingannare una persona, inducendola a credere che fosse un uomo. Dopo la seconda guerra mondiale, la tecnologia elettronica permise la realizzazione del primo computer digitale a semiconduttori, che sembrava poter raggiungere il traguardo utopistico di simulare il comportamento umano. Verso la fine degli anni 50 queste prime ricerche confluirono in un campo dell’informatica conosciuta come Intelligenza Artificiale. Il termine “Intelligenza Artificiale" (o A.I.) fu coniato nel 1956 da un gruppo di ricercatori americani tra i quali Marvin Minsky che la definì come quella branca dell'informatica che studia la metodologia e le tecniche di base per il progetto e la costruzione di sistemi elettronici capaci di fornire prestazioni generalmente considerate caratteristiche ed esclusive dell'intelligenza umana. Fin dall'inizio si vennero a creare due atteggiamenti o tendenze: - l’A.I. cosiddetta “forte” con lo scopo di emulare di processi di percezione e pensiero umani e, quindi, di imitare l’intelligenza (aspetti cognitivi); 91 BIOINFOSTAT - l’A.I. cosiddetta “debole” con lo scopo di eseguire efficacemente ed efficientemente (tecniche operative). compiti “intelligenti” Il primo filone comprende i ricercatori interessati alla scienza pura e che usano il computer come strumento per sperimentare teorie riguardanti il modo di pensare dell'uomo; il secondo, invece, comprende i ricercatori interessati allo sviluppo di “macchine intelligenti”, in particolare programmi intelligenti. Esempio classico del volo: l’uomo non è mai riuscito a volare finché ha tentato di farlo imitando il volo degli uccelli; lo ha fatto quando è riuscito a costruire una macchina intelligente in grado di volare. Queste due tendenze confluirono in due discipline, la cibernetica e la bionica. Naturalmente cibernetica e bionica continuano ad essere due discipline molto vicine ma, a differenza della cibernetica, la bionica (anche detta A.I. tradizionale) non è confinata a metodi che siano biologicamente osservabili. Cibernetica. La cibernetica è la scienza che si propone di studiare e creare sistemi in grado di simulare il comportamento umano, basandosi su modelli neurali e combinando principi biologici, matematici ed elettronici. Dagli anni '40 fino agli anni '60, un numero sempre maggiore di studiosi di cibernetica analizzò, sia nei centri di ricerca universitari, sia nell'industria, le facoltà più recondite del cervello per ricavare i corrispondenti modelli neurali. Questo modo cibernetico o di modellatura neurale di concepire una macchina intelligente fu presto battezzato bottom-up (dal basso verso l'alto). Tale metodo di procedere prevedeva di partire dall'esame del cervello di creature primitive contenenti pochi neuroni e di proseguire fino ad arrivare a livello umano, per analogia. Per raggiungere, però, risultati concreti non si doveva soltanto superare il problema tempo, ma anche quello dovuto all'eccessivo costo dell'hardware elettronico di tipo analogico. Se modellare, infatti, il sistema nervoso di una formica, che possiede "soltanto" ventimila neuroni, era già economicamente proibitivo, praticamente impossibile risultava per il cervello umano che ne ha ben 100 miliardi. Poiché nella sperimentazione cibernetica più sofisticata si potevano usare soltanto pochi neuroni, di fronte a questa limitazione molti dei primi ricercatori si scoraggiarono e abbandonarono il campo di ricerca. Un ricercatore che non si lasciò scoraggiare fu Frank Rosenblatt, il cui lavoro sembrava concretizzare le più alte aspirazioni della cibernetica. Infatti, verso la fine degli anni 50, il giovane scienziato presentò la simulazione al calcolatore del suo ''perceptrone'', un apparecchio elettronico sperimentale concepito per emulare i processi del pensiero umano. Per simulare i complicatissimi collegamenti elettrici del perceptrone utilizzò uno dei computer più potenti dell'epoca, l'IBM 704. I collegamenti erano così complicati che il computer impiegava circa mezz'ora per eseguire le funzioni che il perceptrone avrebbe eseguito in millesimi di secondo. Con il suo ''occhio'' formato da fotocellule il perceptrone di Rosenblatt avrebbe trasmesso dei segnali elettrici ad una serie di celle di memoria elettromeccaniche progettate per misurare l'intensità di tali segnali. Questi collegamenti erano disposti in modo casuale, in base alla teoria allora prevalente, che il cervello assorbe e reagisce ad informazioni nuove attraverso un sistema di collegamenti casuali tra i neuroni. Il perceptrone rappresentò un notevole sviluppo nel campo della cibenetica in quanto il comportamento del modello non era prestabilito ma poteva evolvere determinando i propri parametri in base ad un principio di apprendimento per esempi. Inoltre il perceptrone presentava la notevole capacità di generalizzare i concetti appresi e una sorta di rappresentazione interna della conoscenza 92 BIOINFORMATICA Durante la simulazione al calcolatore, alla presenza della stampa specializzata, il sistema esplorò due figure di quadrati, selezionò i segnali e li distinse dalle altre forme. Due anni dopo tale dimostrazione, Rosemblatt presentò il suo primo modello operativo di perceptrone, il MARK 1 in grado di identificare alcune lettere dell'alfabeto. Pochi anni dopo Marvin Minsky e Seymour Papert in una pubblicazione criticarono aspramente il lavoro di Rosenblatt affermando che il perceptrone aveva delle capacità molto limitate. In realtà Minsky e Papert non si resero conto subito, come invece fecero più tardi, che il perceptrone rappresentava solo il caso più semplice di una famiglia di sistemi in grado di risolvere anche problemi complessi. A seguito di tali critiche la cibernetica subì un rallentamento e buona parte degli sforzi e delle risorse vennero dirottati progressivamente sulla bionica. L’interesse per le reti neurali si riaccese all’inizio degli anni ‘80, in concomitanza con il diffondersi di nuove idee sui sistemi complessi e con il palesarsi degli insuccessi riportati in alcuni settori dell’intelligenza artificiale tradizionale, ossia della bionica. Nel 1986 il PDP (Parallel Distributed Processing) research group dell’Università della California, capeggiato dagli psicologi David Rumenhart e James McClelland, pubblicò due volumi in cui venivano riportati una serie di esperimenti riguardanti modelli di calcolo parallelo e un algoritmo di apprendimento detto backpropagation. Questa pubblicazione segnò l’ingresso delle reti neurali nel campo della psicologia cognitiva. Bionica Vs Cibernetica. In contrapposizione alla teoria bottom-up (cibernetica), si sviluppò una scuola top-down (bionica) specializzata nella programmazione di computer digitali polivalenti, in grado di eseguire azioni che richiedevano una attività intelligente come, per esempio, giocare a scacchi. Per la maggior parte degli studiosi, l'AI sarebbe diventata sinonimo di metodo bionico. Tra i fautori della bionica c'erano i professori Minsky e Papert, del MIT. Minsky aveva incominciato la sua carriera con ricerche sulla macchina intelligente seguendo la scuola cibernetica di Rosenblatt e nel 1951 costruì una rete autodidatta di circuiti a valvole termoioniche. Quando Rosenblatt presentò il suo Perceptrone Minsky era già passato alla scuola top-down e, come si è visto, non mancò di criticare fortemente i risultati dell’excollega. La differenza metodologica è profonda, nel caso della tradizione cognitiva l’approccio è top-down, mentre è bottom-up per la scuola connessionista. La bionica iniziò ben presto ad incontrare dei grossi ostacoli in quanto l’approccio simbolico si rivelò limitativo nella rappresentazione della realtà, cioè ci si accorse che la mente è immersa in un mondo in cui non tutto è simbolizzabile. La rivalità tra i sostenitori dell’uno e dell’altro approccio ha negli ultimi anni assunto toni abbastanza pacati, in quanto da entrambe le parti é stata ammessa la possibilità di una cooperazione. Questa cooperazione nasce con intenti pratici, quali quelli di realizzare automi capaci di apprendere dei compiti e di muoversi efficacemente in un ambiente reale, superando le difficoltà incontrate inizialmente dalla robotica con indirizzo simbolico. Quello che caratterizza questo settore, è appunto l'accento posto sulla necessità che il sistema sviluppi una propria implicita rappresentazione dell'ambiente, piuttosto che fornire ad esso il modello dell'ambiente che lo sperimentatore ritiene più opportuno. Applicazioni dell’Intelligenza Artificiale. Le radici della A.I. possono essere rinvenute negli automi cellulari di John Von Neumann e Arthur W. Burks. Nelle parole di Burks, che fu il continuatore della sua opera, Von Neumann si chiedeva:"Quale tipo di organizzazione logica è sufficiente ad un automa per riprodurre se stesso?" 93 BIOINFOSTAT Von Neumann pensava al fenomeno naturale dell'autoriproduzione quando la pose, ma non tentò di simulare l'autoriproduzione di un sistema naturale a livello genetico e biochimico. Egli voleva astrarre dal problema naturale dell'autoriproduzione la sua forma logica (Burks, 1970). Il formalismo che permise la realizzazione di un tale sistema, fu proposto da un suo collega, Stan Ulam, con il nome di Automa Cellulare (Ulam, 1962). Un automa cellulare è semplicemente un sistema che può avere un numero finito di stati ed il cui stato è determinato dallo stato di altri automi che lo circondano. Il comportamento degli automi cellulari diventa interessante proprio perché formano una rete di interazioni, il cui comportamento globale, nel tempo, non è prevedibile; anche se le leggi che governano i passaggi di stato per ogni singolo automa sono semplici e ben determinate. Lo stato di ogni automa di questa rete, in ogni istante di tempo, è determinato dallo stato posseduto, nell'istante precedente, dagli automi che lo circondano. Con gli automi cellulari, Von Neumann impostò un sistema capace di autoreplicarsi e stabilì che, qualunque sistema capace di fare ciò, doveva fare uso delle informazioni contenute nella sua descrizione in due modi fondamentalmente differenti: interpretandole, quindi svolgendo le azioni per realizzare il replicante; copiandole. Quando, in seguito, si scoprì la struttura ed il funzionamento del DNA emerse che erano proprio i modi in cui la cellula fa uso delle informazioni contenute in esso durante i suoi processi di trascrizione e traduzione da una parte e replicazione dall'altra. Gli automi cellulari si sono rivelati un valido modello nel campo dell’Artificial Life, una disciplina della A.I. che studia la realizzazione di sistemi artificiali che esibiscano un comportamento caratteristico dei sistemi naturali. L’Artificial Life (aLife) complementa la biologia tradizionale il cui scopo fondante è l’analisi dei sistemi viventi, tentando di sintetizzare i comportamenti “life-like” attraverso l’uso di computer e altri strumenti artificiali. Nel settembre del 1987 si è tenuta a Santa Fe la prima conferenza sull'Artificial Life (che è considerata l'atto di nascita ufficiale di questa nuova scienza), organizzata da Chris Langton del Santa Fe Institute. Ad essa parteciparono non solo scienziati che, con vari approcci, lavoravano alla costruzione di robot, o scienziati cognitivi, ma anche filosofi, chimici e biologi. Parlando generalmente di Intelligenza Artificiale oggi possiamo distinguere due grossi filoni che si intrecciano tra loro: quello della robotica e quello delle simulazioni. Vi sono, ovviamente, anche molti tentativi di integrare le due strategie. Uno fra tutti quello di un importante ricercatore nel campo della robotica, Rodney Brooks che suggerisce l’uso di reti neurali con l’ausilio di algoritmi genetici per l’aspetto dell’apprendimento, per superare le difficoltà di trasportare apprendimenti e tecniche dalle simulazioni al mondo reale. Un automa deve apprendere ad agire in un ambiente e, in linea di principio, non fa molta differenza se questo ambiente è reale o simulato. L'ambiente simulato, però, non deve essere progettato in modo da rendere il più semplice possibile "la vita" all'automa. Questa semplificazione spesso finisce per rendere ancora più difficile operare in tale ambiente. Nella vita reale quello che è riportato dai sensori è, infatti sempre molto incerto. Quell'imprecisione che, a prima vista, sembrerebbe un problema, in realtà porta ad apprendimenti più flessibili in partenza; fa si che non si creino conflitti di precedenza artificiali come in alcune simulazioni e soprattutto porta in maniera più naturale a prendere il punto di vista del robot, invece di fornirgli la propria visione dell'ambiente. Data la vastità dei temi che vanno sotto il nome di Intelligenza Artificiale si è tentato di definirne le competenze e di formalizzarne i confini e gli ambiti. Non si pretende di essere esaustivi. 94 BIOINFORMATICA AMBITO APPLICAZIONI PERCEZIONE VISIVA Visione e riconoscimento interpretazione di segnali di forme grafiche, COMPRENSIONE DEI LINGUAGGI NATURALI Riconoscimento vocale, riconoscimento linguistico CAPACITA' DI APPRENDIMENTO Robotica, Controllo di processi CAPACITÀ DI RAGIONAMENTO, DEDUZIONE, INFERENZA Sistemi di supporto alle decisioni, diagnostica, sistemi di previsione (es. in campo economico), problemi di ottimizzazione CAPACITÀ DI MOVIMENTO Robotica Percezione visiva. Nel campo della percezione visiva inizialmente sembrava che la difficoltà maggiore stesse nel poter analizzare un'immagine a partire da una sua rappresentazione su una matrice di pixel, allo scopo di evidenziare i contorni o alcune proprietà geometriche. Questo scoglio è stato superato avendo individuato opportuni algoritmi. La seconda difficoltà nasce dalla necessità di far comprendere al computer il significato dell'immagine. Distinguere un bicchiere da un elefante comporta una conoscenza del mondo e delle immagini che supera la semplice analisi geometrica. Si pensi che un oggetto deve essere riconosciuto anche se osservato da diversi punti di vista. In alcune situazioni è necessario riconoscere oggetti differenti rappresentati dalla stessa immagine (si consideri la lettera N che non è altro che una Z rovesciata). Quando esistono figure ambigue il problema della percezione visiva diventa quello di comprendere il significato delle immagini nel contesto in cui appaiono. Attualmente esistono programmi in ambito industriale capaci di percepire immagini con una gamma limitata di possibilità. Apprendimento. Per quanto riguarda l'apprendimento, possiamo distinguere apprendimento genetico ed uno individuale, proprio come negli esseri viventi reali. un In genere oggi si tende ad utilizzare o l'uno o l'altro, ma con un uso integrato di entrambe le forme di apprendimento si potrà fare, tra l'altro, ulteriore chiarezza su una questione che nel passato ha riempito molte pagine: quanta parte del comportamento di un organismo è attribuibile al suo patrimonio genetico e quanto all'apprendimento nella sua vita. La questione ormai ha raggiunto un sufficiente grado di chiarezza con il riconoscimento del contributo integrato di entrambe le componenti, ma si ripropone ogni volta la proporzione e, soprattutto, la natura delle predisposizioni genetiche quando si parla di comportamenti o di attività mentali. Nelle simulazioni che si fanno in questo campo, si utilizzano in genere alternativamente strategie che possiamo considerare ispirate all'apprendimento in vita (tramite backpropagation principalmente, ma anche con l'apprendimento competitivo, con la regola di Hopfield, o comunque apprendimenti basati sulla modifica dei valori delle connessioni tra neuroni); oppure all'apprendimento su base genetica, che si compie di generazione in generazione (algoritmi genetici). Ultimamente si sta diffondendo enormemente l'uso di questa ultima strategia. Ciò è logico, se si considera, al di là di un'analisi più circostanziata, che, in questa fase iniziale, potrebbe essere una buona strategia, quella di lasciare sviluppare le specie più adatte ai vari scopi che si propongono i ricercatori. Bisogna considerare che, in questi primi tentativi di realizzare automi in grado di modificare il proprio comportamento in modo da ottimizzare un certo risultato, 95 BIOINFOSTAT l'importanza che hanno i metodi di apprendimento effettivamente utilizzati è molto relativa. Infatti possiamo ottenere risultati piuttosto simili, sia utilizzando una strategia "filogenetica", come gli algoritmi genetici, che una "ontogenetica", come la modifica delle connessioni in base al risultato delle azioni. Quello che effettivamente si sta sperimentando, non sono tanto queste teorie "parziali" dall'apprendimento, quanto proprio la strategia globale di organizzazione del proprio comportamento da parte di questi sistemi. Anche tecniche non basate sulle reti neurali, ma su classificatori che rientrerebbero più propriamente nel campo dell'intelligenza artificiale, sono utilizzati in questo modo con risultati paragonabili a quelli delle altre tecniche. Riconoscitori di Linguaggi Naturali. Una applicazione notevole della AI è nei programmi di lettura (OCR, Optical Character Recognition). Le stesse difficoltà sono presenti nel campo della percezione del linguaggio naturale. A differenza dei linguaggi formali (BASIC, PASCAL, ecc), i linguaggi naturali sono per loro natura ambigui, nel senso che la medesima frase può assumere significati diversi in diversi contesti (Es. dare i numeri può voler significare anche essere matto). Ma oltre a quelle che sono le frasi idiomatiche, un linguaggio può essere ambiguo anche dal punto di vista sintattico. Quando fu annunciato uno dei primi traduttori dei linguaggi naturali (da inglese in russo), durante la presentazione venne proposta la seguente frase "la carne è stanca, ma lo spirito è vivo", il programma offrì una traduzione simile "la carne è putrida, ma la vodka è buona". Riconoscimento vocale. Nel caso del riconoscimento della voce il problema principale è quello di individuare le parole ed in caso di ambiguità scegliere la più pertinente nel contesto della frase. Il problema della conoscenza è ricorrente nel campo dell'intelligenza artificiale, in pratica si tratta di possedere delle informazioni che permettano di effettuare dei ragionamenti e delle deduzioni. SISTEMI ESPERTI. I sistemi esperti hanno rappresentato a partire dagli anni ‘80 una delle applicazioni di A.I. più di successo, anche se da un punto di vista teorico forse non sono il risultato più esaltante. Un sistema esperto è sostanzialmente un programma specializzato fornito di una base di conoscenza e in grado di rispondere a specifiche domande. Le informazioni di cui si avvale un sistema esperto possono derivare da una conoscenza empirica, non formalizzata, fondata esclusivamente sulla pratica e sull'esperienza, senza cognizioni teoriche e scientifiche (empirica deriva dalla parola greca empeirikos). Lo scopo di un sistema esperto è quello di fornire all'utente un certo risultato, vale a dire la soluzione di un determinato problema. Tale risultato viene ottenuto attraverso una ricerca euristica (dal greco eurisko = trovare, significa metodo di ricerca della verità basato sulla documentazione dei fatti). La ricerca euristica, contrapposta a quella algoritmica, consiste nel trovare una soluzione ipotizzando tutte le soluzioni possibili verosimili e cercando di verificarle attraverso una documentazione di cause e fonti. I metodi algoritmici sono più sicuri, in quanto effettuano una ricerca esaustiva senza venire influenzati da informazioni fuorvianti. Un Sistema Esperto si definisce trasparente quando gli utenti possono vedere il suo funzionamento e si capisce perché ha prodotto un certo risultato. Fin dagli anni ’60 alcuni ricercatori di diverse discipline scientifiche si posero il problema di facilitare il processo ipotetico deduttivo e conseguentemente quali metodologie adottare. Inizialmente ci fu un grande entusiasmo per i programmi risolutori generali di problemi GPS (General Problem Solver) come quello di Newell e Simon, ma gli entusiasmi vennero notevolmente ridimensionati a partire dagli anni ’70. I programmi non potevano dare una risposta generale, ma potevano offrire una risoluzione a problemi particolari e molto circoscritti. 96 BIOINFORMATICA Tradizionalmente un programma è definito passo passo in modo deterministico e la sua abilità risiede nei codici; nei sistemi esperti invece l'esperienza non è espressa con dei codici ma memorizzata in forma simbolica nella base di conoscenza, una struttura di dati facilmente dominabile e modificabile. L'aspetto più innovativo è il fatto che la conoscenza, o l'esperienza non deve necessariamente essere coerente e seguire uno schema predefinito, infatti può anche operare su una base di conoscenza contraddittoria, incompleta o incerta. Struttura di un Sistema Esperto. In generale l'architettura di un Sistema Esperto è formata da quattro elementi: § La base di conoscenza § I fatti noti § Il motore inferenziale § L'interfaccia utente o shell FRAME. Il frame rappresenta uno schema o meglio una struttura di dati da utilizzare con una struttura tipo, in generale ogni frame viene identificato con un nome e prevede la presenza di descrittori (slot) che possono contenere altri schemi o semplici identificatori; ad esempio il frame animale può contenere gli slot sesso, età, peso …. Frame: ANIMALE Slot: sesso =<M or F> Slot: età = <less than or equal to 12 month> Questo tipo di struttura prende il nome di frame classe e consente ad esempio di avere o assegnare dei valori prestabiliti (default): quando si attribuisce uno specifico nome al frame questo diviene frame-membro ed erediterà le caratteristiche generali del frame di classe. Con questo sistema siamo in grado di costruire un albero che descrive le caratteristiche degli oggetti di conoscenza di un dato problema. BASE DI CONOSCENZA. Contiene l'esperienza del Sistema Esperto; è un'area di memoria in cui sono immagazzinate le frasi che costituiscono la "conoscenza" del campo di applicazione. Per rappresentare la conoscenza sono spesso utilizzati gli alberi di classificazione o di decisione. Infatti, essendo essi costituiti da diversi rami, con maggiore facilità è possibile ricavare la regola che corrisponde ad ogni ramo completo dell'albero di decisione. I fatti noti contengono informazioni temporanee attinenti al problema che il sistema esperto sta tentando di risolvere in quel momento, cioè i dati del problema. Queste informazioni sono utili al fine di risolvere il problema attuale, una volta ottenuta la soluzione si possono cancellare. Il motore inferenziale è un algoritmo che scandisce in ordine opportuno la base di conoscenza al fine di reperire documentazione, selezionare ipotesi e costruire la soluzione del problema. La selezione di una regola dalla base di conoscenza avviene in seguito a un'analisi dei fatti noti e a un colloquio con l'utente. In sostanza il motore inferenziale è quella parte di programma che, utilizzando l'esperienza contenuta nella base di conoscenza, effettua delle riduzioni e rende possibile un colloquio senz'altro pertinente. Ciò significa che le domande vengono poste all'utente solo se correlate ai fatti che fino a quel momento sono noti. L'esperienza di un Sistema Esperto può essere rappresentata in diversi modi, la più usata è quella che fa uso di regole di produzione. Una regola di produzione ha la seguente forma: 97 BIOINFOSTAT SE X ALLORA Y dove x e y sono stringhe di caratteri, ad esempio: SE è la ragazza del tuo migliore amico ALLORA devi dimenticarla. Le frasi comprese fra SE e ALLORA si chiamano antecedenti, quella che appare dopo allora si chiama conseguente. Il nome produzione è dovuto al fatto che il conseguente descrive lo stato di cose che viene prodotto se gli antecedenti sono soddisfatti. Quando in una regola compaiono più antecedenti, separati da una virgola, questi si intendono concatenati da una "e". Quando più regole hanno lo stesso conseguente, significa che i rispettivi antecedenti sono concatenati da una "o". Quando il conseguente di una regola è uguale all'antecedente di un'altra regola, queste si intendono concatenate da una deduzione. Una base di conoscenza formata da regole come quelle viste sopra viene detta sinergica (attività simultanee, più enti che collaborano per un medesimo effetto). Per riempire una base di conoscenza non è necessario analizzare il problema nella sua concretezza né avere una visione di insieme né tantomeno studiare reti a grafi che evidenzino le correlazioni fra varie regole. Basterà inserire regole sparse, preoccupandosi solo del fatto che abbiano un senso compiuto di per se e un significato nell'ambito del programma in questione. Il motore inferenziale, scandendo in modo opportuno tale base di conoscenza, darà all'utente l'impressione di dialogare con un sistema estremamente ordinato, in cui si segue un filo logico e ogni domanda è pertinente. In una base di conoscenza è possibile modificare una regola o aggiungerne altre senza dover conoscere le restanti, poiché le regole sono indipendenti una dall'altra. Questo è un enorme vantaggio, soprattutto quando il numero di regole è elevato. MOTORE INFERENZIALE. Il motore inferenziale è un programma costituito da: un interprete che decide quale regola applicare per poter aumentare la base di conoscenza; uno schedulatore che organizza le regole da sviluppare e il loro ordine di esecuzione. Il compito del motore è estrarre le regole utili alla soluzione del problema secondo un meccanismo di riconoscimento e attivazione delle stesse, eseguendo un esame delle regole nella base di conoscenza, selezionando la regola più appropriata, eseguendo la regola e registrando nella memoria di lavoro l'azione, ripetendo finché non trova la possibile soluzione. Il motore è organizzato in due parti: una memoria di lavoro (o lavagna) dove viene memorizzato il piano generale di soluzione ed un'agenda delle cose ancora da fare, oltre ad una descrizione della soluzione o delle soluzioni per ora ipotizzate. Nel motore inferenziale vi è inoltre il rafforzatore di consistenza; questo è un modulo che una volta che sia stata generata un'ipotesi di soluzione cerca, sfruttando specifiche sorgenti di conoscenza, evidenze che permettano di rafforzare o scartare l'ipotesi fatta. Quindi, se l'inferenza è una singola deduzione che il sistema è in grado di trarre dalle premesse (ad esempio un singolo calcolo), il motore inferenziale è lo strumento con cui il sistema determina, in maniera ordinata, il complesso delle inferenze. A tal proposito va ricordato che esistono due tipi di inferenza: Sistema Esperto 98 BIOINFORMATICA • Inferenza deduttiva • Inferenza induttiva La parola deduzione significa procedimento logico per ricavare una verità particolare a partire da una verità generale. In altre parole, data una regola generale, una deduzione consiste nell'applicare la regola a un caso particolare per ottenere un risultato. L’induzione è un procedimento logico che, al contrario della deduzione, permette di ricavare una regola generale a partire da un insieme di esempi particolari. Un algoritmo di inferenza deduttiva applica le regole, contenute nella base di conoscenza, a un caso particolare, contenuto nei fatti noti, e ne trae alcune conclusioni. L'inferenza deduttiva viene chiamata forward chaining cioè concatenamento in avanti, perché partendo da fatti noti si applicano le regole in avanti allo scopo di dedurre altri fatti. In contrapposizione al forward chaining vi è il backward chaining, cioè il concatenamento all'indietro. Esempio di colloquio con un sistema esperto: Hai il naso otturato? Si Hai gli occhi arrossati? Si Quanto hai di febbre? Non lo so. Hai sudato? Perché? Perché il sudore e la sensazione di freddo sono indici della febbre. Hai sudato? Poco. Hai preso medicinali? Ho misurato la febbre. Quant'è la temperatura? 39,2 Hai preso freddo? Non tanto. Si tratta di influenza. Hai problemi a prendere l'aspirina? Non ho capito. L'aspirina è sconsigliata a chi soffre di ulcera. Allora? Nessun problema. La ricetta è: aspirina tre volte al giorno. Grazie Questo algoritmo parte da un possibile risultato e va a verificare l'esistenza di una regola capace di fornire un risultato simile; man mano che si applicano le regole, se ne rendono applicabili altre con un procedimento ciclico, fino a quando non si trova una regola i cui antecedenti siano fatti noti, quindi verificati per definizione. L'interazione tra l'utente e il sistema esperto avviene tramite un dialogo. Tale dialogo viene reso possibile con l'impiego di display grafici che sono in grado di mostrare immagini di varia natura, grafica sonora o linguaggio naturale. Il sistema consente all'utente di chiedere il "perché" dei quesiti che gli vengono proposti al terminale e, a conclusione della sessione di lavoro e cioè dopo aver visualizzato una particolare deduzione, "come" questa è stata ricavata da parte del sistema. Inoltre deve prevedere funzioni di salvataggio, stampa in vari formati ecc.. INTERFACCIA UTENTE. Nell'ambito dei Sistemi Esperti, lo Shell, (conchiglia, guscio, rivestimento), viene utilizzato per indicare il "rivestimento" della base di conoscenza, cioè tutto ciò che si trova tra quest'ultima e l'utente: il motore inferenziale è l'interfaccia 99 BIOINFOSTAT utente. Lo shell quindi è un Sistema Esperto privo di conoscenza, il programma privo di dati, e di conseguenza non eseguibile. Uno shell è uno strumento molto appetibile commercialmente perché mette in grado un utente di costruirsi il proprio Sistema Esperto con pochissimo sforzo. Sviluppare una base di conoscenza ben fatta e ben interpretabile dallo shell a disposizione non è un impresa facile. Per primo, ogni shell richiederà un certo qual formato per le regole di produzione, in secondo luogo ogni dominio di applicazione avrà le proprie regole correlate più o meno strettamente fra di loro. Al fine di facilitare lo sviluppo e la manutenzione delle basi di conoscenza, è utile definire un linguaggio di sviluppo che permette di esprimere le regole di produzione in maniera facilmente comprensibile e offra all'utente dei comandi per la gestione della base di conoscenza. La maggior parte degli shell in commercio è corredata di strumenti ausiliari per lo sviluppo incrementale della base di conoscenza (compilatori, interfacce, strumenti di verifica, ...). Se volessimo trasformare il nostro Sistema Esperto in uno shell degno di tale nome dovremmo: • memorizzare le regole di produzione su file; • definire un linguaggio per esprimere le regole; • implementare un programma di utilità che metta a disposizione dei comandi di accesso a tali file (aggiungi, togli, modifica, ...) . Nonostante l'esistenza di questi strumenti, lo sviluppo di una base di conoscenza rimane sempre il punto critico per la buona riuscita del Sistema Esperto. I Sistemi Esperti costituiscono uno dei tanti campi dell'intelligenza artificiale, ma si distinguono dagli altri poiché sono stati gli unici in cui si sono ottenuti risultati brillanti. Nonostante questi successi, non bisogna perdere di vista i limiti e le caratteristiche di un Sistema Esperto; essendo infatti il fondamento su cui esso si basa una conoscenza fornitagli dall'uomo, tutto ciò che può fare un Sistema Esperto può essere fatto da un uomo. A differenza dell’uomo però, un Sistema Esperto è sempre cosciente delle deduzioni che fa e instancabilmente disposto a concedere spiegazioni. Nel seguito verrà riportata una breve descrizione di alcuni dei più conosciuti Sistemi Esperti. Dendral. Dendral è uno dei primi Sistemi Esperti, sviluppato nel 1965 ha il compito di identificare la formula strutturale di un composto chimico organico, partendo da dati di spettrometria di massa e da informazioni fornite dall'utente. Conoscendo quali sono gli atomi che compongono una molecola, esistono milioni e milioni di diversi disposizioni, che determinano a loro volta diverse proprietà chimiche, Dendral cerca di individuare tale disposizione. Il motore inferenziale è di tipo "plan-generate-test", ciò significa che dai dati di partenza si individua un insieme di molecole candidate, che viene via via ridotto per eliminazione, attraverso una serie di test. Le sue prestazioni sono eccellenti infatti in più di un caso il sistema ha risolto problemi che mettevano in difficoltà chimici di professione. Prospector. Prospector assiste il geologo nel valutare le potenzialità di un’area quale possibile sede di un giacimento minerario. L'aspetto più spettacolare è costituito dalle capacità grafiche che giungono al punto di fornire la mappa geografica della più probabile dislocazione di nuovi filoni. La base di conoscenza è composta da una rete inferenziale, la cui struttura non differisce molto dalle regole di produzione; è inoltre corredata da una descrizione tassonomica dei dati. È il Sistema Esperto che ha dato finora i risultati più sensazionali, localizzando un giacimento di molibdeno del valore di molti milioni di dollari, di cui i geologi non sospettavano nemmeno l'esistenza. Mycin. Mycin, realizzato nel 1972, assiste il medico nelle decisioni riguardanti la scelta della terapia appropriata nella cura di malattie infettive che richiedono l’impiego di una 100 BIOINFORMATICA terapia con antibiotici. La base di conoscenza del Mycin è formata da cinquecento regole di produzione dotate di fattore di certezza. Il motore inferenziale è di tipo backward chaining e ha capacità di ragionamento approssimato. EXAMPLE:MYCEN(SHORTLIFFE) An expert system for guiding bacterial infection therapy Premise:($and(same cntxt gram grampos) (same contxt morph coccus ) (same cntxt conform clumps)) Action: (conclude cntxt ident staphylococcus tally 0.7) IF(1)la colorazione dell’organismo è gram-positivo,and (2) la morfologia dell’organismo è coccus, and 3 la conformazione di crescita è fitta, c’è una suggestiva evidenza (0.7) che l’identificazione dell’organismo sia staffilococco. Questo Sistema esperto è molto utilizzato soprattutto negli ospedali statunitensi grazie al fatto che la sua base di conoscenza contiene molti dettagli sulla sintomatologia di tutte le sindromi infettive conosciute. Logic Theorist è un particolare programma per calcolatore creato nel 1958 per la dimostrazione di teoremi di logica simbolica elementare con tecniche euristiche simili a quelle utilizzate dagli esseri umani. Appartiene al gruppo dei programmi di Problem Solving. Il Logic Theorist fu testato sulla dimostrazione di alcuni teoremi di logica formale tratti dal poderoso "Principia mathematica" di Whitehead e Russell. Il programma era in grado di dimostrare un teorema facendo delle congetture sulle possibili combinazioni di altri teoremi, dati dal programmatore come bagaglio informativo di base, per raggiungere la soluzione. In più di un caso il Logic Theorist ha trovato la dimostrazione più elegante, più corta, di un teorema rispetto a quella proposta dagli autori. In anni successivi alla prima pubblicazione, il programma è passato dall’essere un dimostratore di teoremi a rappresentare una prima approssimativa spiegazione di alcuni processi umani. 101 BIOINFOSTAT RETI NEURALI Una rete neurale è un insieme di unità di calcolo elementari (generalmente adattabili) connesse fra di loro con struttura parallela, organizzate in maniera gerarchica e predisposte per interagire con gli “oggetti” del mondo reale secondo un comportamento analogo ai sistemi nervosi biologici. Come ricorda Hinton (1987) "uno degli scopi principali della ricerca sulle reti neurali è scoprire delle procedure di apprendimento efficienti che consentano alle reti di costruirsi complesse rappresentazioni interne del loro ambiente." Nonostante ciò gran parte delle ricerche utilizzano sistemi a classificatori con gli algoritmi genetici, sistemi quindi che rientrerebbero più propriamente nel campo dell'intelligenza artificiale. Questo a riprova del fatto che il campo è caratterizzato più da un atteggiamento e da una strategia comune che dalle tecniche utilizzate. Un esempio significativo di reti neurali fu presentato nel 1987 da Agree e Chapman sottoforma di un programma che apprende a giocare ad un comune videogioco, come se avesse una strategia, senza che gliene sia stata fornita alcuna e senza che gli sia stata fornita una esplicita rappresentazione dell'ambiente. Gli autori partirono dalla constatazione che, anche se molte delle nostre azioni sono pianificate, la maggior parte dei nostri comportamenti è una diretta reazione alla situazione ambientale. Inoltre, molte risposte alle sollecitazioni ambientali, devono essere date in tempi troppo rapidi perché si possa analizzare quale risposta darebbe i risultati migliori. La realtà è troppo imprevedibile, complessa, immediata perché la pianificazione possa avere un posto così centrale quale quello attribuitogli da modelli dell'attività. Ritennero, quindi, che la maggior parte dell'attività, derivi da un meccanismo di risposta immediato alla situazione presente. Questo meccanismo, fa tesoro delle regolarità riscontrate nel suo interagire con l'ambiente, così da dar luogo a comportamenti complessi ed apparentemente pianificati, senza aver bisogno di esplicite rappresentazioni del mondo. Per mettere alla prova la validità di queste valutazioni, avevano necessità di un ambiente più semplice di quello reale, ma comunque abbastanza complesso e imprevedibile: un videogioco in un ambiente bidimensionale e discretizzato. Il gioco originale consisteva nel muovere un pinguino, inseguito da api in grado di ucciderlo sotto una certa distanza. Sia il pinguino che le api possono modificare l'ambiente movendo dei blocchi di ghiaccio che sono distribuiti su tutto lo schermo e vengono a costituire un labirinto. Muovendo i blocchi, possono anche colpirsi vicendevolmente, eliminandosi. Il pinguino era fornito di un algoritmo di apprendimento che gli permetteva di muoversi efficacemente nell’ambiente nonostante non avesse alcun esplicita rappresentazione dell’ambiente né piani o strategie di gioco.. Il meccanismo su cui è basato il comportamento e l'apprendimento del pinguino è un'applicazione dei loro principi: delle routines che prevedono la messa in atto di un determinato comportamento (fuga, spinta di un blocco ecc.) nel momento in cui esso si trova in una data situazione (ad esempio: "quando stai per essere catturato, scappa"). La sua valutazione della situazione è basata sugli aspetti indicativo-funzionali dell'ambiente, cioè sugli oggetti individuati per la loro funzione in un particolare istante (il blocco che sto 102 BIOINFORMATICA spingendo, il passaggio attraverso il quale sto correndo) ed in base a queste applica le sue routines. In questo modo il comportamento tenuto con un oggetto potrebbe essere applicato ad un altro oggetto che, in un altro momento, si trovi nella stessa situazione funzionale. Un altro interessante lavoro che persegue la strategia di non fornire all'automa alcuna rappresentazione, ma fare il modo che ne sviluppi una sua è basato sui sistemi a classificatori sviluppati da Holland. I sistemi a classificatori sono progettati in modo da fornire l'automa di una base di conoscenza, che gli permetta di sopravvivere in un dato ambiente, modificando il proprio comportamento in base alle conseguenze delle proprie azioni. Le azioni sono valutate da un algoritmo (funzione di valutazione), che fornisce premi e punizioni a seconda della coerenza delle conseguenze con gli obiettivi. In base alle risposte che richiedono, le varie situazioni producono delle classi di equivalenza di stati ambientali (alla stessa classe appartengono le situazioni che, dato uno o più obiettivi, richiedono la stessa risposta). Bernard Windrow della Stanford University viene riconosciuto come un pioniere e il maggior studioso delle reti neurali. Si deve a lui il programma Adaline un programma basato sulle reti neurali che elimina gli eco dalle linee telefoniche. Gli stessi principi sono stati attualmente adottati per eliminare gli errori nei modem. Campi di applicazione delle reti neurali. Le potenzialità applicative delle reti neurali sono legate principalmente ad alcune loro capacità fondamentali: - riconoscimento di pattern - apprendimento da esempi - simulazione delle interazioni tra un ampio numero di parametri - resistenza ai guasti Quest’ultima proprietà consiste nella capacità della rete di continuare a funzionare, con prestazioni leggermente inferiori, anche in caso di rottura di alcuni suoi elementi. Nel caso di implementazioni hardware in silicio ciò si traduce nella possibilità di utilizzare anche i dispositivi parzialmente difettosi. Si possono individuare 3 principali modalità d’uso delle reti neurali: 1. Classificazione/trasformazione di pattern; rientrano in questo caso i sistemi per il riconoscimento di immagini, suoni, voci ed altri pattern, le memorie associative, i sistemi per la cancellazione del rumore e per la riduzione della ridondanza di informazioni; 2. Ottimizzazione; rientrano in questo caso i sistemi esperti basati su reti neurali. Un tipico problema di ottimizzazione é quello del "commesso viaggiatore": dato un certo numero di città, trovare il percorso più breve per visitarle tutte. 3. Previsione; rientrano in questo caso i sistemi di previsione meteorologica. Le applicazioni che consentono il maggiore impatto pratico sono quelle in cui la rete neuronale viene usata come classificatore, cioè per riconoscere una serie di pattern di ingresso nel campo dell’automazione. Tali reti possono essere utilizzate per riconoscere immagini di oggetti migliorando le prestazioni dei sistemi di controllo della qualità come quelli di ispezione ottica nel campo della robotica; l’applicazione delle reti neurali al riconoscimento delle immagini può portare notevoli miglioramenti sia sul piano delle capacità di movimento in ambienti complessi sia sul piano della acquisizione di informazioni. 103 BIOINFOSTAT Nel campo dell’automazione d’ufficio una applicazione tipica é quella della macchina da scrivere, implementata su PC, che scrive sotto dettatura; nel campo militare le applicazioni riguardano il riconoscimento di aerei, navi o sommergibili sulla base delle loro immagini radar o sonar; nel campo dell’elettronica in generale le reti neurali possono essere utilizzate per ripulire o, addirittura, rigenerare segnali affetti da rumore; in particolare nel settore biomedicale questa possibilità può essere sfruttata per l’elaborazione dei tracciati elettrocardiografici. Le memorie associative basate su reti neurali possono essere utilizzate per migliorare il funzionamento delle basi di dati, rendendo possibile il reperimento di informazioni a partire da riferimenti incompleti. Nel campo dei cosiddetti sistemi esperti istantanei, in cui le reti neurali possono apprendere dagli esempi e, quindi, possono utilizzare anche conoscenze non esprimibili sotto forma di regole <<se ... allora>> nel campo finanziario per la valutazione dei rischi connessi alla concessione di prestiti, per la previsione degli andamenti del mercato, nel campo meteorologico le reti neurali possono essere utilizzate per realizzare sistemi di previsione. Il neurone biologico. Dal punto di vista computazionale possiamo rappresentare le funzioni utilizzando unità di calcolo elementari e modi di apprendere tali rappresentazioni a partire da semplici esempi. Questo modo di rappresentare è detto rete e risulta analogo ai circuiti costituiti da semplici porte logiche che rappresentano funzioni booleane. Dal punto di vista biologico possiamo considerare il cervello dotato di unità elementari chiamate neuroni. Una rete quindi corrisponde ad un gruppo di neuroni connessi tra di loro, da qui il termine di reti neurali. Il neurone biologico è l'unità fondamentale del sistema nervoso ed è costituito dalla cellula neurale o corpo cellulare e dai suoi prolungamenti. Il neurone biologico è l'unità fondamentale del sistema nervoso ed è costituito: dalla cellula neurale o corpo cellulare e dai suoi prolungamenti. Le immagini mostrano neuroni multipolari in cui si evidenzia la loro morfologia, in particolare si osservano i dendriti e degli assoni. Il metallo pesante, in questo caso l'argento, si deposita sugli elementi costituenti il citoscheletro del neurone, permettendone in tal modo lo studio. Risulta visibile il nucleo e, all'interno, il nucleolo. Essendo la sezione spessa, il dettaglio dei processi neuronali si perde allorché essi passano al di fuori del piano di osservazione. Notare le cellule gliali circostanti. Una prima classificazione dei neuroni viene compiuta in base alla morfologia dei prolungamenti; secondo questa classificazione i neuroni possono essere di tre distinti tipi: 1. I neuroni pseudounipolari 2. I neuroni bipolari 104 BIOINFORMATICA 3. I neuroni multipolari. Prolungamenti protoplasmatici o dendriti, sono rappresentati da un'arborizzazione, talvolta imponente, che nasce dal corpo cellulare. Essi sono piuttosto corti e sono forniti di spine o varicosità. Le fibre nervose sono prolungamenti che nascono per mezzo di un cono di origine o monticolo dal soma. Esso è molto lungo, non si arborizza, esce dalla sostanza grigia e corre in compagnia di altri neuriti in fasci di sostanza bianca. Può anche abbandonare il sistema nervoso centrale ed entrare nella costituzione dei nervi periferici. I neuroni possono essere classificati sulla base della natura dell'impulso che trasportano; secondo questa classificazione possono essere di due tipologie: • neuroni motori o efferenti, caratterizzati dal fatto che trasmettono impulsi diretti alle periferie, ai muscoli ed alle ghiandole, quindi agli effettori; • neuroni sensitivi o afferenti, che provvedono a raccogliere gli stimoli e a trasmettere i relativi eccitamenti ai centri. Cellula nervosa o neurone. Nel sistema nervoso centrale l'impulso percorre catene di neuroni che sono articolati tra loro in una particolare giunzione detta sinapsi o bottone sinaptico; essa rappresenta, in pratica, la terminazione dei neuriti che sono i fili di collegamento tra i neuroni. L'impulso si trasmette nelle sinapsi in una sola direzione. I segnali si propagano da neurone a neurone grazie ad una serie molto complessa di reazioni chimiche; alcune sostanze che fungono da trasmettitori chimici sono rilasciate dalle sinapsi ed entrano nel dendrite, questo ingresso provoca un abbassamento o un innalzamento del potenziale elettrico del corpo cellulare. Quando questo potenziale raggiunge una certa soglia si ha l’invio di un segnale elettrico. Le sinapsi che aumentano il segnale sono dette eccitatorie mentre quelle che riducono il potenziale d’azione sono dette inibitorie. Le connessioni sinaptiche sono interessanti in quanto mostrano una certa plasticità, cioè una capacità di modificare le connessioni in risposta a determinati schemi di stimolazione. Il cervello umano memorizza le informazioni attraverso sistemi che variano la forza dei collegamenti, aumentando o diminuendo il loro numero, variando il tipo di messaggio chimico, che li percorre trasportando i segnali, variando la soglia di risposta dei neuroni. Le connessioni sinaptiche sono interessanti in quanto mostrano una certa plasticità, cioè una capacità di modificare le connessioni in risposta a determinati schemi di stimolazione. Nell’uomo l’elaborazione dell’informazione avviene nella corteccia cerebrale in strutture a forma di barile che contengono circa 2000 neuroni, ed è noto come certe aree del cervello possiedano delle specifiche funzioni; nel 1861 P.P. Broca dimostrò che nei soggetti incapaci di parlare (afasia) vi era un danno nella terza convulsione frontale sinistra della corteccia cerebrale. 105 BIOINFOSTAT Il cervello ed il computer hanno compiti piuttosto diversi e hanno proprietà differenti. Computer Workstation Cervello Umano Unità di calcolo CPU – 106 porte 1011 neuroni Unità di memoria 109 bit RAM, 1010 disco 1011 neuroni Tempo per un ciclo 10 sec 10–3 sec Lunghezza di banda 109 bit/sec 1014 bit/sec Aggiornamento neuroni/sec –8 5 1014 10 Attualmente non si conosce ancora bene come le funzioni di competenza di una zona cerebrale, in caso di danneggiamento, possano essere trasferite ad un’altra zona, inoltre non è nota nessuna teoria che spieghi come venga immagazzinato un singolo ricordo. La neurobiologia è assai lontana da una teoria completa sulla coscienza, cioè alla capacità che hanno semplici cellule di condurre al pensiero, all’azione e alla conoscenza. Il cervello ed il computer hanno compiti piuttosto diversi e hanno proprietà differenti e dobbiamo ritenere che il cervello umano migliorerà le sue prestazioni molto lentamente, mentre i computer potranno migliorare la loro capacità di immagazzinamento e la velocità di calcolo. Un computer è in grado di eseguire una istruzione in decine di nanosecondi, mentre i neuroni possono richiedere millisecondi per essere attivati. Il cervello umano ha però attualmente un enorme vantaggio in quanto tutti i neuroni possono lavorare contemporaneamente, mentre un computer può avere un numero limitato di CPU che lavorano congiuntamente. Quindi anche se un computer è un milione di volte più veloce nella commutazione rispetto al cervello, risulta più lento del cervello nel calcolo parallelo. Un compito complesso come quello del riconoscimento di una immagine, viene eseguito dal nostro cervello con un numero di cicli limitato ed in tempi dell’ordine del secondo, mentre un calcolatore impiega miliardi di cicli e tempi di risposta non sempre accettabili. Inoltre non dobbiamo dimenticare alcuni aspetti non trascurabili: il cervello tollera meglio i guasti rispetto ad un computer; infatti un difetto dell’hardware che altera un solo bit può fare fallire un’intera operazione di calcolo; il cervello umano è in grado di funzionare per 70-80 anni senza necessità di una sostituzione della memoria; il cervello ha una degradazione tendenzialmente dolce delle sue prestazioni. Il neurone elettronico. Una rete neurale é composta di elementi di elaborazione, detti neuroni elettronici ed ispirati ai neuroni biologici, connessi tra loro con collegamenti ispirati alle sinapsi, in modo da formare uno schema assimilabile ad un semplicissimo tessuto nervoso. Ciascun collegamento ha un peso numerico associato ad esso. I pesi sono il principale mezzo di memorizzazione a lungo termine nelle reti neurali e l’apprendimento in genere avviene attraverso l’aggiornamento dei pesi. Gli elementi di elaborazione (PE ossia Processing Elements) sono i neuroni elettronici, che con i loro schemi di interconnessione sono molto più semplici dei neuroni e dei tessuti biologici, ma conservano un grado elevato di analogia. L’osservazione della struttura del cervello può, infatti, fornire importanti spunti per la ricerca sulle reti neurali, mentre queste ultime possono fornire modelli esplicativi del funzionamento del cervello. Il neurone biologico può essere rappresentato dal neurone elettronico o di Hopfield, che consiste in un dispositivo elettronico di sommatoria non lineare dotato di: - più ingressi, che corrispondono ai dendriti nel neurone biologico; - una sola uscita, che corrisponde all'assone nel neurone biologico. Ogni elemento di processo (neurone) riceve segnali diversi (normalmente da altri PE) e può inviare il suo segnale d'uscita a più PE. L’interconnessione tra i vari PE non è un 106 BIOINFORMATICA semplice conduttore, poiché la sua funzione consiste nel "pesare" il segnale del neurone emittente moltiplicandolo per un opportuno valore detto peso di interconnessione, variabile tra 0 e 1, oppure tra –1 e +1. I pesi sono detti eccitatori se positivi, inibitori se negativi; un peso uguale a 0 rappresenta una non connessione. Il calcolo è basato sul valore di ciascun segnale ricevuto dai nodi vicini e dal peso assegnato a ciascun ingresso. Il numero di ingressi di eccitazione o inibizione non è soggetto a limitazioni. Architettura delle reti neurali. L'architettura è senza dubbio il principale carattere distintivo di una rete neurale. Le tipologie sono: • il percettrone a singolo strato, che é il più semplice tipo di rete neurale in quanto composto da una o più PE disposti su un'unica fila. Questo tipo di rete è in grado di effettuare una semplice classificazione dei segnali presentati ai suoi ingressi, ad esempio realizzando una funzione AND. • il percettrone multistrato, che è composto da più schiere di PE. Un percettrone a due strati è in grado di dividere il piano degli input disegnando regioni chiuse o aperte comuni, ciò che è necessario per effettuare la funzione XOR. Un percettrone a tre strati può dividere il piano degli input disegnando virtualmente qualunque forma e la sua capacità classificatoria è ancora superiore. • Back-propagation. Il meccanismo con cui tutta questa struttura apprende è del tipo back-propagation (Propagazione all'indietro) ed è riassunto in queste fasi: • Feed Forward: é la fase di propagazione diretta del segnale dall'ingresso all'uscita, in cui noti gli ingressi e i pesi viene calcolata l'uscita della rete. • Error Back–Propagation: é la fase di retro–propagazione dell'errore dove l'errore calcolato dalla differenza tra l'uscita (calcolata al punto precedente) e il target viene trasmesso a tutti i neuroni della rete. • Wheight Update: é la fase di modifica dei pesi, resa possibile dalle informazioni ottenute nelle prime due fasi. La tecnica di back-propagation è stata sviluppata da Rumelhart–Hinton e Williams nel 1986. Essa costituisce, secondo stime prudenziali, almeno il 50% delle applicazioni sviluppate. Uno dei campi di applicazione è quello delle previsioni di mercato in ambito economico. Il principio di apprendimento è quello di lasciare che la rete impari dai suoi errori. Inizialmente, i valori dei pesi sono scelti a caso (in particolare vengono presi valori normalizzati , tra 0 e 1 o tra –0.5 e +0.5), a questo punto esistono diverse modalità per assegnare questi valori che possono essere definiti come metodi supervisionati e non supervisionati, cioè si attribuisce o meno il ruolo di un "insegnante" che corregge gli errori di output. I neuroni dello strato N ricevono gli output dallo strato I (che diventano ora gli input dello strato N) calcolano ognuno i loro output e li trasmettono allo strato U. I neuroni dello strato U calcolano i loro output sulla base degli input ricevuti e li confrontano con i dati reali storici. I neuroni dello strato U calcolano un errore che è funzione della differenza fra il loro output e il valore reale. A questo punto i neuroni dello strato U trasmettono i loro output ai neuroni dello strato N cambiando i pesi N-U di una piccola quantità nel senso di minimizzare l'errore calcolato. I neuroni dello strato N ricevono gli input dallo strato U (che sono gli output dello strato U) calcolano ognuno i loro output e li trasmettono allo strato I modificando i pesi I-N. I neuroni dello strato I ricevono un nuovo set di dati storici che vengono ognuno moltiplicato 107 BIOINFOSTAT per i nuovi pesi I-N modificati nella fase precedente e calcolano i loro output ripetendo il ciclo dall'inizio. Questo ciclo viene ripetuto fino a che l'errore tra l'output calcolato ed il dato reale soddisfa la condizione che l'utente impone, che può essere un errore minimo fra dato reale e calcolato tra i dati storici o un numero massimo di interazioni. A volte alcuni set di dati storici (di solito circa il 20%) non vengono usati nella fase di apprendimento, ma vengono usati periodicamente per confrontare l'output calcolato da tutta la struttura con il valore reale. Un modello di rete neurale del tipo Multi Layered Perceptron o Percettrone Multistrato è raffigurato nella seguente figura. Essa è costituita da: 3 neuroni in input; Un primo livello nascosto con 4 neuroni; Un secondo livello nascosto con 3 neuroni; Un neurone di output. In questo esempio, ogni neurone è collegato a tutti quelli del livello immediatamente inferiore in modo tale da potersi scambiare dei messaggi. Le regole di apprendimento sono le regole secondo cui si variano i pesi di interconnessione in funzione di determinati parametri dell'attività della rete. Esempi di tali regole sono: • la regola di Hebb: stabilisce che il peso venga variato di una quantità proporzionale al prodotto dei valori di attivazione dei neuroni connessi dal peso in questione, tendendo così a rinforzare i pesi più forti e ad indebolire quelli più deboli. • la regola di Windraw–Haff: stabilisce che i pesi siano variati in una quantità proporzionale alla differenza tra i valori di uscita effettivi e i valori desiderati. La supervisione è necessaria solo nel secondo caso: la supervisione entra in gioco quando le prove prevedono la correzione delle risposte. Gli elementi del processo interagiscono tra di loro in funzione del tipo di interconnessione. Diversi sono i criteri con i quali si stabiliscono le interconnessioni e questo rappresenta l'architettura del sistema; il grado delle interconnessioni determina il livello di parallelismo. Mentre la memoria di un computer è misurata in byte, la memoria di una rete neurale viene misurata dalle interconnessioni. La velocità di un computer viene misurata dal numero di istruzioni eseguite per secondo, in una rete neurale la velocità viene misurata in interconnessioni per secondo. Molti dei processi mentali umani richiedono dei tempi di risposta di poche centinaia di millisecondi; un singolo neurone compie una operazione in un tempo superiore a quello di un computer. Il cervello umano sfrutta ampiamente il parallelismo utilizzando 10 bilioni di neuroni. Addestramento delle reti neurali. Per istruire una rete neurale vengono usati degli esempi reali, che si chiamano training set. Ogni esempio contiene sia gli input che gli output del problema. La rete agisce come un bambino che impara per tentativi: legge il training set per decine e decine di volte, finché non lo ha imparato ovvero fino a quando il suo output è simile a quello che le stiamo insegnando e quindi la rete ha capito il modello che trasforma gli input in output. 108 BIOINFORMATICA L’addestramento, dunque, d'interconnessione. provoca a livello neuronale la modificazione dei pesi Il processo di apprendimento prevede due possibili regimi: - con pochi esempi la rete si comporta da memoria, senza ricorrere a nulla; - con molti esempi, la rete è in grado di generalizzare, ossia ricavare una regola che sia applicabile anche a nuovi casi. La rete neurale si comporta quindi come un esperto umano che basa i suoi ragionamenti solo sulla sua esperienza passata, senza aggiungere la creatività propria degli esseri umani. Le reti neurali non danno risultati completamente corretti o completamente sbagliati, ma solo approssimativamente corretti o sbagliati. Una rete se ha imparato a dare una risposta A quando si presenta una serie di dati A, se si presenta una serie A’ di dati molto simile ad A, la rete risponde in modo sensato, cioè B: questa capacità di estrapolare è una delle principali caratteristiche delle reti neurali rispetto ai sistemi simbolici tradizionali. ALGORITMI GENETICI. A partire dal 1975 John Holland dell’Università del Michigan applicò per primo il processo della selezione naturale al problema dell’apprendimento delle macchine sottoforma di un algoritmo genetico che genera soluzioni possibili ai problemi individuati dalla teoria darwiniana sull’evoluzione naturale. Gli A.G. funzionano bene nell’ambito dell’Artificial Life in quanto simulano l’evoluzione biologica naturale e producono organismi specializzati attraverso le operazioni di riproduzione, crossover e mutazione. Gli algoritmi genetici consistono sostanzialmente in varie tecniche, che portano alla selezione degli algoritmi che danno (in base ad un determinato criterio) i risultati migliori ed alla ricombinazione casuale di alcune loro porzioni e/o alla mutazione di alcune loro parti. In genere si parte con una certa popolazione di automi che hanno leggere differenze tra loro e si fanno agire in un ambiente per un certo numero di cicli. In seguito quelli che si saranno comportati meglio avranno la possibilità di riprodursi. Cioè si prenderà, ad esempio, il venti per cento della popolazione che si è comportato nel modo migliore e da questi, con mutazioni casuali e ricombinazioni, si otterrà anche il restante ottanta per cento di automi; con questa nuova popolazione si farà un'altra sessione di cicli, al termine dei quali, si ripeterà lo stesso procedimento. All'interno di questo schema generale, le effettive realizzazioni degli algoritmi possono essere molto diverse: da programmi in vari linguaggi, a valori di connessioni di reti neurali. La teoria di Holland si basa sui seguenti presupposti: 1. Gli algoritmi genetici generano una popolazione di cromosomi sempre migliori, manipolando quelli della generazione precedente. 2. Gli algoritmi genetici non conoscono nessuna caratteristica del problema finale che devono risolvere. 3. Gli algoritmi utilizzano la valutazione della fitness per far riprodurre i cromosomi con le migliori valutazioni e scartare quelli con le peggiori valutazioni. 109 BIOINFOSTAT Le frequenze dei geni e dei relativi caratteri ad esse associati possono essere cambiate attraverso la selezione. Selezionare significa scegliere gli animali ai quali è permesso avere dei discendenti. La selezione artificiale viene operata dall’uomo che sceglie i geni (in realtà gli animali) in funzione del loro valore economico. La selezione naturale permette invece la sopravvivenza dei genotipi più adatti all’ambiente naturale. La frequenza di un gene in una popolazione sottoposta a selezione dipende dalla fitness (adattamento, capacità di lasciare discendenti) dei genotipi nella popolazione. Con fitness si intende la proporzione del genotipo che si riproduce rispetto ad altri genotipi. Fitness pari ad 1 indica una completa capacità di riprodursi di quel genotipo, fitness inferiore ad 1 indica fitness ridotta per incompleta vitalità o fertilità o altro di un particolare genotipo.” (G. Pagnacco in Genetica applicata alle produzioni animali. Città Studi Edizioni p.27). In natura, la valutazione della fitness è data direttamente dall’interazione di un cromosoma con l’ambiente circostante: se esso sopravvive bene in un dato ambiente, tenderà a riprodursi con più probabilità di un altro essere che ha difficoltà a sopravvivervi. In questo modo i cromosomi più validi tramanderanno il loro “buon” patrimonio genetico ai rispettivi figli, per generazioni e generazioni. Gli algoritmi genetici sono perciò dei semplici manipolatori di cromosomi, che generano popolazioni di cromosomi migliori di quelle da cui provengono. Gli algoritmi genetici artificiali, al contrario di tutte le precedenti generazioni dell’informatica, possono creare situazioni nuove. Se però una situazione è nuova, si pone il problema di chi poi sia in grado di valutarla, ovvero di chi possa assegnare una fitness ai nuovi individui creati. A questo scopo ci vengono in aiuto le reti neurali, che sono in grado di valutare una stringa di dati mai visti direttamente in precedenza. Questo è valido solo quando ogni nuova situazione è assimilabile a qualcosa che la rete neurale ha già imparato. In presenza di situazioni completamente nuove e non generalizzabili da passate esperienze, è necessario ricorrere ad altre soluzioni. Gli operatori genetici più utilizzati in questo campo sono: Cross over; Mutazione; Inversione; Sostituzione; Mutazione percentuale; Inversione parziale. Roulette Wheel Parent Selection - RWPS A F D La maggioranza delle operazioni genetiche che si riscontrano in natura sono di tipo cross over, le mutazioni avvengono con scarsissima probabilità, mentre le inversioni non hanno un riscontro naturale. TECNICA DI SELEZIONE C La selezione di un padre con fitness elevata non è eseguita su una pura base numerica. Si seleziona un padre con una probabilità che è proporzionale alla sua fitness: più la fitness è elevata più quel padre prolificherà; però anche un padre con bassa fitness avrà qualche probabilità di poter proliferare. Infatti anche da padri non ottimi si possono ottenere delle generazioni buone. B E 110 BIOINFORMATICA La tecnica utilizzata per selezionare i padri si chiama Roulette wheel parent selection (RWPS) che significa selezione del padre dalla ruota della roulette. Questa tecnica consiste nel generare una ruota di roulette, dove gli spicchi hanno una dimensione proporzionale alla fitness di ogni cromosoma e quindi la probabilità che la pallina si fermi su uno spicchio più grande sarà maggiore rispetto alla probabilità che si fermi su uno spicchio più piccolo. Si procede attraverso tre fasi: 1. Sommare tutte le fitness in modo da ottenere la fitness totale. 2. Generare un numero casuale compreso tra 0 e la fitness totale. 3. Selezionare il primo cromosoma la cui fitness, sommata alle fitness dei precedenti cromosomi, è maggiore o uguale al numero casuale generato al passo precedente. Esempio: Cromosoma A Fitness .10 .20 .10 .10 .80 .10 B C D E F Somma delle fitness .10 .30 .40 .50 1.3 1.4 Numero casuale .48 .72 .91 1.1 .19 Padre selezionato D E E E B Il cromosoma E viene selezionato con una probabilità superiore a quella degli altri cromosomi essendo contenuto in uno spicchio più ampio della ruota della nostra roulette virtuale. Per l’eliminazione dei cromosomi non adatti alla selezione si procede invece attraverso altri tre passi: 1. Somma di tutte le fitness = Fitness totale 2. Fitness totale/numero di cromosomi = Fitness media 3. Fitness/fitness media = Fitness normalizzata Distinguiamo tre diversi obiettivi: a. Massimizzare la fitness: vengono eliminati tutti i cromosomi con fitness normalizzata inferiore ad un valore vicino ad uno. b. Minimizzare la fitness: vengono eliminati tutti i cromosomi con fitness normalizzata superiore ad un valore vicino ad uno. c. Far sopravvivere cromosomi che si avvicinano ad un valore predefinito: vengono selezionati solo i cromosomi che hanno una fitness vicina a quella voluta. L’unione degli algoritmi genetici con le reti neurali rappresenta un’ulteriore ampia possibilità di soluzione per problemi estremamente complessi. 111 BIOINFOSTAT Approfondimento. Le reti neurali sono costituite da molte parti e dovremo usare una semplice notazione matematica. Notazione Significato ai Valore di attivazione dell’unità i. ai Vettore dei valori di attivazione per gli ingressi dell’unità i. g Funzione di attivazione. g’ Erri Erre Ii Derivata della funzione di attivazione. Errore (differenza tra entrata ed uscita). Errore per l’esempio e Attivazione di una unità i nello strato di ingresso I Vettore delle attivazioni di tutte le unità di ingresso Ie Vettore degli ingressi nell’esempio e ini Somma pesata degli ingressi dell’unità i N Numero totale di unità nella rete O Attivazione della singola unità di uscita di un percettrone Oi Attivazione di una sola unità di uscita del percettrone O Vettore delle attivazioni di tutte le unità di strato di uscita t Soglia per la funzione di strato a gradino T Uscita obiettivo per un percettrone Te Vettore obiettivo per l’esempio e Wj,i Peso di un collegamento dall’unità j all’unità i Wi Peso dell’unità i all’uscita in un percettrone Wi Vettore dei pesi diretti all’unità i W Vettore di tutti i pesi della rete Ogni elemento di processo (neurone) riceve quindi segnali diversi (normalmente da altri PE) e può inviare il suo segnale d'uscita U(x) a più PE. L’interconnessione tra i vari PE non è un semplice conduttore, poiché la sua funzione consiste nel "pesare" il segnale del neurone emittente moltiplicandolo per un opportuno valore detto peso di interconnessione, variabile tra 0 e 1, oppure tra –1 e +1. I pesi sono detti: eccitatori se sono positivi inibitori se negativi un peso uguale a 0 rappresenta una non connessione. 112 BIOINFORMATICA Gli elementi di una rete sono i cosiddetti neuroni di Hopfield, dispositivi elettronici di sommatoria non lineare a più ingressi ed una sola uscita. Il dispositivo elettronico é costituito da 3 blocchi funzionali posti in cascata, ciascuna unità esegue una computazione semplice: riceve ad esempio i segnali di ingresso e calcola un livello di attivazione che invia lungo i collegamenti di uscita. Σ FUNZIONE DI ATTIVAZIONE INGRESSO USCITA Il calcolo è basato sul valore di ciascun segnale ricevuto dai nodi vicini e dal peso assegnato a ciascun ingresso. I calcoli che Unità di calcolo neurale elementare. vengono effettuati sono di due tipi, il primo è chiamato funzione di ingresso ini, che calcola la somma pesata dei valori di ingresso, si definisce anche Sommatore algebrico: effettua la sommatoria algebrica di segnali di ingresso, che possono essere eccitatori o inibitori; i primi vengono sommati direttamente mentre i secondi vengono invertiti, ossia moltiplicati per (–1) prima della somma. W j, i aj ini g ai = g(ini) Ingresso Funzione di ingresso Funzione di attivazione Uscita Il numero di ingressi di eccitazione o inibizione non è soggetto a limitazioni, come pure l'oscillazione positiva o negativa dell'uscita dell'elemento sommatore (Summer). ini = ∑ w j,iaj j = Wi * ai con notazione vettoriale. In questa notazione i pesi sui collegamenti che entrano nel nodo i sono indicati con Wi, l’insieme dei valori di ingresso è indicato con ai e il prodotto scalare indica la somma dei prodotti componente per componente. Ad ogni passo elementare ciascuna unità calcola il suo valore di attivazione applicando la funzione di attivazione g al risultato ottenuto per la funzione di ingresso ai ← g (ini ) = g (∑ w j,ia j ) j Usando funzioni diverse come g, si possono avere modelli diversi. Le principali funzioni che possiamo utilizzare sono: funzione a gradino, funzione di segno e la sigmoide. 113 BIOINFOSTAT +1 +1 +1 ai ai t in ai in in i i i -1 Funzione gradino Funzione segno 1 se x ≥ t gradinotx = 0 se x ≤ t +1 se x ≥ 0 segno x = − 1 se x ≤ 0 Funzione sigmoide sigmoide (x) = 1 1 + e −x Amplificatore a guadagno G: la somma, che chiameremo x, eseguita dal 1° blocco viene inviata all’ingresso di un 2° blocco che la moltiplica per una costante G. In particolare alti valori di G rendono i neuroni molto sensibili a piccole variazioni di x intorno allo 0, riducendo però la flessibilità dell'intero sistema che tende a comportarsi come un comparatore analogico, caratterizzato da 2 soli distinti livelli (VOH = 1 e VOL = 0) della sua uscita. Infatti, per G elevati (ad esempio G = 10) non ci sono "sfumature", cioè livelli intermedi, e, pertanto, l’intera rete di neuroni perde la capacità di trovare soluzioni di compromesso. Dall'altro lato, se il guadagno G è troppo basso, tutti i neuroni oscilleranno intorno al medesimo valore e nessuno prevarrà sugli altri. Stadio d’uscita non lineare: esegue una trasformazione non lineare sul segnale G*x, comprimendo il suo valore tra 0 ed 1. In pratica l’uscita U(x) é una funzione di trasferimento sigmoidale, alla quale corrisponde una curva a forma di S, come illustrato che corrisponde a: U(x) = 1 1 + e− Gx va da zero, per valori negativi elevati di G*x va ad 1 per valori positivi elevati di G*x vale ½ per G*x = 0 Tale tipo di curva si usa nei sistemi di compressione del segnale audio in cui si deve trovare un equilibrio tra fedeltà e gamma dinamica ampia. La caratteristica non lineare del neurone conferisce effettivamente ad una rete di neuroni, cioè all'insieme di n neuroni collegati tra loro, una gamma dinamica più estesa ed un grado maggiore di flessibilità. Risulta chiaro che la base cognitiva delle reti è proprio la teoria del connessionismo, la quale ritiene che i processi cognitivi siano basati sull'interazione di moduli elementari molto semplici e che il comportamento, estremamente complesso, di un sistema formato da molti di questi moduli derivi dall'interazione tra questi. Il connessionismo ha avuto un impatto enorme nello sviluppo di nuovi algoritmi per l'intelligenza artificiale; questi devono essere visti nell'ottica di una loro futura implementazione hardware basata sull’interconnessione di molti PE (in generale più una rete è grande e ovviamente maggiori 114 BIOINFORMATICA sono le sue prestazioni). Inoltre dobbiamo considerare la notevole varietà delle strutture possibili per le reti, ciascuna delle quali conduce a proprietà computazionali molto diverse. Le reti nell’ambito della connessione possono essere alimentate in avanti e ricorrenti, dal punto di vista informatico la rete può essere considerata come un grafo diretto aciclico o DAG (Directed Acyclic Graph); in generale questo tipo di reti sono organizzate in strati dove non ci sono collegamenti tra unità dello stesso strato, né all’indietro tra uno strato e il precedente e inoltre non ci sono salti di strato. L’assenza di cicli implica che il calcolo computazionale può procedere unicamente dall’unità di ingresso verso l’unità di uscita. Il cervello umano non può avere una rete alimentata unicamente in avanti; in questo caso non si avrebbe una memoria a breve. Alcune regioni del cervello sono largamente alimentate in avanti e stratificate, ma con evidenti connessioni all’indietro. Il cervello è quindi una rete ricorrente, ed in generale le reti ricorrenti richiedono agenti complessi e l’impiego di metodi matematici molto avanzati, poiché diventano instabili e tendono ad oscillare e comportarsi in modo caotico. Le reti di Hopfield sono una classe di reti ricorrenti molto utilizzata, dove le connessioni sono bidirezionali con pesi simmetrici, tutte le unità sono di ingresso e di uscita, e la funzione di attivazione g è la funzione segno e i livelli di attivazione possono essere solo ± 1. La rete di Hopfield funziona come una memoria associativa che dopo una serie di esempi porterà la rete a stabilizzarsi su una configurazione di attivazioni corrispondente all’esempio nell’insieme di addestramento che assomiglia maggiormente al nuovo stimolo. Le macchine di Boltzmann utilizzano pesi simmetrici, ma impiegano unità che non sono né di ingresso né di uscita: esse utilizzano una funzione di attivazione che è detta stocastica, tale che la probabilità che l’output sia 1 è una qualche funzione di ingresso pesato complessivo. In questa rete a sinistra vi sono delle unità definite come unità di I1 W 35 W 13 H3 input, mentre alla destra vi è una unità di output, O5 tra di esse i nodi etichettati come H, non I2 H4 hanno nessuna W 45 connessione diretta con W 24 l’esterno per questo motivo vengono definiti nodi nascosti. Alcune reti chiamate semplicemente Rete a due strati alimentata in avanti con due nodi nascosti. percettroni non hanno nodi nascosti, questo implica che ci sia un apprendimento molto semplice, ma per converso possono rappresentare solo realtà molto limitate. Le reti che possiedono diversi starti di unità nascoste prendono il nome di reti multistrato. Con una struttura fissa e funzioni di attivazione g fissate le funzioni rappresentabili da una rete alimentata in avanti sono limitate ad avere una specifica struttura parametrizzata. I pesi che si utilizzano per la rete definiscono quale di queste funzioni è effettivamente rappresentata. Nel nostro esempio avremo a a5 =g (W3,5 a3 + W4,5 a4) ma dove in realtà avremo =g (W3,5 g (W1,3 a1 + W2,3 a2)+ W4,5 g(W1,4 a1 + W2,4 a2)) in cui il simbolo g indica la funzione di attivazione e ai è l’output al nodo i. Le funzioni di attivazione g non sono lineari, quindi l’intera rete rappresenta una complessa funzione non lineare. Se pensiamo ai pesi come a dei coefficienti questa funzione diventa una funzione di aggiustamento dei parametri in modo tale da farli corrispondere all’insieme di addestramento, in altre parole adottiamo un procedimento che in statistica viene chiamato di regressione non lineare. Fino a questo punto si sono considerate reti con una struttura fissata, determinata a priori, se scegliamo una rete troppo piccola il modello potrebbe non 115 BIOINFOSTAT essere in grado di rappresentare la funzione desiderata, se al contrario opteremo per una rete troppo grande correremo il rischio che la rete non sia in grado di comportarsi correttamente per gli esempi che non ha incontrato. Come nella statistica, i modelli potrebbero essere sovradimensionate. Allo stato attuale non esiste un algoritmo che ci permetta di identificare la rete ottimale (NERF= Network Efficiently Representable Functions). GLOSSARIO Activation function: Una funzione per la quale le nuove output dell'unità base sono derivate da una combinazione degli input o dal livello dell'unità. Auto-associative: Un processo nel quale il sistema ha immagazzinato un set di informazioni. Successivamente al sistema viene sottoposto un set analogo. Axon: Parte di una cellula nervosa attraversata dall'impulso; parte elettricamente attiva della cellula nervosa. Back-propagation: Algoritmo di apprendimento nel quale i weights sono modificati nella propagazione di un segnale di errore backward dall'ouput all'input. Chaos: Lo studio delle dinamiche non lineari (disordine deterministico). Clonare: riprodurre per clonazione; in informatica, duplicare un elemento di hardware o software; nelle telecomunicazioni, duplicare un dato o un segnale (clonazione: riproduzione artificiale di una copia genetica identica ad una preesistente). Connetion: Collegamento tra gli elementi di processo, sia positivo che negativo, legami tra elementi di processo in una rete. Conoscenza deterministica: Sistema sufficientemente semplice e ben conosciuto da rendere inutile l'applicazione di tecniche per la trattazione di conoscenza incerta. Dendrite: Parte di una cellula nervosa che trasporta l'impulso. Parte elettricamente passiva della cellula nervosa. Euristica: Nell'ambito di una scienza, la metodologia di ricerca di fatti o verità, ovvero di fonti e documenti, preliminare allo studio specifico. Feedback loop: Un loop continuo di input nella rete fintanto che non si ottiene un risultato atteso. Fuzzy logic: Informazione incompleta o contraddittoria. Fuzzy: Col termine si intende il modo di ragionare tipicamente umano che porta a prendere decisioni ragionevoli anche in situazioni reali dominate dall'incertezza e dall'imprecisione. Intelligenza Artificiale (A.I.=Artificial Intelligence): Campo della scienza dei computer che studia il ragionamento simbolico e le metodologie di risoluzione dei problemi. Learning: La fase nella quale si istruisce la rete neurale. Modelli computazionali: Modelli di calcolo. Network paradigm: Architettura che specifica le interconnessioni e la struttura della rete. Neurone: Unità strutturale e funzionale del sistema nervoso. Perceptron: Una larga classe di reti neurali con un solo input layer e ouput layer. 116 BIOINFORMATICA Ragionamento monotonico: Fatti asseriti che restano validi nel tempo e non sono confutati da successive osservazioni. Ragionamento qualitativo: Costruzioni di modelli computazionali per il ragionamento automatico sul mondo fisico mediante l'uso di rappresentazioni qualitative. Robot: Sistema artificiale capace di interagire con il mondo; esso deriva dalla parola cecoslovacca "Robota" cioè lavoro, nome degli automi che agiscono come operai in un dramma di K. Capek. E' un automa controllato da un cervello elettronico usato per sostituire l'uomo in attività manuali faticose o pericolose o troppo costose nell'ottica del profitto. Simulazione: Generazione del comportamento. Soft computing: Settore di ricerca che si prefigge di integrare i sistemi fuzzy con altre tecniche. Fonda le sue basi sulla teoria dei fuzzy set, si avvale della teoria delle reti neurali e degli algoritmi genetici per ottenere un sistema integrato per lo sviluppo di applicazioni. Spreading activation: Processo di attivazione simultanea alle reti neurali. Stochastic: Che prevede una probabilità o di variabile random. Summation function: Una funzione che ingloba diversi input e si attiva con un solo output. Threshold: Livello minimo di eccitazione energetica. Training: Processo di apprendimento associato ad input con risposte corrette. 117 BIOINFOSTAT BIOINFORMATICA MOLECOLARE Le origini. Storicamente negli anni ’60 Dayhoff e colleghi raccolsero tutte le informazioni relative alle sequenze degli aminoacidi e pubblicarono tali dati nell’Atlas of Protein Sequences and Structure nel 1965. I dati allora noti potevano essere contenuti in un semplice dischetto e rappresentavano il lavoro di un anno di un piccolo gruppo di ricercatori. Oggi la stessa quantità di informazioni viene prodotta in un’ora circa. Nel 1982 con l’avvento delle tecnologia della PCR per il DNA, inizia il progetto sul genoma umano e il gruppo del Laboratorio Europeo di Biologia Molecolare inizia a creare un database trascrivendo le informazioni contenute nelle riviste. DATA BASE. Il DDBJ, il EMBL e la GenBank rappresentano i data base maggiormente utilizzati nello studio delle sequenze nucleotidiche o proteiche, sono dei pubblici repertori per avere informazioni di ordine biologicomolecolare. La conoscenza dei formati e della strutturazione dei dati è di importanza fondamentale per gli utilizzatori di queste informazioni. Allo stato attuale il formato dei file di DDBJ, EMBL, GenBank rimane il formato di elezione per lo scambio delle sequenze a livello internazionale. Si deve osservare comunque che a livello di utilizzazione informatica di questi data base è necessario il collegamento a suite di programmi specifici. È allo studio una versione di data base chiamata ASN.1 (ABSTRACT SYNTAX NOTATION) che dovrebbe sopperire ad alcune limitazioni per la manipolazione informatica delle sequenze offrendo una strutturazione analoga per i formati analoghi nei campi simili. Inizialmente gli inglesi stipulano un contratto di collaborazione con un gruppo americano (Los Alamos National Laboratory) da questa collaborazione nasce GenBanK. GENBANK è un database 118 BIOINFORMATICA sulle sequenze, sui nucleotidi e sulle proteine della NIH (National Institutes of Health di Bethesda nel Maryland). Ogni unità di record rappresenta una stringa di RNA o DNA con le relative annotazioni. Tutti i record nelle GENBANK sono generati dall’immissione diretta delle sequenze da parte dei relativi autori. Questa banca dati di biologia molecolare è mantenuta dal National Center for Biotechnology Information (NCBI) al NIH. Questo data base rappresenta i risultati di una collaborazione con un centro giapponese (DNA Data base of Japan, DDBJ, che si trova a Mishana) e il Laboratorio Europeo di Biologia Molecolare (EMBL che si trova in Inghilterra a Hinxton ed è mantenuto dall’European Bioinformatic Institute. Ognuno di questi centri rappresenta un punto di immissione dei dati relativi alle sequenze. Attualmente la GenBank viene considerata una banca DNA centrica, e rappresenta il punto di riferimento nell' ambito della biologia molecolare. Rappresentazione simbolica di sequenze. Si deve fare una importante distinzione sui data base possiamo avere DB Primari che sono detti anche ARCHIVAL, mentre i secondari sono detti CURATED. I data base primari rappresentano i risultati emersi dalla sperimentazione in laboratorio, sono quindi i risultati di un sequenziamento ottenuto a livello di DNA. Ogni annotazione del DNA e definita come CDS (coding sequence). In molti casi la sequenza di aminoacidi viene ricavata in quanto difficilmente si attua un sequenziamento a livello aminoacidico. Si deve comunque prestare molta attenzione nell’uso e nell’interpretazione dei risultati ottenuti da queste sequenze. La interpretazione della 119 BIOINFOSTAT sequenza di proteine da una sequenza di mRNA non è difficile, ma è necessario determinare il corretto codone di inizializzzazione. COME RAPPRESENTARE UNA SEQUENZA DI DNA. Il modo più semplice di rappresentazione è quello di una stringa di nucleotidi con una serie di tag o identificatori. >LO4459 GCAGCCACGA …………TATAC analogamente potremo trovare per una proteina >P31373 MTLQESDKFA…………………………………………………KQATN Il formato con il quale si utilizzano le informazioni di biologia molecolare è il FASTA, tale formato viene utilizzato nei principali programmi di analisi di biologia molecolare. >171361 gb Lo4459 YSCCYS3A Saccaromicies lyase (CYS3) gene, complete cds. cerevisiae cystathionine gamma- GCAGCGA………………………………………… …………………………………………………………… ……………………………………………………………TATAC Un file FASTA contiene il carattere > che indica l’inizio, un identificatore Lo4459 e una sequenza di lettere Maiuscole, o minuscole solitamente disposte in righe di 60 caratteri. Sono inoltre presenti altre informazioni per identificare e caratterizzare la sequenza. Il formato della GenBank. Il formato di scambio utilizzato per rappresentare la sequenza è il GBFF che significa GenBank FlatFile. Il file GBFF può essere scomposto in tre parti. Esempio di GENES. LOCUS HSAMCC DATE 07-JUN-1960 DEFINITION Human amphiphysin mRNA, complete cds. CITATION YAMAR95 SEQUENCE 1 ccaggtgcct actgactcct tcagaaatgt cagttcctgt cccatgccct 61 cacatgcagg gctctgtgca caatgcgtga caatggcttt tagat taatatttcc // Esempio di REFLIST D YAMAR95 RA Yamamoto R., Li X., Winter S., Francke U., Kilimann M.W.; RT Primary structure of human amphiphysin, the dominant autoantigen RT of paraneoplastic Stiff-Man syndrome, and mapping of its gene RT (AMPH) to chromosome 7 RL Hum. Mol. Genet. 4:265-268(1995). I // 120 BIOINFORMATICA HEADER. La parte iniziale è la più specifica del file, il primo elemento del file è LOCUS che indica il nome del locus, dal punto di vista storico il nome dovrebbe rappresentare anche il nome del record. Solitamente è un insieme di lettere e numeri (massimo 10) ad esempio HUMBB indica il locus della beta-globulina umana. LOCUS AF10325 3291 bp DNA INV 08-JUL-1999 Al fine di evitare errori o confusioni viene assegnato anche un numero di accesso indicato come un insieme di caratteri alfanumerici, questo numero è unico e specifico. La lunghezza della sequenza viene indicata con il numero di coppie (da 1 a 350,000), in pratica si trovano sequenze con oltre 50 bp. Il termine DNA indica il tipo di molecola utilizzata nella determinazione della sequenza, i tipi possono essere : DNA, RNA, tRNA, rRNA, mRNA e uRNA. Di seguito vengono riportate tre lettere che hanno il significato di facilitare la classificazione in termini tassonomici o di altre classificazioni, e costituisce un sistema di divisione funzionale. La data indica il giorno in cui la sequenza è stata resa disponibile. DEFINITION. Con questo termine si riportano le informazioni di tipo biologico relative al record. In generale esiste un certo accordo tra i diversi data base circa la strutturazione della definizione. Esempio : DEFINITION Genus species protein X (XXX) gene Con le seguenti possibilità nuclear gene encoding mitocondrial protein nuclear gene encoding chloroplast protein chloroplast gene encoding mitocondrial protein In ambito di collaborazione fra i diversi data base il nome completo del genere o della specie viene riportato nella linea di definizione (esempio H.sapiens per Homo sapiens). Solo un organismo sfugge a questa definizione si tratta del virus della immunodeficienza che è rappresentato nella definizione come HIV1 e HIV2. Il Numero di accesso, rappresenta la chiave primaria ed univoca di accesso a un determinato record. Questo numero viene anche citato nella pubblicazione relativa e anche se la sequenza viene aggiornata il numero non cambia. Le possibilità sono di avere una lettera Maiuscola e 5 numeri, oppure da due lettere e 6 numeri. Possiamo trovare anche un numero di accesso secondario, che costituisce il retaggio di un vecchio sistema di classificazione. Il NID rappresenta l’identificatore genetico (gi) per i nucleotidi, il prefisso (d, e oppure g) indica il data base che viene utilizzato.Semplicemente un numero di gi indica un unico identificatore associato ad una unica sequenza, se la sequenza cambia, si modifica anche il relativo gi, mentre il numero di accesso non si modifica. ACCESSION AF010325 NID g2245686 VERSION AF010325.1 GI: 2245686 Al fine di facilitare la ricerca esiste anche la versione, nel nostro caso si ha la prima versione associata al NID g2245686. 121 BIOINFOSTAT KEYWORDS. Rappresentano un retaggio storico, attualmente l'uso è scoraggiato in quanto molti autori hanno inserito dei termini non contenuti nel vocabolario del data base; inoltre, l’inserimento delle parole chiave non è stato applicato in modo uniforme all’intero data base. SOURCE. Indica il nome comune o il nome scientifico dell’organismo, in molti casi sono presenti anche informazioni relative alla tassonomia. In questo caso si prevede un collegamento con la pagina della Tassonomia del NCBI (National Center for Biotechnology Information). REFERENCES 1 (bases 1 to 3291) AUTHORS Morcillo, P., Rosen, C., Bayles, M.k TITLE CHIP, a widely expressed chromosal protein required for remote enchancer activity and segmentation in Drosophila. JOURNAL J.Biol.Chem. 269 8(19), 14064-14073 (1994) MEDLINE 94245725 PUBMED 7514599 Ogni records della GenBank riporta una referenza bibliografica, e un link alla pubblicazione di MEDLINE. Nella parte finale sono riportati i commenti e le note, nel passato si trovavano anche precise indicazioni sugli autori come ad esempio gli indirizzi di posta elettronica o specifiche URL, attualmente questa tendenza viene scoraggiata, in quanto gli indirizzi elettronici tendono a cambiare con una rapidità maggiore rispetto agli indirizzi postali. A livello scientifico MEDLINE rappresenta la banca dati bibliografica più importante, ogni articolo viene registrato con un codice di identificazione (MUID), attraverso questo numero è facile risalire all'articolo e alla rivista. Recentemente la NCBI, con MEDLINE e altri editori ha introdotto un nuovo identificatore chiamato PubMed (PMID) che contiene sia gli articoli source /organism= “Drosophila melanogaster” pubblicati sia anche articoli non /map=”2-106.8 cM, 60B1-“ ancora pubblicati. È l’unica rappresentazione comune a tutti /clone=”P1-Phage DS00543” i records della GenBank, contiene inoltre una serie di /cromosome=”2” qualificatori legali e alcuni qualificatori obbligatori (esempio il tipo di organismo). FEATURE TABLE. Rappresenta la parte centrale del GBFF record, e costituisce la parte di maggior rilievo per la rappresentazione biologica del record. FEATURES Location/Qualifiers. Il qualificatore dell’organismo può essere descritto come genere e specie, sovente l’organismo viene descritto a livello di subspecie. CDS 140………1897 /gene=M-Delta-3” /codon_start=1 /db_xref=”PID:e322087” /db_ref=”PID:g2415691” /translation=”MVSLQVSPLLSTQTL………… CDS. Le CDS costituiscono una serie di istruzioni per leggere e interpretare la sequenza. Leggendo si hanno informazioni, in questo caso della posizione degli aminoacidi. È da notare la presenza di indicazioni per avere un cross-references verso data base esterni, con l’indicazione del PID (identificatore per le proteine) e con il relativo gi. ………………………………………………………………… ……YAREA” Il prefisso e indica la banca dati EMBL, 122 BIOINFORMATICA mentre g porta alla GenBank. Questo avviene perché ogni banca dati mantiene un proprio identificatore. Nella GeneBank si trovano due PDI per indicare che record proviene da EMBL; questo sistema tende ad ingenerare una /protein_id =”AAA12345.1” certa confusione. I sistemi tendono a /db_xref=”GI:2415691” divenire meno ambigui come nell’esempio riportato, ma attualmente /db_ref=”PID:e322087” convivono diversi modi di espressione /db_xref= PID:g2415691” dei records. Il termine protein id rappresenta l’identificatore delle proteine o numero di accesso che nel caso deriva dal database delle sequenze nucleotidiche. L’identificatore è costituito da tre lettere e cinque numeri, seguiti da un ulteriore numero che informa sulla versione. La versione incrementa di una unità quando viene aggiornata la sequenza; questo sistema permette di vedere l’evoluzione osservando ad esempio i records precedenti. CDS 140………1897 INFORMATION RETRIEVAL NEI DB. Attualmente la GenBank contiene 1.6 milioni di records che coprono circa 1 bilione di basi nucleotidiche. Uno sforzo è stato fatto quindi per permettere al ricercatore di accedere al data base e di interrogarlo direttamente. Il modo considerato più semplice per accedere alle informazioni è quello di formulare una interrogazione attraverso la posta elettronica. Con questa modalità si attiva un server chiamato RETRIVE. Il server quindi attiva la ricerca che può essere per singola parola chiave o una ricerca più complessa con l'utilizzo di molte parole chiave associate a operatori Booleani. L'invio di una richiesta ad un server di posta richiede che nella compilazione della richiesta si utilizzi un formato standard di interrogazione, come riportato nell'esempio. Per primo troviamo To: [email protected] l'indirizzo di posta elettronica a cui Subject: Complex Query dobbiamo inviare la DATALIB swissprot nostra richiesta, il soggetto della richiesta Begin non è strettamente “histone H1” AND “Saccharomicies” OR “Schizosaccaromicies” indispensabile per il server, ma ci viene Schema di richiesta con posta elettronica. chiesto generalmente dal nostro programma di posta elettronica. L'inizio del messaggio è DATALIB che rappresenta la richiesta di interrogazione verso uno specifico data base. Il termine BEGIN indica che non esistono altri parametri della ricerca e che i termini sotto riportati costituiscono le parole chiave da ricercare. Gli operatori Booleani sono AND, OR, NOT che possono essere usati singolarmente e congiuntamente. Le " " indicano che la frase deve essere letta congiuntamente. Chiaramente l'utilizzo di questo sistema di interrogazione pone dei limiti, primo fra tutti quello di dovere effettuare delle interrogazioni multiple alle diverse DATLIB, quindi un data base alla volta. La consapevolezza dell'esistenza di una serie numerosa di connessioni naturali ha indotto alla ricerca di un motore in grado di interrogare per una precisa entità biologica senza dover ricorrere ad un processo sequenziale e legato ai sistemi specifici di interrogazione del database. La risposta a queste esigenze è il sistema chiamato ENTREZ, creato e gestito dalla NCBI. Il vantaggio di questo sistema consiste nella possibilità di utilizzare diverse piattaforme di avere un accesso integrato ai records PubMed (Medline). Con una sola richiesta di interrogazione QUERY è possibile ottenere informazioni relative a: sequenze di Nucleotidi, proteine, struttura tridimensionale, mappaggio. 123 BIOINFOSTAT ENTREZ offre due possibilità di accedere e connettersi ad un data base: 1-neighbonring 2-hard links Neighbonring. Il primo sistema risponde alla interrogazione in base alle somiglianze o vicinanze ed è basato su un approccio statistico di similarità. I sistemi con i quali si può procedere sono diversi. BLAST (Basic Local Alignment Search Tool) è un algoritmo di ricerca introdotto nel 1990 da Altschul et al., che si basa sull'allineamento delle sequenze e determina un punteggio HSPs (High Scoring segment Pairs). Programma Database Query Note Blastp Proteine Protein Utilizza una matrice di sostituzione per trovare le relazioni di distanza. Blastn Nucleotidi Nucleotidi Crea lo scoring, ma non la distanza Blastx Nucleotidi Protein Utile per l’analisi delle nuove sequenze di DNA Tblastn Proteine Nucleotidi Utile per trovare le sequenze del database Tblastx Nucleotidi Nucleotidi Utile per le analisi con EST regioni nelle VAST (Vector Alignment Search Tools). Creato nel 1995 da Madej et al. consente di confrontare le coordinate utilizzando un sistema di analisi complesso che prevede tre passaggi 1-Identifica le coordinate di tutte le catene alfa e beta della proteina e le trasforma in vettori. 2- Un algoritmo cerca di individuare gli allineamenti ottimali del vettore, analizzando le coppie di elementi strutturali dello stesso tipo, con medesima orientazione. Si ottengono quindi delle substrutture significative dal punto di vista statistico e successivamente si confrontano con delle proteine scelte casualmente. 3- Un affinamento viene dato impiegando la tecnica di Montecarlo per definire i residui tali da ottimizzare l'allineamento strutturale. Con questo approccio è possibile trovare delle relazioni di tipo strutturale e probabilmente anche funzionale che legano le proteine. Si deve ricordare comunque che il metodo VAST non è il miglior metodo per determinare le similarità strutturali. La riduzione ad una serie di vettori induce una perdita di informazioni che con i metodi di HOMOLOGY MODEL BUILDING al contrario vengono conservate. Si deve segnalare come sia molto importante l'uso corretto delle KEYWORDS, per dare un maggior peso ad un termine rispetto ad altri termini. Si definisce questa un tecnica di ponderazione delle parole, MEDLINE utilizza un testo libero dove la grammatica e la sintassi non sono sempre definite. ENTREZ impiega un Possibilità di collegamenti in MEDLINE 124 BIOINFORMATICA metodo di ricerca chiamato relevance pair model of retrieval che attribuisce un peso diverso alle parole. Consideriamo i seguenti titoli: BRCA1 as a Genetic Marker for Breast Cancer e Genetic Factors in the Familial Transmission of the BRCA1 Gene. Entrambi gli articoli contengono i termini BRCA1 e Genetic e quindi supponiamo che entrambi gli articoli trattino dello stesso argomento, ma nel primo articolo le informazioni contenute nel titolo del lavoro sono più specifiche (Breast Cancer). Le parole chiave che vengono reperite direttamente nel titolo hanno un punteggio maggiore rispetto a quelle ritrovate nel riassunto, le parole vicine assumono un valore più importante di non quando non siano separate o distanti all'interno di una frase. Inoltre il peso di una parola dipende anche dalla frequenza con cui compare in tutto MEDLINE. Categoria Medline Nucleotidi Proteine Struttura Genoma Testo OK OK OK OK OK Autore OK OK OK OK OK Rivista OK OK OK OK OK Accession Numb OK OK OK OK OK Data pubblicazione OK OK OK OK Medical Subject Index OK OK OK OK OK OK OK OK Nome Organismo Simbolo Gene OK OK OK Nome proteina OK OK OK OK EC numero OK OK OK OK Nome chimico OK OK OK OK OK OK Key words sequenza CDS OK 125 OK BIOINFOSTAT Proprietà OK OK OK Hard Link. È un sistema basato sulla creazione di collegamenti con i data base con semplici connessioni. Lo schema illustra il meccanismo di funzionamento. Con questo sistema si ottiene una mole di informazioni notevole con una sola interrogazione, quindi con un risparmio di tempo. L'attuale versione disponibile è conosciuta come www Entrez e può essere interrogata direttamente in rete utilizzando sia Internet Explorer che Netscape. Il sistema o il modello di ricerca è definito dal NCBI come una classe di oggetti chiamata SeqID, questa necessità nasce dal dover integrare informazioni ed in particolare sequenze che sono contenute e archiviate in diversi data base. Come si è facilmente intuito PIR, SWISS-PROT e il data base delle sequenze nucleotidiche usano il termine accession number con lo stesso formato dei dati. Ad esempio A10234 di PIR, e A10234 di SWISS-PROT indicano sovente cose diverse, mentre all'interno di DDBJ, EMBL e GenBank il contenuto di A10234 è lo stesso anche se possono sussistere differenze riguardo al formato. Esiste quindi un sistema PDB SeqID che contiene il nome della molecola e la catena ID per identificare una solo ed unica sequenza. Esistono poi dei sistemi di identificazione delle sequenze che prevedono come ad esempio nelle mappe genetiche l'assegnazione di un ID generale (SeqID general), mentre nel processo di introduzione della sequenza nel data base viene inserito un ID locale (SeqID local). BIOSEQ. Bioseq letteralmente la sequenza biologica è l'elemento centrale del modello del NCBI. Per funzionare il Bioseq deve avere almeno un SeqID. Per utilizzare Bioseq non è necessario avere tutta la molecola sequenziata, è possibile avere sequenziato gli esoni e non gli introni. Il meccanismo di funzionamento è legato alla creazione di un sistema lineare di coordinate per la sequenza in esame. Si presentano quindi due possibilità quando si effettua una confronto tra due sequenze • Le sequenze sono identiche • Le sequenze sono diverse Formattati: Elenchi numerati La possibilità di analizzare le sequenze utilizzando le relative coordinate può permettere di utilizzare le differenti classi di Bioseq. VIRTUAL BIOSEQ - Si utilizza quando conosciamo il tipo di molecola, la lunghezza e la tipologia (lineare o circolare) ma non la sequenza. La lunghezza viene ricavata dall'analisi delle bande sui gel elettroforetici. RAW BIOSEQ. La lunghezza è conosciuta si confrontano le diverse righe. SEGMENTED BIOSEQ. Non sono contenute sequenze delle righe, ma solo gli esoni sono conosciuti, gli esoni vengono rappresentati utilizzando un 126 BIOINFORMATICA sistema Raw, mentre gli introni sono rappresentati con Virtual Bioseq. DELTA BIOSEQ. Si basa su confronti con SeqID. MAP BIOSEQ. È utilizzata per dare una rappresentazione fisica della mappa genetica. Per maggiori informazioni sui programmi si rimanda a: CLUSTAL ftp://ftp.ebi.ac.uk/pub/software/ DOTTER ftp://ftp.sanger.ac.ak/pub/dotter/ LALIGN ftp://ftp.virginia.edu/pub/fasta/ BLAST ftp://ncbi.nlm.nhi.gov/blast/ SEG ftp://ncbi.nlm.nhi.gov/pub/seg/ BLAST. Il programma introduce una serie importante di affinamenti per l'analisi dei dati, aumenta la velocità della ricerca e offre un importante supporto statistico alla valutazione delle risultanze. Il programma si basa sulla statistica di Altschul et al.,1990. Esistono diverse versioni del programma, la 1.4 e successive; dalla versione 2.0 si ha anche un esplicito trattamento per i gaps. Nel 1997 il programma è stato completamente riscritto e con un cambiamento dei parametri. Fare attenzione che la versione 2.0 può essere confusa con il programma WU-BLAST della Università di Washington che è chiamato BLAST2. In realtà in BLAST noi possiamo trovare 5 diversi programmi che interrogano banche dati diverse. Per ricerche di routine possiamo utilizzare un database nr che contiene la collezione di DNA e proteine che ha lo scopo di ridurre la ridondanza. Programma Database Interrogazione Note Utilizza una matrice di sostituzione per trovare le relazioni di distanza. È possibile usare anche filtri SEG. blastp Proteine Proteine blastn Nucleotidi Nucleotidi blastx Nucleotidi Proteine tblastn Proteine Nucleotidi Utile per trovare regioni non annotate. tblastx Nucleotidi Nucleotidi Utile per le analisi EST. Non sono determinate le relazioni di distanza. Utile per l'analisi di nuove sequenze di DNA. TERMINI E SIGLE UTILIZZATE IN BLAST nr Non ridondante month Subset di nr, modificata negli ultimi 30 giorni swissprot Data base Swiss-Prot 127 BIOINFOSTAT pdb Sequenze di amino acidi descritte con le coordinate atomiche yeast Set di proteine codificate dal genoma di S. cervisiae ecoli Set di proteine codificate dal genoma di E. coli est Divisione della GenBank (espressed sequence tags) sts Divisione della GenBank (sequence tagged sites) htgs Divisione della GenBank (high throughput genomic sequence) gss Divisione della GenBank (genome survey sequence) mito Set di proteine codificate dal genoma mitocondriali di vertebrati alu Collezione di sequenze ripetute vector Collezione di vettori di clonaggio Noi vogliamo determinare quante sequenze omologhe esistono in un database NR (non ridondante), molto semplicemente possiamo copiare la sequenza nel box di testo del NCBI BLAST se premere il bottone submit. La sequenza dei dati è riportata nel formato FASTA > Dictyostelium discoideum myosin (myoI) gene, exons 1 and 2. aatcaacaaa acttatcatt caatatctcg ccgcaagaac aaatcgtcat tcccaagtcg aacaaatgat tgttgaatct tctccaatct tggaagcttt tggtaatgca aaaacaatta gaaataataa ctcttctaga tttggtaaat ttattgaaat tcaatttaat agagaaggtc atatttctgg tgctagaatt ataaattgta agtttttcca gaaaaaaaag aaaaaaaaaa aaaaaaaaaa aaattgagta ttaatatttt tttatttcac tttttttttt catcaaccct cttgtcaaaa ttttttattt tttttatttc tacaaattct atcaaaccat accaaaaaaa aaaaagactt attagaaaaa tctagaattt cacatcaagc tagttca (L35321 nel nostro esempio) mentre il gi è il numero di formato NCBI, e nella nostra sequenza corrisponde a 608629. Analizziamo ora la tipologia dei risultati 128 BIOINFORMATICA osservando una pagina di BLAST. Successivamente possiamo inserire la parte di una sequenza, ad esempio possiamo inserire solo le ultime 82 basi di L35321. A B C D E F G H La prima linea indica dove l'algoritmo di BLAT è stato pubblicato Nota di richiamo Il nome della richiesta Nota sul database richiesto (nr) L'High Score è un numero che viene calcolato seguendo uno schema : • Se esiste una corrispondenza si aggiungere 5 • Se non esiste una corrispondenza due caratteri adiacenti sottrarre 4 due caratteri con una regione sottrarre 1 Il valore P(N) offre una indicazione sulla corrispondenza delle sequenze, quindi la probabilità di avere una buona o cattiva corrispondenza delle sequenze; il valore varia da 0 a 1. TERMINOLOGIA E SIGLE gb sequenza ritrovata nel Database GenBank. L35321 numero di accesso in GenBank. DDIMYOIA è la sigla di Dictyostelium discoideum myosin (myoI) gene, exons 1 e 2. lo HighScore è 338 P(N) è un valore piccolo quindi un buon candidato. N è uno. emb sequenza ritrovata nel database EMBL. X07234 è il numero di accesso di EMBL. SASSV1XX è la sigla del provirus. Lo HighScore è 112 P(N) è un valore elevato quindi non è un buon candidato. N è uno. Le informazioni mostrate in F sono ripetute con delle ulteriori informazioni. La lunghezza completa viene riportato e nel nostro caso risulta 407. Lo score è di 338. Il valore Expect corrispondente a P(N) corrisponde a 4.0e-19 Ci sono 85% di Identities (in assoluto da 70 of 82). Utilizzando una sequenza di DNA noi osserviamo lo stesso numero di Positivi e Identità. Solo se utilizziamo una sequenza di aminoacidi possono esistere differenze tra i due parametri. Valori positivi indicano che gli aminoacidi appartengono allo stesso gruppo. Per ultimo viene mostrata l'interrogazione. Notare che NNNNs è la sequenza della interrogazione. Questa regione viene identificata come regione a bassa complessità e viene quindi ignorata nella ricerca per la omologia della sequenza. Possiamo osservare come la sequenza di interrogazione sia parte della sequenza Sbjct. Questa sequenza parte a 326 e termina a 407. Le informazioni riportate in F sono ulteriormente completate: Ad esempio il nome è ora completo. La lunghezza della sequenza completa è di 15.465. Lo Score è 112. Il valore atteso è Expect (2.5) e risulta maggiore del valore riportato per P(N): 0.92 Esistono il 60% di Identities (assoluto tra 32 di 53). Si trova lo stesso numero di Positives. Tutti i positivi provengono dallo stesso gruppo di aminoacidi. Questa regione viene identificata come regione a bassa complessità e viene quindi ignorata nella ricerca per la omologia della sequenza. Possiamo osservare come la sequenza di interrogazione NON sia parte della sequenza Sbjct. Questa sequenza parte da 326 e termina a 407. La sequenza di interrogazione corrisponde alle lettere da 3 a 55 collegata alle basi da 5789 a 5841. 129 Formattati: Elenchi numerati BIOINFOSTAT I L In questa sezione appaiono una serie di parametri V-Informazioni relative al massimo numero di hits nel database che vengono forniti nel programma di output (vedi anche A). Il valore di default nel NCBI è 100. B-Numero massimo di hits nel database per i quali viene fornito un allineamento nel programma di output (vedi G e H). Il valore di default è 50. H-Se H è uguale a 1, viene stampato anche un istogramma. Il valore di default è 0 che non produce istogrammi. Lambda-Lambda è un parametro della statistica di Karlin-Altschul. Dipende dalla matrice usata per calcolare il punteggio (osserva anche K). K-K è un parametro di Karlin-Altschul che dipende dalla matrice di scoring utilizzata. Si osserva che nelle interrogazioni per i nucleotidi utilizzando il programma blastn i valori di K e Lambda non sono importanti in quanto dipendono dalla distribuzione dei residui nella sequenza che risulta equiprobabile 0.25/0.25/0.25/0.25 per A/C/G/T I valori dei parametri di Karlin-Altschul negli altri casi dipendono dal sistema di scoring utilizzato (parametri M e N). H-H rappresenta l'entropia e il rumore di fondo della frequenza dei residui, rappresenta un valore statistico riportato dal programma BLAST. E-Corrisponde al valore atteso, stabilisce il livello di significatività dell'allineamento. Nel modello di interrogazione di Karlin e Altschul, indica il numero di corrispondenze che ci si dovrebbe attendere sulla base di una estrazione randomizzata. Il valore di default è 10, il campo di variazione di E è 0 < E < = 1000. S-Il parametro rappresenta lo score al quale un singolo allineamento soddisfa il livello soglia di E. Il valore di default dipende dal valore E. T-Rappresenta il valore limite per la ricerca di parole di lunghezza W in un database. Se il valore T è 0, solo i matches con una distanza 0 vengono ricercati. X-X è un numero positivo che rappresenta il massimo di drop-off. Per blastn, il valore di default di X è il minimo score che rappresenta 20 bits di informazione, o una riduzione del livello statistico della significatività di un fattore 2. Alla fine di una ricerca Blast vengono fornite alcune ulteriori informazioni DATA BASE UTILIZZATI: Database: Non-redundant GenBank+EMBL+DDBJ+PDB sequences. QUANDO È STATA FATTA LA RICERCA: Posted date: May 25, 1998 5:31 AM QUANTE LETTERE SONO CONTENUTE NEL DATABASE: # of letters in database: 709,610,471 QUANTE SEQUENZE SONO CONTENUTE NEL DATABASE: # of sequences in database: 342,388 QUANTI HITS SONO STATI EFFETTUATI (first stage): Number of Hits to DB: 29964 Si ripete il numero delle sequenze: Number of Sequences: 342388 Si ripete il numero di Hits (first stage): Number of Hits to DB: 29964 QUANTI HITS HANNO AVUTO SUCCESSO (second stage): Number of successful extensions: 3045 QUANTE SEQUENZE HANNO AVUTO UN VALORE SUPERIORE ALL'E(xpected): Number of sequences better than 10: 2 TECNICHE DI ALLINEAMENTO. Una caratteristica comune a tutte le discipline della biologia è l'analisi comparativa per mettere in luce delle differenze. È noto a molti come le intuizioni di Darwin nascessero dal confronto della morfologia degli animali presenti sulle isole Galapagos e come questi confronti consentissero di postulare la teoria della selezione. Sostanzialmente e concettualmente lo stesso tipo di analisi viene realizzato oggi per confrontare le sequenze dei geni e delle proteine. Questa analisi viene realizzata a livello di singola base o aminoacido con una finalità di inferire sulla struttura o sulla funzione di una determinata struttura. Il metodo maggiormente utilizzato è quello definito come allineamento delle sequenze. 130 BIOINFORMATICA Confronto di sequenze. Esistono due possibilità: si confrontano solo due sequenze (pairwise alignments), il confronto avviene con il confronto di diverse sequenze (multiple alignments); dobbiamo segnalare come negli ultimi 30 anni si è osservata una esplosione delle metodologie di analisi delle sequenze, tanto che si parla del fenomeno come " big bang of sequence information expansion". FINALITÀ. Le finalità dell'allineamento delle sequenze sono quelle di offrire ai ricercatori elementi sufficienti nella similarità per giustificare la similarità ed inferire sulla omologia o sull'esistenza di funzione È necessario precisare il significato di alcuni termini: • Similarità (similarity)= rappresenta una quantità, solitamente espressa come % che indica la percentuale di identità tra due misure. • Omologia (homology) = rappresenta la conclusione e consente di affermare ad esempio che due geni possiedono una storia ancestrale comune. Formattati: Elenchi numerati Le differenze dell'allineamento possono essere dovute a 3 cause diverse: • SOSTITUZIONE • INSERIMENTO • DELEZIONE Formattati: Elenchi numerati In una situazione ideale il confronto di due geni con la tecnica dell'allineamento se non esiste identità significa che esiste una sostituzione. Le posizioni che vengono conservate hanno o possono avere un significato funzionale. L'allineamento consente di vedere come in certe regioni gli specifici aminoacidi siano altamente conservati, e come probabilmente questi residui siano fondamentali per il Struttura modulare di due proteine. mantenimento della funzione strutturale. Questa strategia di allineamento si definisce come global alignment. Sfortunatamente non tutte le proteine mostrano un allineamento di tipo globale, ma sembra esista un sistema definito come a mosaico o a dominio modulare. 131 BIOINFOSTAT Se analizziamo la struttura di due proteine coinvolte nel meccanismo di coagulazione: la prima F12 rappresenta il fattore di coagulazione XII, mentre il PLAT rappresenta l'Attivatore del Plasminogeno. Queste proteine presentano una struttura modulare; F1 e F 2 sono moduli che si ripetono, E indica un modulo che è simile al Epidermal Growth Factor, mentre K è un modulo conosciuto come "kringle domain", la parte definita come catalitica contiene una serie di proteine coinvolte nel sistema di coagulazione. L'analisi di strutture proteiche di questo tipo avviene utilizzando un programma chiamato DOTTER che è utile per individuare complesse relazioni che interessano regioni multiple di similarità locale e sfrutta un meccanismo di confronto matriciale. I METODI PER LO STUDIO DELL'ALLINEAMENTO. I possibili e diversi allineamenti possono diventare estremamente elevati e quindi è molto importante trovare i metodi per identificare il migliore allineamento o la serie degli allineamenti migliori. A livello di calcolo computazionale si tratta semplicemente di individuare il miglior percorso possibile. Sono stati sviluppati in questo settore numerosi algoritmi che si basano sulla assegnazione di un punteggio (score) ad ogni possibile percorso (allineamento). Normalmente possiamo sommare l'incremento del contributo di ogni parte comune del percorso. Esistono anche sistemi molto sofisticati per assegnare un certo punteggio, ma consideriamo ora di dare un incremento positivo quando i residui sono identici e possiamo dare un punteggio negativo quando esiste una sostituzione o esiste un gap. In funzione di questa definizione il migliore allineamento è associato con un punteggio più elevato. Questo algoritmo è conosciuto come algoritmo di Needleman-Wunsch (1970) e si inserisce in una strategia definita come Dynamic Programming. Una modifica venne proposta nel 1981 da Smith e Waterman. Questo algoritmo ha avuto un ulteriore affinamento con Atschul e Erikson 1986. Finalmente Huang nel 1990 propone un algoritmo chiamato SIM, che viene nel 1996 inserito in un programma chiamato LALIGN (distribuito con il pacchetto FASTA). Il sistema di punteggio per le proteine è concettualmente molto semplice, prevede il confronto tra gli aminoacidi con una matrice, per aumentare la sensibilità possiamo introdurre una matrice di sostituzione. È noto come certi aminoacidi possano essere sostituiti facilmente in una proteina avendo delle proprietà fisiochimiche simili. Si parla in questo caso di sostituzione conservativa, come nel caso della valina con l'isoleucina (piccole e idrofobiche), la serina e la treonina (entrambe polari). Quando calcoliamo il punteggio dell'allineamento, diamo un punteggio maggiore agli aminoacidi identici, ma un punteggio proporzionalmente maggiore viene assegnato alle sostituzioni conservative rispetto a quelle non conservative. Possiamo anche attribuire un punteggio diverso per il confronto di sequenze molto simili in specie molto vicine, rispetto a sequenze divergenti di specie molto distanti tra di loro. Come intuiamo facilmente con questo approccio possiamo ottenere una matrice dello score che identifica i punteggi delle diverse combinazioni degli aminoacidi. La prima matrice di sostituzione fu quella basata sul concetto del modello PAM (point-accepted-mutation) di Dayhoff nel 1978. Una unità PAM viene definita come una unità di divergenza in cui 1% degli aminoacidi sono cambiati. Se il cambiamento degli aminoacidi è semplicemente casuale, la frequenza di ogni sostituzione viene determinata semplicemente come somma delle frequenze dei differenti aminoacidi. Tale frequenza è definita come BACKGROUND FREQUENCIES. 132 BIOINFORMATICA In alcune proteine è stato osservato come le sostituzioni avvenissero in alcune zone e che queste sostituzioni non compromettevano la funzionalità della proteina, queste mutazioni vengono quindi accettate durante il processo di evoluzione. Queste sostituzioni vengono chiamate TARGET FREQUENCIES. Dayhoff fu il primo che impiegò una matrice in cui il punteggio è A 4 proporzionale al logaritmo naturale del rapporto tra TARGET e BACKGROUND. A R -1 5 livello operativo si è stabilita la distanza di N 6 -2 0 250 PAM. Quindi si è definita una matrice PAM250. Come al solito le cose sono D 6 -2 -2 1 complicate, infatti come possiamo immaginare siamo in grado di costruire C 0 -3 -3 -3 9 diverse matrici di divergenza con valori di Q 0 0 -3 5 -1 1 PAM più o meno elevati, esiste infatti la possibilità di avere PAM200 che trovano E 5 -1 0 0 2 -4 6 impiego quando le sequenze sono supposte G 5 0 -2 0 -1 -3 -2 -2 molto simili. La matrice di sostituzione BLOSUM è costruita nello stesso modo, ma H 1 -1 -3 0 0 -2 8 -2 0 con una diversa strategia nella determinazione della frequenza target. Queste matrici sono dovute a Henikoff nel 1991, e come nel caso delle matrici PAM si hanno delle numerazioni. Ad esempio una BLOSUM62, una BLOSUM30, BLOSUM90. A R N D C Q E G H A R N D C Q E G H A 2 R -2 N 0 0 2 D 0 -1 2 4 C -2 -4 -4 -5 12 Q 0 1 1 2 -5 4 E 0 -1 1 6 -5 2 G 1 -3 0 1 -3 -1 H -1 6 4 0 5 Rimane ancora da risolvere una difficoltà, come valutiamo gli inserimenti e gli eventuali GAP. Diverse sono le strategie che possono essere adottate per risolvere questa difficoltà e penalizzare l'esistenza di GAP. I diversi metodi tendono a penalizzare i GAP introducendo due parametri: il valore G, spesso chiamato gap opening penality e un parametro L definito come gap extension penality che tiene conto della lunghezza del GAP. I valori che si ottengono sono empirici e non esiste una teoria che consenta di effettuare una scelta ragionata di questi valori solitamente G varia da 10-15, mentre L varia da 1-2 (valori per BLOSUM62). 6 TECNICHE DI ALLINEAMENTO MULTIPLO. Le recenti scoperte nella genetica molecolare hanno portato alla individuazione di nuove proteine, e come conseguenza è nata la necessità di allineare le diverse proteine per cercare di comprenderne la funzionalità. 2 2 1 -3 3 1 -2 La ricerca di allineamenti multipli scaturisce dalla necessità o dalla volontà di rispondere a molti quesiti biologici necessari nello sviluppo scientifico della medicina. Possiamo considerare ad esempio che lo studio degli allineamenti multipli possa offrire Inversione di sequenza. 133 BIOINFOSTAT informazioni utili per lo studio evolutivo di una proteina analizzandone l'albero filogenetico. Se immaginiamo la struttura di una proteina come costituita da una serie di piccoli mattoni, ci è facile dire che le strutture riportate siano diverse, ma se osserviamo con maggiore attenzione percepiamo che le due sequenze sono speculari tra di loro. I biochimici hanno rilevato come in proteine simili ci possano essere delle regioni altamente conservate e possiamo allora comprendere come il mantenimento di una conformazione spaziale sia fondamentale per il mantenimento funzionale di una proteina. Un esempio molto appropriato sull'impiego della bioinformatica genetica è rappresentato dalla malattia molto nota come il diabete, malattia per la quale l'organismo umano non è in grado di produrre una quantità sufficiente di insulina. La cura più efficace è quindi quella di fornire al malato dell'insulina esogena. Questa insulina veniva prima estratta dal suino, attualmente possiamo utilizzare i batteri per produrre l'insulina in quantità e qualità soddisfacenti. Immagine dell'insulina umana realizzata con il programma RASMOL. Le due catene vengono colorate con colori diversi. Dati ricavati da Protein Data Bank, ID codes: 1HIU. Allineamento della sequenze dell’insulina umana e animale. 134 BIOINFORMATICA Le immagini riportate indicano il motivo per cui si è scelto il suino per estrarre l'insulina. L'identità delle sequenze è per il 94% con il coniglio, 89% per il suino, e 87% per il bovino. La comprensione e la costruzione di programmi che consentano di definire l'allineamento di proteine o delle relative sequenze è una impresa complessa; i programmi attuali si basano su un concetto molto semplice chiamato progressive alignement, ideato da Sankoff nel 1975. L'idea dell'esistenza di un allineamento dipende dalla contemporanea esistenza di una relazione biologica fra le proteine, o meglio dall'esistenza di una relazione filogenetica tra le proteine. Esistono differenti algoritmi che risolvono il problema ma con approcci differenti e sviluppi nelle procedure di calcolo diversificati. Parliamo di allineamenti multipli quando confrontiamo più di due sequenze. La BSE (Bovine Spongiform Encephalopathy) conosciuta anche come malattia della mucca pazza, scrapie e CJD (Creutzfeldt-Jakob-Disease) sono tre malattie che sono relativamente simili e possono colpire i bovini, gli ovini e l'uomo (nel dicembre 1997, il premio Nobel venne conferito a Stanley Prusiner, per le ricerche sul prione). La malattia non sembra essere dovuta ad un virus, batterio, fungo ma ad una sorprendente proteina chiamata prione. Questa proteina corrisponde ad un gene che si trova nel genoma di tutti i vertebrati dall'uomo al pesce. Normalmente questa proteina agisce a livello del sistema nervoso con un meccanismo non completamente conosciuto. Il gene è piccolo, consiste in 771 nucleotidi che producono una proteina di 257 aminoacidi, tale proteina viene espressa in molti, ma non tutti i tessuti animali, solitamente all'esterno della membrana cellulare. Il gene è stato sequenziato in circa 70 specie per stabilire quali siano le differenze nella struttura al fine di comprendere l'esistenza di barriere tra le specie. Come possiamo ora conoscere le sequenze delle diverse specie. Colleghiamoci a GenBank Inseriamo il termine della ricerca 'prion'. Utilizziamo il bottone Clicchiamo next sul bottone Retrieve XXX Documents Possiamo selezionare le sequenze del bovino, della pecora, del topo e dell'uomo, che osserviamo ora riportate separatamente. >cow prion MVKSHIGSWILVLFVAMWSDVGLCKKRPKPGGGWNTGGSRYPGQ GSPGGNRYPPQGGGGWGQPHGGGWGQPHGGGWGQPHGGGWGQPHGGGGWGQGGSHSQWNKPSKPKTNMKHVAGAAA AGAVVGGLGGYMLGSAMSRPLIHFGNDYEDRYYRENMHRYPNQVYYRPVDQYSNQNNFVHDCVNITVKEHTVTTTT KGENFTETDIKMMERVVEQMC TQYQRESQAYYQRGASVILFSSPPVILLISFLIFLIVG >sheep prion MVKSHIGSWILVLFVAMWSDVGLCKKRPKPGGGWNTGGSRYPGQ GSPGGNRYPPQGGGGWGQPHGGGWGQPHGGGWGQPHGGGWGQPHGGGGWGQGGSHSQWNKPSKPKTNMKHVAGAAA AGAVVGGLGGYMLGSAMSRPLIHFGNDYEDRYYRENMYRYPNQVYYRPVDQYSNQNNFVHDCVNITVKQHTVTTTT KGENFTETDIKIMERVVEQMCI TQYQRESQAYYQRGASVILFSSPPVILLISFLIFLIVG >mouse prion MANLGYWLLALFVTMWTDVGLCKKRPKPGGWNTGGSRYPGQGSP GGNRYPPQGGTWGQPHGGGWGQPHGGSWGQPHGGSWGQPHGGGWGQGGGTHNQWNKPSKPKTNFKHVAGAAAAGAV VGGLGGYMLGSAMSRPMIHFGNDWEDRYYRENMYRYPNQVYYRPVDQYSNQNNFVHDCVNITIKQHTVVTTTKGEN FTETDVKMMERVVEQMCVTQYQKESQAYYDGRRSSSTVLFSSPPVILLISFLIFLIVG >human prion MANLGCWMLVLFVATWSDLGLCKKRPKPGGWNTGGSRYPGQGSPGGNRYP PQGGGGWGQPHGGGWGQPHGGGWGQPHGGGWGQGGGTHSQWNKPSKPKTNMKHMAGAAAAGAVVGGLGGYMLGSAM 135 BIOINFOSTAT SRPIIHFGSDYEDRYYRENMHRYPNQVYYRPMDEYSNQNNFVHDCVNITIKQHTVTTTTKGENFTETDVKMMERVV EQMCITQYERESQAYYQRGSSMVLFSSPPVILLISFLIFLIVG. Tali sequenze per essere confrontate devono essere allineate ed elaborate trasferendole ad un appropriato programma. I PROGRAMMI PER L'ALLINEAMENTO MULTIPLO. CLUSTAL W. Analizziamo ora alcuni dei programmi maggiormente utilizzati iniziando da CLUSTAL W, il programma è disponibile per molte piattaforme, si basa sull'allineamento progressivo, il programma prende una serie di sequenze e calcola per ogni coppia gli allineamenti. Sulla base di questi confronti si costruisce una matrice delle distanze basata sulla distanza di ogni coppia di sequenze. La matrice delle distanze costituisce la base per la costruzione di un albero filogenetico basandosi sul metodo della vicinanza o prossimità. Come si è visto in precedenza le difficoltà insorgono quando si introducono gaps per "accomodare" sequenze divergenti, in questo caso vengono introdotte delle penalità. CLUSTAL W nasce come programma UNIX, che può essere lanciato semplicemente digitando al prompt il comando clustalw. 136 BIOINFORMATICA **************************************************************************** CLUSTALW(1.60) Multiple Sequence Alignements **************************************************************************** 1-Sequence Input from disc 2-Multiple Alignements 3-Profile/Structure Alignements 4-Phylogenetic trees S. Execute a system command H. Help X. EXIT (leave program) Your choice: 1 ******************************************* Le sequenze possono essere allineate, selezionando l'opzione 1, e indicando il nome del file dove sono contenute le sequenze. Sequence should be in 1 file 6 formats accepted: NBRF/PIR, EMBL/SwissProt, Pearson (Fasta), GDE clustal, GCG/MSF Enter the name of the sequence file: PIPPO.seqs A questo punto si ritorna al menu principale e si selezione la seconda opzione Multiple Alignements. **************************************************************************** ******* Multiple Alignements MENU ********* **************************************************************************** 1-Do complete multiple alignements now (Slow/Accurate) 2-Produce guide tre file only 3-Do alignement using old guide tree file 4-Toggle Slow/Fast pairwise alignements= SLOW 5-Pairwise alignements parameters 6-Multiple alignements parameters 7-Reset gaps between alignments? = ON 8-Toggle screeb display = ON 9-Output format options S. Execute a system command H. Help or press (RETURN) to go back to main menu X. EXIT (leave program) Your choice: 1 ************************************************ 137 BIOINFOSTAT La serie numerosa delle opzioni che possiamo trovare influenza i risultati dell'analisi dell'allineamento multiplo delle sequenze. Alla opzione 6 possiamo indicare l'utilizzo di una matrice di scoring (BLOSUM o PAM) e possiamo ad esempio penalizzare in modo diverso la presenza o l'assenza di specifici residui e la loro eventuale sostituzione. Alla fine otteniamo una figura come quella riportata precedentemente, le posizioni nelle quali si ha una assoluta conservazione si indicano con un asterisco *, mente uno o due punti indicano la presenza di una zona conservata. MultAlign. Il programma venne ideato nel 1988 da Corpet, e si basa sulla stessa filosofia del programma Clustal W, si differenzia per il procedimento di calcolo del clustering, viene creata una prima matrice basata sullo score degli allineamenti e successivamente viene eseguito un processo di iterazione fino al momento in cui si ottiene il migliore cluster. È possibile utilizzare questo programma con un collegamento all'INRA di Toulouse. Si possono utilizzare le sequenze nel formato FASTA, ed inserirle in un apposito box. Una serie di menu a tendina facilitano l'inserimento dei parametri del programma. In linea generale è preferibile modificare solamente i parametri relativi alla matrice dello scoring. Quando le sequenze vengono sottoposte al server, l'elaborazione dei dati comporta che in output venga proposta una sequenza definita come consensus. Se le sequenze vengono mantenute integralmente si adotta la lettera maiuscola, se nelle sequenze la conservazione è elevata ma non totale si utilizza la lettera minuscola. Il programma si differenzia dagli altri in quanto adotta nella riga del consesus una simbologia relativa alle sostituzioni conservative. I simboli utilizzati sono ! % # $ Evidentemente, date le premesse, i risultati che si possono ottenere con i programmi menzionati sono differenti. ESEMPIO DI OUTPUT CON MULTALIGN Symbol comparison table: blosum62 Gap weight:12 Gap length weight: 2 Consensus levels: high=90% low= 50% Consensus symbols: ! is anyone of IV $ is anyone of LM % is anyone of FY # is anyone of NDQEBZ MOTIVI E MODELLI. Numerosi altri metodi sono stati individuati per esaminare una singola sequenza, in particolare esistono dei metodi che consentono di valutare la presenza di un motivo e si rivelano particolarmente utili per costruire delle famiglie di proteine partendo da una sequenza anche molto piccola. Per queste finalità dei programmi specializzati sono attualmente disponibili, i principali sono: PROFILESCAN BLOCKS MOST 138 BIOINFORMATICA PROBE ProfileScan è un programma basato sull'algoritmo di Gribskov (1987), ed utilizza un metodo chiamato pfscan per trovare le similarità tra una proteina e una sequenza di interrogazione di una libreria di profili. Le librerie di profili sono contenuti in PROSITE che utilizza i motivi e il modello con una tecnica conosciuta come fingerprint. La seconda libreria è Pfam che differisce dalle altre librerie per il particolare che l'allineamento iniziale deve essere introdotto manualmente. L'utente può selezionare la sensibilità della ricerca e includerà anche i casi limite. Blocks utilizza il concetto del blocco per identificare una famiglia di proteine, piuttosto che utilizzare una sequenza individuale (Henikoffe Henikoff 1996). L'idea del blocco deriva dalla notazione del motivo, cioè alla presenza di una serie di aminoacidi che si conservano e conferiscono una specifica funzione o una particolare struttura alla proteina. Il termine blocco si riferisce all'allineamento non alla sequenza individuale. Una proteina può quindi contenere uno o più blocchi, che conferiscono funzioni o che caratterizzano funzionalmente la proteina. Quando una ricerca per blocchi viene iniziata utilizzando una sequenza di interesse, per ogni specifico allineamento viene utilizzata una particolare matrice dello scoring chiamata PSSM. Questa matrice di scoring differisce da quelle che si sono viste precedentemente, ad esempio BLOSUM. Se la sequenza di input da analizzare è il DNA si deve introdurre anche un numero di codice genetico nella ricerca. MOST è chiamato anche Motif Search Tool (Tatusov 1994), è un programma che solitamente gira su macchine Unix e viene impiegato per trovare la presenza di motivi conservati. Il programma utilizza una procedura chiamata alignement block per un numero qualsiasi di sequenze e per una lunghezza qualsiasi. Il programma non sopporta la presenza di gaps. I blocchi degli allineamenti vengono usati per generare una matrice pesata. Lo score viene calcolato per ogni segmento di lunghezza L, sommando in modo appropriato gli elementi nella matrice pesata. Una indicazione di tipo statistico viene fornita circa la bontà dell'allineamento dei blocchi e si utilizza una procedura di tipo iterativo per trovare la migliore soluzione. Un parametro importante da considerare in MOST è il rapporto R che rappresenta il numero dei falsi positivi diviso per il numero dei veri positivi. PROBE rappresenta una programma di ultima generazione (Neuwald et al. 1997) molto simile al MoST in quanto utilizza una strategia di tipo interattivo, ma con differenze nei meccanismi della ricerca. PROBE utilizza un ricerca per coppie di sequenze, ad esempio la sequenza A è in relazione con una sequenza B, la sequenza B viene messa in relazione con una sequenza C, questo implica per una proprietà transitiva che A sia in una certa relazione con C. Viene così costituita una prima collezione di sequenze, si inizia una nuova ricerca per trovare sequenze che potrebbero essere sfuggiti al primo passaggio; il programma PROBE continua fintanto che le collezioni non sono convergenti. Per maggiori informazioni sui programmi si rimanda a: 139 BIOINFOSTAT CLUSTAL http://www2.ebi.ac.uk/clustalw/ MSA http://www.ibc.wstl.edu/ibc/msa.html MultAlign http://toulouse.inra.fr/cgi-bin/multalin.pl PROSITE http://expasy.hcuge.ch/sprot/prosite.html PROBE ftp://ncbi.nlm.nih.gov/pub/newwald/probe1.0/ ANALISI FILOGENETICA. La filogenesi è lo studio delle relazioni evolutive, l'analisi filogenetica è il modo con cui facciamo delle inferenze su queste relazioni. Nella storia dell'analisi filogenetica si ricorre spesso ad una rappresentazione grafica ad albero (treelike) che costituisce una sorta di albero genealogico o di pedigree. Numerosissimi algoritmi sono stati proposti, molti programmi per il calcolatore e sono a disposizione dei ricercatori per queste finalità, ma in ogni caso i risultati e la validità delle conclusioni dipendono dalla struttura e dalle dimensioni del database utilizzato. Il pericolo di ingenerare risultati non corretti è maggiormente elevato nell'analisi filogenetica rispetto alle altre discipline scientifiche. Nel nostro caso la maggior difficoltà nell'analisi filogenetica è quella di definire un modello in grado di costruire un certo albero. Esempio di albero filogenetico costruito con il programma CLUSTAL per sequenze di 5.8S DNA di piante funghi e protisti. I taxa e le sequenze corrispondono agli acronimi utilizzati in ambito filogentico. ELEMENTI DEI MODELLI FILOGENETICI. La costruzione di un albero filogenetico presuppone l'adozione di un modello particolare di evoluzione. I modelli filogenetici richiedono inoltre una serie di assunzioni di default. • La sequenza è corretta e origina da una specificata sorgente. • Le sequenze sono omologhe (discendono da una sequenza ancestrale). • Ogni posizione in una sequenza è omolga con ogni altra nell'allineamento. • Ogni sequenza multipla inclusa in una analisi comune possiede una storia genetica comune. • Il campionamento dei taxa deve essere adeguato a risolvere il problema di interesse. 140 Formattati: Elenchi numerati BIOINFORMATICA • La variabilità delle sequenze tra i campioni contiene un segnale filogenetico adeguato per risolvere il problema di nostro interesse. • La sequenza nel campione evolve secondo un semplice modello stocastico. • Tutte le posizioni nella sequenza evolvono secondo un processo stocastico. • Ogni posizione nella sequenza evolve in modo indipendente. Errori nelle analisi filogenetiche possono essere spesso attribuiti alla violazione di uno o più dei requisiti, sfortunatamente i metodi in uso non offrono informazioni e indicano la violazione degli assunti. ANALISI FILOGENETICA DEI DATI. Possiamo indicare in quattro fasi lo studio filogenetico del DNA, che analizzeremo in modo indipendente ma che rappresentano una unica componente nell'analisi filogenetica. Le fasi sono: 1- COSTRUZIONE DEL MODELLO DI ALLINEAMENTO 2- MODELLO DI SOSTITUZIONE 3- COSTRUZIONE DELL'ALBERO 4- VALUTAZIONE DELL'ALBERO I metodi di analisi si possono utilizzare per il DNA, per le proteine data la grande diversità biochimica degli aminoacidi si devono porre maggiori parametri matematici. Vedremo poi che esistono diverse modalità con le quali possiamo costruire il nostro albero. 1- ALLINEAMENTO- L'analisi filogenetica è data da un allineamento multiplo delle sequenze, nella letteratura la base dell'allineamento individuale viene definito come SITES. Questi sites sono equivalenti a characters. Allineamenti strutturali di RNA. Unica eccezione è data dal programma STATALING che utilizza una notazione di diversa. La selezione delle procedure di allineamento rappresenta il primo passo per l'estrazione dei dati filogenetici da un data set. A questo punto è necessario considerare come vogliamo trattare le regioni definite nell'allineamento come ambigue ed in particolare le inserzioni, le delezioni o molto più semplicemente i gaps per la costruzione dell'albero filogenetico. Dall'analisi filogenetica possiamo ottenere due soluzioni alternative. 141 BIOINFOSTAT LE PROCEDURE DI ALLINEAMENTO. Le procedure di allineamento multiplo fanno ricorso solitamente a delle subroutine che costringono ad utilizzare degli attributi o delle opzioni. DIPENDENZA DAL COMPUTER NONE-PARTIAL-COMPLETE RICHIESTA FILOGENICA NONE-A PRIORI-RECURSIVE PARAMETRI DI ALLINEAMENTO A PRIORI-DYNAMIC-RECURSIVE RAPPRESENTAZIONE PRIMARY-HIGHER-OTHERS OTTIMIZZAZIONE MATEMATICA STATISTICAL- NON STATISTIC Una tipica procedura di analisi filogenetica implica inizialmente l'impiego del programma CLUSTAL W con un allineamento manuale ed il successivo impiego dei programmi di creazione dell'albero filogenetico. La procedura che dobbiamo seguire è riportata nello schema seguente, in questo schema facciamo riferimento alla nomenclatura anglosassone. Computer dependence - Il manuale indica le procedure adottate in forma implicita per la costruzione dell'albero filogenetico, queste procedure in generale sono ottimizzate per la costruzione di un albero secondo la procedura definita come MP. I criteri per la costruzione possono essere: 1-MP- Maximum parsimony 2-ML- Maximum likelihood 3-DISTANCE Questi sono definiti criteri di divergenza che determinano tre tipologie di alberi differenti. Abitualmente un approccio totalmente dipendente dal computer indica che assumiamo che il programma produca un allineamento "corretto". In realtà dovremo fare particolare attenzione nelle scelte in quanto i programmi e gli algoritmi che utilizziamo non sono ottimizzati per le analisi filogenetiche (Thomson 1994). Phylogenetic criteria. Molti programmi utilizzano una guida per la costruzione filogenetica dell'albero (guide tree) che consente sulla base di un esplicito criterio filogenetico di definire l'allineabilità delle sequenze. I programmi che consentono di utilizzare questa procedura sono CLUSTAL, PileUp, ALIGN. I programmi come SAM e MACAW sono esempi di programmi che non richiamano criteri filogenetici espliciti ma il processo filogenetico può essere mimato manualmente. Alcuni programmi sono stati concepiti per ottimizzare gli allineamenti ricorrendo a procedure di tipo ricorsivo e costruire un albero filogenetico (TreeAlign e MALIGN). Dal punto di vista teorico esiste il problema di valutare un set di soluzioni e definire quella "migliore". 142 BIOINFORMATICA Alignment Parameters Estimation. Dipendono da tutti gli elementi del modello evolutivo, i parametri sono dinamici e sono direttamente implementati nel programma CLUSTAL., mentre nel programma SAM si ricorre ad un sistema di pesi. Alignement of Primary Versus Higher Order Sequence Structure. In questo caso si tiene conto dell'importanza filogenetica del mantenimento di una certa omologia della struttura secondaria e terziaria della sequenza. Un approccio di tipo strutturale è molto importante in quanto consente di analizzare dal punto di vista funzionale le sequenze. I programmi sopra menzionati non sono in grado di effettuare questo tipo di analisi si deve quindi "forzare" per avere una evoluzione della struttura consistente con la filogenesi. Albero filogenetico evolutivo. Mathematical optimization. Alcuni programmi (SAM e MACAW), ma non tutti sono in grado di fornire una ottimizzazione in accordo con certo modello statistico. Rimane la difficoltà che non esiste nessun metodo che possa dirci quale modello di allineamento sia meglio di un altro (Morrison e Ellis 1997). DATI FILOGENETICI DELL'ALLINEAMENTO. Un allineamento che include variazioni nella lunghezza delle sequenze dipende dalle modalità di trattamento con cui vengono considerate le ambiguità. Il caso estremo può essere rappresentato dall'eliminazione dalla elaborazione delle zone che presentano un gap, in questo caso noi possiamo considerare un modello semplice che analizza gli allineamenti come un semplice modello di sostituzione. Lo svantaggio di questo approccio è che i metodi di MP e ML nella costruzione dell'albero interpretano i dati mancanti aventi una divergenza di 0, mentre i gaps riflettono una elevata divergenza. Il programma PAUP 4.0 (Swofford 1997) consente di estrapolare le elaborazioni delle distanze tra le regioni gap. Il metodo MP (massima parsimonia) è il solo metodo che consente di incorporare i gaps allineabili come caratteri. Questa possibilità consente due scelte: o di includere un carattere addizionale (un quinto nucleotide ad esempio), o creare un nuovo set di caratteri indipendenti per la sostituzione. La scelta della strategia da adottare è dipendente dalla lunghezza del gap e dalla conservazione delle basi nella sequenza. Le strategie per la valutazione dei gaps sono assai complicate ed esulano dalle finalità di questa rassegna, si ricorre a delle tecniche definite come tecniche di post allineamento. Il programma MALIGN (Wheeler e Gladstein 1994) non richiede il ricorso a tecniche di postallineamento, quando si presentano delle zone di ambiguità queste possono essere estrapolate ed analizzate separatamente con un altro programma. Il programma adotta una strategia di ottimizzazione ricorsiva in funzione del migliore albero filogenetico basandosi sul metodo della Massima Parsimonia. Il programma MALIGN consente di avere degli allineamenti concatenati ottimizzati sulla base di un range definito come gap cost. Nei sites delle regioni con allineamenti ambigui, probabilmente non esiste una completa 143 BIOINFOSTAT omologia pertanto il programma introduce un rumore o un errore di fondo nella costruzione dell'albero. MODELLO DI SOSTITUZIONE. I modelli con i quali valutiamo le sostituzioni possono assumere un significato fondamentale in quanto possono influenzare sia l'allineamento sia la costruzione stessa dell'albero filogenetico. Al momento attuale i modelli di sostituzione sono ritenuti validi per l'analisi dei nucleotidi, mentre per le proteine non possiamo utilizzare programmi affidabili. Il concetto di base è dato dall'osservazione che le sostituzioni sono maggiormente frequenti per le basi ritenute simili. A C G T A - 2 1 2 C 2 - 2 1 G 1 2 - T 2 1 2 Nel caso del DNA si possono osservare delle transizioni e delle transversioni come riportato nello schema seguente. Lo schema con il quale valutiamo le sostituzioni è una semplice matrice. Come potete notare dall'analisi della matrice i valori riportati indicano il "costo" della sostituzione, pertanto una transversione costa il doppio di una transizione. Un approccio alternativo viene applicato nelle situazioni definite come non stazionarie, questo modello è chiamato log-det. Il principio è sostanzialmente simile al precedente, si ricorre ad una matrice 4 x 4 ma la distanza viene misurata come logaritmo del determinante. - Nell'esempio riportato vengono confrontati 1361 siti del DNA allineati tra gli spinaci e un fungo. Nelle caselle sono indicate la distribuzione delle basi allineate del fungo verso le basi allineate degli spinaci. SCLETOTINUM A C G T Totali Spinacia A 340 6 13 4 363 Olearia C 10 229 6 36 281 G 25 8 229 12 372 T 5 22 6 312 345 380 265 352 364 Totali I valori delle diagonali indicano i sites in cui esiste una perfetta identità. Notiamo che negli spinaci i siti che sono C e G sono A e T nel fungo (10 +36 + 25+12) = 83, per contrasto un numero ridotto di siti C e G nel fungo sono A e T negli spinaci ( 6 + 22 + 13 + 6) = 47. Notare anche l'elevato numero delle transizioni (13 + 36 + 25 + 22) = 96, mentre il numero delle transversioni è minore (6 + 4+ 10 + 6 + 8 + 12 + 5 + 6) = 57, il numero totale delle differenze è di 153 (96 + 57), di queste differenze le transizioni di C con T e di T con C rappresentano il 38% (58/153). METODI PER LA COSTRUZIONE DELL’ALBERO FILOGENETICO. Esistono diversi metodi che possono essere raggruppati secondo due distinti criteri. Algoritmico. Si tratta di individuare una funzione di ottimizzazione che si genera attraverso una serie di passaggi. Il metodo più conosciuto è Neighbor Joining (NJ) che crea un albero che utilizza un approccio basato sulla distanza che viene ottimizzata contando sulla proprietà della addittività. Basato sui caratteri. Questo approccio consente di costruire un albero ottimizzando il pattern dei dati per ogni carattere, la distanza non è fissata ma viene determinata in base alla topologia dell’albero. I più comuni metodi sono MP (Maximum Parsimony) e ML (Maximum Likelihood). 144 BIOINFORMATICA CALCOLO DELLA DISTANZA. I metodi basati sul calcolo della distanza impiegano l’analisi della dissimilarità per derivare l’albero. Il metodo della distanza consente di costruire il vero albero se tutti gli elementi del calcolo della divergenza vengono accuratamente misurati. Le difficoltà scaturiscono quando si hanno successive mutazioni che possono mascherare le precedenti mutazioni. In pratica, l’impiego di una matrice indice delle mutazioni multiple presuppone che alcune coppie identifichino mutazioni multiple e che queste aumentino in proporzione con l’aumento della divergenza delle sequenze. Il calcolo della distanza delle coppie è effettuato con la tecnica definita maximum-likelihood (massima verosimiglianza), il programma più popolare in questo ambito è PAUP 4.0. I metodi basati sulla distanza non richiedono in generale elevate capacità di calcolo. Il più comune pacchetto impiegato in questo settore è UPGMA (Unweighted Pair Group Method with Arithmetic Mean) che è un programma di clustering che congiunge tre rami con il criterio della più elevata similarità. Non viene considerato un metodo evolutivo sulle distanze e genera un una accurata topologia con la lunghezza dei rami solo in particolari condizioni (Swofford 1996). L’algoritmo di Neighbor Joining (NJ) (unione del vicino) viene comunemente utilizzato come criterio di ottimizzazione nella costruzione dell’albero. L’albero completo viene decomposto in una serie di stelle che vengono risolte e successivamente inserite nell’albero. Si tratta di un programma che risulta molto veloce. Scomposizione a stella. Il metodo Fitch-Morgolish (FM) utilizza una procedura che cerca di massimizzare il fit delle distanze osservate tra le coppie per costruire un albero basato sui quadrati degli scarti di tutti i possibili percorsi (lunghezze) nei rami dell’albero. Alcune delle differenze nel calcolo della varianza possono essere pesate. La non completa indipendenza nella stima della varianza può ingenerare errori nella costruzione dei rami. L’algoritmo ME (Minimum Evolution) è basato sullo steso principio del metodo di FitchMorgolish, ma lavora per individuare la minore distanza quadratica tra i dati osservati e quelli misurati sull’albero, l’inconveniente di questo metodo è che non utilizza tutte le possibili coppie di possibili percorsi. L’impiego delle procedure ME e FM porta in generale agli stessi risultati negli studi di simulazione. Il metodo ME viene maggiormente proposto nei programmi come METREE e PHYLIP che offre un numero considerevole di modelli di sostituzione, ma non modelli per correggere l’eterogeneità. Il pacchetto MEGA include una opzione per la correzione gamma delle proteine. Studi di simulazione indicano che la procedura UPGMA non offre buoni risultati, anche se è il più citato nelle pubblicazioni scientifiche. METODI BASTI SUI CARATTERI. Questi metodi sono basati sono basati sul calcolo della posizione di ogni singola base nell’allineamento sulla base delle posizione di tutte le altre basi. I metodi che possiamo utilizzare sono sostanzialmente il metodo di massima parsimonia e quello di massima verosimiglianza. 145 BIOINFOSTAT Metodo MP (Maximum Parsimony) viene considerato un metodo molto semplice ed accurato in molte situazioni, esistono molte varianti al metodo originale proposto da Swoford et al. 1966. Per ovviare ad uno dei maggiori inconvenienti del metodo, errori nelle sostituzioni, possono essere introdotti sistemi di ponderazione nella matrice di sostituzione, questo implica un forte rallentamento nella velocità di calcolo. Analisi e simulazioni hanno dimostrato che il metodo MP, non offre migliori risultati rispetto ai metodi ME e ML. Metodo ML (Maximum Likelihood). Il metodo ricerca l’albero filogenetico che è in grado di offrire la massima verosimiglianza, calcolando la probabilità che un particolare pattern sia prodotto da un particolare processo di sostituzione. La somma totale delle probabilità è definita come likelihood of tree e rappresenta la probabilità complessiva dell’albero. Al fine di comprendere i meccanismi che sono alla base dei metodi sopra menzionati è necessario offrire la lettore una spiegazione sui principi che sono alla base dei metodi sopra menzionati. Il metodo della matrice conta semplicemente il numero delle differenze tra due sequenze. Il numero si riferisce ad una distanza dell’evoluzione, e la dimensione esatta dipende dal modello utilizzato per valutare l’evoluzione. L’albero filogenetico è calcolato sulla base della matrice delle distanze adottando un algoritmo di tipo iterativa che parte con la sequenza maggiormente simile o minimizzando la distanza dei rami. Il principio che è alla base del metodo di parsimonia è un algoritmo che ricerca l’albero filogenetico che richiede il minor numero di cambiamenti per spiegare le differenze osservate nei taxa oggetto dello studio. Per contro il modello ML tende come si è visto a valutare in termini probabilistici il modello che è stato generato dai dati di base. .Inizialmente il modello assume che le probabilità di cambiamento siano le stesse per ogni nucleotide o per ogni aminoacido. Il numero di alberi filogentici possibili aumenta in modo esponenziale con il numero dei taxa e diviene astronomico già con sole 50 sequenze. In molti casi, le limitazioni computazionali permettono l’analisi di un numero limitato di alberi. Gli algoritmi che i genetisti possono utilizzare variano da quelli che offrono tutti i possibili alberi (algoritmi esaustivi) a quelli che offrono solo le informazioni su un numero ristretto di alberi filogenetici con un numero ridotto di modificazioni. Esistono quindi due approcci diversi per l’individuazione dell’albero filogentico migliore. Il metodo esaustivo e il metodo definito branch-and-bound (BB). La scelta pratica d adottare dipende dal numero dei taxa e dalla struttura da analizzare, se il numero dei taxa è inferiore a 20 è da preferire il metodo BB. Molti metodi impiegano un approccio euristico, cioè utilizzano algoritmi per ricercare delle famiglie, chiamate anche isole, dove sono presenti alberi non ottimali per una soluzione ottimale definita come peaks. Come si è intuito esistono diversi algoritmi che permettono con gradi di rigore diverso di ottenere delle isole e dei picchi. Numerose sono quindi le strategie che possono essere impiegate per la costruzione di un albero filogenetico, molti analisti preferiscono ad esempio spendere molto tempo nell’analisi delle isole; questo comporta che possono essere prodotti molti alberi di partenza. A livello di programmi da utilizzare molti Autori ritengono che il programma PAUP sia da considerarsi il miglior programma disponibile. VALUTAZIONE DEGLI ALBERI E DEI DATI. Diverse sono le procedure disponibili per valutare il segnale filogenetico e la robustezza dell’albero. I più popolari test di valutazione sono il test di skewness e il test di permutazione. Programmi per l’analisi filogenetica. PHYLIP creato da Joe Felsenstein dell’Università di Washington, è in realtà è un raccolta di oltre 30 programmi che coprono tutti gli aspetti dell’analisi; il programma è gratuito e disponibile per diverse piattaforme (Mac, Unix, Dos…) 146 BIOINFORMATICA PROTDIST è un programma dedicato al calcolo della matrice delle distanze delle proteine, dispone di tre modelli per la costruzione dell’albero filogenetico, ed è un programma veloce e realistico. PROTPARS è un programma che utilizza il principio della parsimonia. DNADIST calcola la distanza in termini matriciali di una sequenza di nucleotidi. PAUP viene considerato nella versione 4 molto completo, esiste per molte piattaforme DOS, Mac, Win e Sun Sparc. Il programma utilizza uno stano formato chiamato NEXUS, ma è in grado di importare file da altri programmi come Phylip, NBRF-PIR. Esistono altri programmi che risultano più limitati nelle procedure e nella portabilità. Questi programmi sono: FastDNAml, MACCLADE, MEGA plus METREE, MOLPHY e PAML.. Per maggiori informazioni sui programmi si rimanda a: PHILIP http://evolution.genetics.washington.edu/philip/software.html TREE-OF-LIFE http://phylogeny.arizona.edu/tree/programs/programas.html TreeWiew http://taxonomy.zoology.gla.ac.uk/rod/rod.html ReadSeq http://dot.imgen.bcm.tmc.edu:9331/seq-util/Options/readseq.html SEQUIO http://wwwcsif.ucdavis.edu/-kknight/sequio.html 147 BIOINFOSTAT GRAFICA MOLECOLARE Roger Sayle è stato il creatore di Rasmol, un programma vero e proprio di grafica molecolare concepito per la visualizzazione di proteine, acidi nucleici e piccole molecole. Il programma aiuta a visualizzare, insegnare e generare immagini pubblicabili di alta qualità. La peculiarità di questo programma è che opera su una vasta gamma di sistemi operativi. Prima di incominciare è necessario scaricare Rasmol da internet. Il programma funziona senz’altro meglio con Netscape, ma anche con l’ ultima versione di internet Explorer. I siti per scaricare il programma sono molteplici, http://www.umass.edu/microbio/rasmol /getras.htm; per avere però pieno accesso al programma è necessario scaricare dei plug – in, chime, per l’esattezza, dal sito http://www.mdlchime.com/chime/, altrimenti non si riescono a visualizzare le molecole. Una volta scaricati i programmi si può procedere. Il programma legge file di coordinate molecolari e mostra in modo interattivo la molecola sullo schermo con la possibilità di operare svariate modifiche sia del tipo di rappresentazione che dei colori. I files supportati da questo programma sono principalmente i PDB (Protein Brookheaven Databank); Mol2 formats; MDL (Molecular Design Limited) e Mol file formats, per creare molecole in 3D. La molecola caricata può essere mostrata solo con legami, lineari, cilindrici, con sfere, con eliche solide o parallele, con legami ad idrogeno etc. E’ chiaro che l’utilizzo del programma per costruire molecole da zero richieda una conoscenza di tipo chimico strutturale non indifferente; ma tale interfaccia può risultare molto utile anche a chi di chimica strutturistica mastica poco ma necessita un ausilio visivo veloce ed efficace per comprendere una molecola semplice o molecole complesse come le proteine. Perciò questo capitolo ha lo scopo di fornire sommariamente una guida semplice all’utilizzo di questa interfaccia per capire le potenzialità di questo strumento, sfruttandolo anche per eventuali pubblicazioni che sicuramente si arricchiscono e si abbelliscono se posseggono immagini in 3d. Seguiranno adesso degli esempi esplicativi su come utilizzare il programma per la semplice visualizzazione. Si tratterà prima una molecola semplice, per la precisione la glicina; poi il DNA e infine una molecola complessa proteica, l’emoglobina. ESEMPIO 1. Prendiamo ad esempio la glicina, che è l’amminoacido più semplice. Questo rappresentazione, in codice chiamata ball and stick, (sinistra) non rappresenta in realtà la vera taglia molecolare e la forma della molecola. 148 BIOINFORMATICA A destra il modo di rappresentare la molecola viene chiamato spacefilling, dà un’idea dell’ingombro sterico reale della molecola ma nasconde la struttura dietro alla superficie. Infine, sotto a sinistra, in questa rappresentazione viene evidenziato solo lo scheletro del peptide (backbone). La visualizzazione solo in stick mostra solo i legami ed è la migliore per guardare i legami attraverso molecole complesse. ESEMPIO 2. Analizziamo ora le potenzialità che il programma offre per la comprensione e la visualizzazione tre D della molecola del DNA. Questo esempio in particolare è stato tratto da uno dei numerosi tutorial di rasmol che esistono on-line, infatti solitamente ci si trova l’immagine da sola su sfondo nero e le modifiche si possono attuare solamente dal menù a cascata che si attiva con il tasto destro del mouse. 149 BIOINFOSTAT Cliccando sulle lettere si ottiene la legenda delle stesse, che poi è quella dei simboli della tavola periodica degli elementi, (C= carbonio, H idrogeno e così via) e quella dei colori utilizzati. CPK, così viene chiamato questa attribuzione cromatica acronimo che deriva da Corey, Pauling, Koltun. Premendo X spin si ottiene la rotazione della doppia elica intorno all’asse delle ascisse; mentre con Y spin si ottiene la rotazione della stessa sull’asse delle ordinate, ottenendo la situazione seguente: La funzione sezione e la permettono molecola. Con backbone si evidenzia appunto lo end dà una visione della doppia elica in visione side la vista laterale, infine ½ e 2X lo zoom o la visione ridotta dell’intera scheletro che forma la doppia elica. Cliccando sul tasto bases invece si evidenziano (sempre in modalità sticks) le basi puriniche e pirimidiniche del DNA. H bonds invece permette ovviamente di evidenziare gli importantissimi legami ad idrogeno che permettono alla doppia elica di esistere in tale conformazione. Le funzioni thin e thick permettono di visualizzare l’intera molecola senza spessore o con spessore tridimensionale; spacefill invece visualizza la molecola con il relativo reale ingombro sterico. Infine AT e GC permettono di visualizzare rispettivamente solo il legame tra le basi accoppiate, adenina timina/ guanina citosina. In qualsiasi momento, cliccando col tasto destro del mouse, è possibile modificare l’aspetto della molecola, sia dal punto di vista “colorimetrico” che dal punto di vista grafico, nonché evidenziare determinati atomi o residui, colorarli in modo diverso, e vedere ruotare la molecola nello spazio. 150 BIOINFORMATICA ESEMPIO 3. L’emoglobina è una proteina formata da quattro distinte catene polipetidiche, che con rasmol si possono facilmente distinguere per colore, Alfa 1, Beta 1, Alfa 2, B B 2 Beeetttaaa 2 2... Ci sono anche 4 complessi eminici (col ferro, evidenziati in rosso). Questo modo di colorare la struttura dell’emoglobina si ottiene cliccando sempre col tasto di destra del mouse, dove viene mostrato il menù a cascata; si sceglie la modalità Van der Waals radii, per ottenere il reale ingombro sterico; dopodiché si colora per catena (chain). In rosso si evidenziano i gruppi eme. Un altro modo di visualizzare l’emoglobina evidenziando le sue peculiarità strutturali è quello di rendere globosi, selezionandoli, i gruppi eme, e lasciando nella modalità stick e colorando per catene il resto della molecola. Nella figura accanto invece si sono evidenziati solo i quattro gruppi eme con l’atomo di ferro, oscurando il resto della molecola con l’opzione change color to black dopo averla selezionata opportunamente. Infine si possono tra le altre opzioni visualizzare le eliche della strutture primarie: display cartoons, che con delle frecce dà anche l’orientamento delle eliche; mentre ribbons dà le eliche senza le frecce. Altri modi di studiare una molecola d’interesse con rasmol sono ad esempio evidenziare la carica e la sua distribuzione spaziale, oppure visualizzare tutti gli amminoacidi che la compongono. Per concludere questo breve excursus sul programma, è possibile esportare le immagini nella maniera in cui si sono elaborate con un formato gif. Se invece si salvano con l’estensione PDB (Save Molecole As) o MOL format, si può accedere al file tramite il programma salvato rasmol, ma la molecola viene visualizzata nel formato standard originale, e non con le modificazione che eventualmente si sono operate. Inoltre è possibile trasferire molecole semplici, se si possiede un computer discreto, al programma ISIS DRAW (Transfer to ISIS DRAW dal menù a cascata) che è un programma freeware, in grado di costruire le molecole piane. Sculpt invece è un programma di accesso limitato (la versione demo dura circa tre mesi) e permette di ruotare solo parti della molecola in questione. Per accedere facilmente ai databases di proteine o di enzimi, basta andare sul ricchissimo sito http://www.biochem.ucl.ac.uk/, cliccare su research groups, e poi su CATH (Protein Structure Classification & Prediction Group) 151 BIOINFOSTAT A questo punto si ottiene la seguente schermata: Dopodiché andando in alto a sinistra, nel riquadro rosa, si digita il nome della proteina che si desidera visualizzare (esempio lactoferrin) e quindi la chiave di ricerca è come general text, altrimenti Il PDB code (protein data base se si conosce o il cath code) e cliccando su Go! si visualizza la seguente pagina: Che dà una lista di tutte le proteine che sono state caricate sul database e cristallizzate in modi diversi, se ne sceglie una cliccando sul link prescelto (di solito la sigla è a tre lettere) e si ottiene la visualizzazione standard in rasmol della proteina prescelta. A questo punto la proteina può essere visualizzata nel modo che più interessa, tramite i canoni dettati prima. 152 BIOINFORMATICA 153 BIOINFOSTAT APPROFONDIMENTI SISTEMA DI NUMERAZIONE. Nella memoria di un calcolatore e sui dischi tutte le informazioni sono rappresentate come una lunga sequenza di zeri e uno, vale a dire in forma binaria. Ogni singolo 0 e 1 è un bit, cioè la più piccola unità informativa manipolabile. Il termine bit venne coniato dal gruppo di ricercatori capeggiato da Claude Shannon come contrazione di “binary digit”. Verso la fine degli anni 40, Claude Shannon dimostrò che utilizzando un circuito elettrico dotato di un interruttore era possibile definire le condizioni VERO per il circuito aperto e FALSO per circuito chiuso. Era possibile dunque effettuare delle operazioni logiche associando il numero 1 a vero e il numero 0 a FALSO. Questa scoperta rappresenta la base della teoria dell’informazione e, dunque, pose in quegli anni le basi per la nascita degli elaboratori. Quindi, un documento, scritto con un programma di videoscrittura, viene salvato in memoria in forma binaria ed è visibile come sequenza di caratteri solo attraverso un monitor o una stampante: è l’hardware, cioè il livello fisico, di questi due componenti che trasforma codici binari in simboli. Così come all’interno di CPU e RAM i valori 0 e 1 vengono rappresentati in forma elettrica mentre sui dischi in forma magnetica. In un elaboratore le informazioni vengono codificate come sequenza di singole unità ognuna delle quali rappresentata da un codice binario, cioè da un gruppo di bit. Nell’ottica dei calcolatori l’informazione viene classificata in numerica e testuale. Con informazione numerica si intende dati su cui poter compiere operazioni aritmetiche, quindi i numeri, che si dividono in interi e reali (o floating-point). L’informazione testuale, invece, è una sequenza di singoli caratteri e viene chiamata alfanumerica se i caratteri rappresentano sia numeri che lettere dell’alfabeto. Prima di approfondire le regole con cui un elaboratore partendo dal sistema binario costruisce codici che rappresentano informazioni è necessario aprire una parentesi sui sistemi di numerazione posizionali. Il sistema di numerazione binario. Un generico sistema di numerazione è costituito da: - un insieme finito di simboli dette cifre, - un insieme di regole per associare un valore numerico ad una combinazione di cifre, - un insieme di procedure per svolgere le operazioni fondamentali sull’insieme numerico definito. In particolare nei sistemi di numerazione posizionali, come quello decimale, le cifre hanno valore posizionale nel senso che il valore numerico di una cifra dipende dalla sua posizione all’interno della sequenza. In un sistema posizionale un numero N si può scrivere come: N = cn-1 * b n-1 + c n-2 * b n-2 154 1 + .... + c1 * b + c0 * b 0 BIOINFORMATICA dove n = numero cifre numero, ci = i-esima cifra, b = base del sistema di numerazione. Il peso viene associato alle cifre da destra verso sinistra, a partire dal valore 0. Così, nel 2 1 0 sistema decimale, il numero 152 si può scrivere come 1 * 10 + 5 * 10 + 2 * 10 . Anche il sistema binario è posizionale, quindi partendo dalla formula generale e impostando la base a 2, si ha che il numero binario 0101 1110 può essere scritto come 7 6 5 4 3 2 1 01011110 = 0*2 +1*2 +0*2 +1*2 +1*2 +1*2 +1*2 +0*2 0 Il bit più a sinistra viene detto bit più significativo o MSB (Most Significant Bit) mentre quello più a destra è il bit meno significativo o LSB (Less Significant Bit) in base al fatto n-1 che hanno rispettivamente il peso più alto (2 , con n=numero di bit) e quello più basso (0). Conversione da decimale a binario. Per effettuare la conversione si divide ripetutamente il numero da convertire per la base di arrivo (due, in questo caso) e il resto di ogni divisione rappresenta una cifra del nuovo numero; il processo si conclude quando il numero da convertire diventa 0. I resti, presi dall’ultimo al primo, rappresentano lo stesso valore numerico ma espresso nel sistema binario. Es: Sia N = 59. Divido ripetutamente per due conservando i resti. 59 : 29 : 14 : 7: 3: 1: 0 2 2 2 2 2 2 resto 1 resto 1 resto 0 resto 1 resto 1 resto 1 Si leggono i resti dal basso verso l'alto. N= (59)10 = (111011)2 Il numero 111011 rappresenta un numero binario senza segno. Il metodo descritto può essere utilizzato per rappresentare un qualsiasi numero intero senza segno. Un numero pari termina con un bit 0; un numero dispari termina con un bit 1. Un numero multiplo di due si converte rapidamente ponendo un 1 davanti ad un numero di zeri pari 4 all’esponente di 2. Ad esempio, 16, che è 2 è 10000 e 128 (27) è 10000000. Conversione di un numero binario in decimale. In base alle regole dei sistemi di numerazione posizionali, possiamo scrivere il numero 10100101 di 8 bit come: 7 5 2 0 (10100101)2 = 1*2 + 1*2 + 1*2 + 1*2 = (128)10 + (32)10 + (4)10 + (1)10 = (167)10 Le operazioni con il sistema binario. Addizione. L'addizione tra numeri binari segue le regole generali dell'addizione nel sistema decimale, quindi è necessario applicare le regole per la somma tra singoli bit (tabella seguente) e applicare la tecnica del riporto 155 BIOINFOSTAT + 0 1 0 0 1 1 1 10 Es. Si voglia ottenere la somma dei numeri 1011 (11 in base 10) e 1101 (13 in base 10). Si ha: 1 1 0 1 1 + 1 1 0 1 = 1 0 0 0 Moltiplicazione. La moltiplicazione tra numeri binari si effettua basandosi sulle regole usuali della moltiplicazione e sulla tabella riportata di seguito. * 0 1 0 0 0 1 0 1 Es. Si vogliono moltiplicare i due numeri binari 1011 e 101. Si ha: 1 0 1 1 X 1 0 1 = 1 1 0 1 0 0 0 0 - 1 0 1 1 - - 1 1 0 1 1 1 Le operazioni di sottrazione e divisione sono definite come inverse di addizione e moltiplicazione, analogamente al sistema decimale. In particolare il prestito della sottrazione è definito come inverso del riporto. Nonostante il calcolatore lavori esclusivamente nel sistema binario, per ovviare alla difficoltà di usare lunghe sequenze di bit, si usano altri sistemi di numerazione. In particolare si preferisce usare un sistema la cui base sia un multiplo di due per rendere immediata la conversione. Due sistemi di numerazione comunemente usati sono l’esadecimale e l’ottale. Il sistema ottale. Si basa sulla numerazione in base 8, le cifre vanno da 0 a 7. 3 Per rappresentare le cifre di questo sistema ci vogliono 3 bit (2 = 8), dunque raggruppando un numero binario in gruppi di tre bit e convertendo i singoli gruppi si ottiene un numero espresso in ottale. Le corrispondenze tra i due sistemi sono: binario Ottale 000 0 001 1 010 2 011 3 156 BIOINFORMATICA 100 4 101 5 110 6 111 7 Per cui il numero binario 101 110 si scrive (56)8. Sistema esadecimale. si tratta di un sistema di numerazione che si basa su un alfabeto a 16 cifre, da 0 a 9 e da A a F. Le cifre A÷F corrispondono ai valori 10÷15 del sistema decimale. Per rappresentarne le cifre sono necessari 4 bit (24 = 16), dunque dividendo un numero binario in gruppi di 4 bit e convertendo ogni gruppo nella corrispondente cifra esadecimale, si esegue facilmente la conversione. Con questo sistema un numero binario a 32 bit può essere scritto come numero esadecimale a 8 cifre ed uno a 8 bit con due sole cifre esadecimali, semplificando notevolmente il lavoro di un utente: questo è il principale motivo di applicazione del sistema a base 16. Decimale Esadecimale Decimale Esadecimale Binario Binario 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 10 A 1010 3 3 0011 11 B 1011 4 4 0100 12 C 1100 5 5 0101 13 D 1101 6 6 0110 14 E 1110 7 7 0111 15 F 1111 Ad esempio, dato il numero 1011 1001, si divide in due gruppi e si traduce in B9 in base alla tabella.Per convertire in decimale, invece, si sfruttano ancora le proprietà dei sistemi posizionali, così, ad esempio si ottiene: 2 1 0 2 1 0 (FB3)16 = F*16 + B*16 + 3*16 = 15*16 + 11*16 + 3*16 = (3840)10+(176)10+(3)10 = (4019)10 Rappresentazione dei numeri negativi. Fino ad ora si sono trattati solo numeri positivi. La rappresentazione di numeri negativi implica un sistema di codifica, che prevede l'utilizzo di un bit per rappresentare il segno. Sono due i metodi principali di rappresentazione dei numeri negativi: - con modulo e segno; - in complemento a 2. Nel primo caso, il bit più significativo viene utilizzato per rappresentare il segno (0 – positivo, 1 – negativo) e i rimanenti per il modulo, così in una rappresentazione a 8 bit possiamo codificare i valori da –127 (1111 1111) a +127 (0111 1111). Questo metodo presenta però diversi inconvenienti, fra cui il fatto che esistano due codifiche per lo zero (1000 0000 e 0000 0000) per cui è scarsamente utilizzato per i calcolatori. 157 BIOINFOSTAT Complemento a 2. Si utilizza ancora il MSB come bit di segno nel senso che: nel caso dei numeri positivi si comporta come il metodo precedente, quando il bit del segno è 1, allora i bit rimanenti non rappresentano più direttamente il modulo del numero. Ad esempio il numero –1 viene rappresentato come 1111 1111 mentre il valore –128 (massimo valore negativo rappresentabile con 8 bit) corrisponde a 1000 0000 (prima 0), risolvendo così il problema della doppia codifica dello zero. Dal punto di vista dei sistemi posizionali si può interpretare il complemento a 2 come un sistema che pesa la cifra più significativa con un valore negativo, quindi, nel caso di 8 bit, 7 il MSB avrà peso –2 , cioè –128. Ad esempio, dato il numero 11001001 in complemento a 2, si ha: 7 6 3 0 1100 1001 = 1*(–2 )+ 1*2 +1*2 + 1*2 = -128 + 64 + 8 + 1 = -55 Il numero complessivo di numeri rappresentabili è 256, da –128 a +127. byte senza segno complemento a 2 0000 0000 0 0 0000 0001 1 +1 0000 0010 2 +2 ... ..... ..... 0111 1110 126 +126 0111 1111 127 +127 1000 0000 128 -128 .... .... .... 1111 1110 254 -2 1111 1111 255 -1 Il metodo più rapido per calcolare il complemento a 2 di un numero è quello di convertire gli zeri in uno e viceversa (operazione chiamata complemento a 1) e sommare il valore 1 al risultato ottenuto. Ad esempio, se consideriamo il numero binario 01111010 (122 in base 10) si ha: complemento a 1 → 10000101 complemento a 2 → 10000101 + 1 = 10000110 pari a (-128 + 4 + 2) = - 122. Rappresentazione dei numeri reali in virgola mobile (cenni). Un numero reale può essere espresso come ±m x r ±esp dove: m = mantissa, r = radice e esp = esponente. Dato che in un calcolatore si usa solo il sistema binario (radice = 2) è necessario memorizzare solo mantissa e esponente. 158 BIOINFORMATICA Secondo questa definizione, però, un numero può essere rappresentato in diversi modi. Ad esempio, in decimale, il numero 1984.128 può essere rappresentato come 19.84128 x 10 2 0.1984128 x 10 4 -3 1984128 x 10 Si osserva che la virgola varia al variare della potenza del 10 utilizzata. Definiremo una rappresentazione normalizzata quella che consente di avere la virgola in posizione tale che la prima cifra significativa sia a destra della virgola. 5 Ad esempio 0.11011101 x 2 è una rappresentazione normalizzata. In generale possiamo rappresentare un numero in virgola mobile riservando un gruppo di bit per l'esponente e uno per la mantissa. Ad esempio, in una codifica a 32 bit, un possibile formato prevede un bit per il segno, 23 bit per la mantissa e 8 bit per l’esponente. Entrambi i numeri sono generalmente rappresentati in complemento a 2, quindi nel caso 3 del numero 0.1101 1011 x 2 si ha: segno esponente 0 mantissa 0000 0011 000 0000 0000 0000 1101 1011 Rappresentazione dei caratteri. I codici ASCII (American Standard Code for Information Interchange) sono utilizzati per rappresentare i caratteri all’interno di un computer. I codice ASCII standard sono sequenze di 7 bit, dunque complessivamente è possibile rappresentare 128 caratteri tra lettere dell'alfabeto (maiuscole e minuscole), numeri, segni di punteggiatura e caratteri speciali. Esiste anche un codice ASCII non standard a 8 bit che permette di arrivare a 256 caratteri. Per alcuni alfabeti l’uso di 1 byte per rappresentarne i simboli è troppo limitante e attualmente si sta diffondendo lo standard Unicode, una codifica a 16 bit che con i suoi 65.000 caratteri permette di rappresentare anche alfabeti molto complessi come quello cinese. I mainframe IBM utilizzano una rappresentazione diversa detta codifica EBCDIC (Extended Binary Coded Decimal Interchange Code) che utilizza 8 bit. A conclusione del capitolo viene riportata la tabella dei codici ASCII standard. 159 BIOINFOSTAT Char Binary Hex Dec Char Binary Hex Dec @ 100 0000 40 64 ` 110 0000 60 96 A 100 0001 41 65 a 110 0001 61 97 B 100 0010 42 66 b 110 0010 62 98 C 100 0011 43 67 c 110 0011 63 99 D 100 0100 44 68 d 110 0100 64 100 E 100 0101 45 69 e 110 0101 65 101 F 100 0110 46 70 f 110 0110 66 102 G 100 0111 47 71 g 110 0111 67 103 H 100 1000 48 72 h 110 1000 68 104 I 100 1001 49 73 i 110 1001 69 105 J 100 1010 4A 74 j 110 1010 6A 106 K 100 1011 4B 75 k 110 1011 6B 107 L 100 1100 4C 76 l 110 1100 6C 108 M 100 1101 4D 77 m 110 1101 6D 109 N 100 1110 4E 78 n 110 1110 6E 110 O 100 1111 4F 79 o 110 1111 6F 111 P 101 0000 50 80 p 111 0000 70 112 Q 101 0001 51 81 q 111 0001 71 113 R 101 0010 52 82 r 111 0010 72 114 S 101 0011 53 83 s 111 0011 73 115 T 101 0100 54 84 t 111 0100 74 116 U 101 0101 55 85 u 111 0101 75 117 118 V 101 0110 56 86 v 111 0110 76 W 101 0111 57 87 w 111 0111 77 119 X 101 1000 58 88 x 111 1000 78 120 Y 101 1001 59 89 y 111 1001 79 121 Z 101 1010 5A 90 z 111 1010 7A 122 [ 101 1011 5B 91 { 111 1011 7B 123 \ 101 1100 5C 92 | 111 1100 7C 124 ] 101 1101 5D 93 } 111 1101 7D 125 ^ 101 1110 5E 94 ~ 111 1110 7E 126 __ 101 1111 5F 95 DEL 111 1111 7F 127 160 BIOINFORMATICA IL LINGUAGGIO BASIC. Il nome è l'acronimo di Beginner's All purpose Symbolic Instruction Code è stato sviluppato inizialmente al Darmouth College (Ohio) da Thomas Kurtz e John Kemeny nel 1962. Il BASIC è un linguaggio di programmazione di alto livello di tipo iterativo ed interpretato, vale a dire che ogni istruzione viene tradotta in linguaggio macchina ed eseguita immediatamente nel caso in cui venga riconosciuta correttamente. Kurtz dichiarò che il BASIC era stato previsto per fare risparmiare tempo all’utente, anche se risultava evidente che veniva sciupato tempo all’elaboratore. Il BASIC inoltre risulta indipendente dal calcolatore con il quale sono stati scritti i programmi. In effetti il BASIC è un linguaggio relativamente facile da apprendere anche se presenta alcuni limiti come ad esempio la strutturazione dei programmi, e che i programmi in BASIC sono più lenti rispetto ad altri linguaggi. Il Basic è un linguaggio di programmazione nato solo per scopi didattici, anche se ormai non si può più considerare tanto adatto neanche per questo. La semplicità di questo linguaggio è tale per cui si trovano quasi sempre solo interpreti e non compilatori, e in ogni caso, la natura stessa del linguaggio è tale per cui questo dovrebbe sempre essere solo interpretato. L'interprete Basic tradizionale è una sorta di shell che riconosce una serie di comandi interni, oltre alle istruzioni Basic vere e proprie. In pratica, attraverso il prompt di questa shell si possono eseguire singole istruzioni Basic, oppure comandi utili a gestire il file di un programma completo. Per esempio, avviando il Chipmunk BASIC, si ottiene quanto segue. $ basic[Invio] Chipmunk BASIC 1.0 > Il simbolo > rappresenta il prompt. L'esempio seguente mostra l'inserimento di alcune istruzioni Basic, allo scopo di eseguire la moltiplicazione 6*7. >A=6[Invio] >B=7[Invio] >B=A*B[Invio] >PRINT C[Invio] 42 Di linguaggi Basic ne esistono di tanti tipi, anche con estensioni che portano il linguaggio molto lontano rispetto all'impostazione originale, facendone in realtà un linguaggio completamente diverso. La sintassi del linguaggio si definisce con l'ausilio di un metalinguaggio che precisa gli oggetti della lingua e le loro relazioni, cioè le regole che consentono la costruzione di parole e di frasi. Il meta-linguaggio più utilizzato è quello di Backus Naur. I metasimboli utilizzati sono rappresentati dai caratteri : = indica una definizione < > indica un meta oggetto definito indica una alternativa allorquando sussistano diverse possibilità. Se un metaoggetto è opzionale lo si indica con una parentesi quadra. Esempio: < Numero> := 1 2 3 4 5 6 7 8 9 Vengono riportate alcune definizioni < Istruzione di fine > : = END 161 BIOINFOSTAT < < < < < < < < < < < < Istruzione di arresto > : = STOP Istruzione di lettura di dati> : = READ Istruzione ingresso dati > : = INPUT : = GET Istruzione di test > : = IF < condizione > THEN < istruzione > Istruzione iterazione > : = FOR Istruzione iterazione > : = TO Istruzione iterazione > : = STEP Istruzione iterazione > : = NEXT Istruzione di stampa > : = PRINT Annotazioni > : = REM Istruzione di legame > : = GO TO Istruzione di legame > : = GO SUB Lo studio di un linguaggio di programmazione deve passare per una definizione arbitraria di un alfabeto e di regole lessicali. Le regole sintattiche non sono arbitrarie ma devono permettere di definire un algoritmo. Le regole sintattiche devono essere scelte in modo tale da eliminare tutte le ambiguità nella costruzione di frasi corrette nella lingua. La grammatica precisa consente di individuare e riconoscere facilmente una frase corretta da una errata. L'alfabeto del BASIC comprende q le lettere maiuscole da A-Z (26 caratteri) q carattere bianco (1 carattere) q le cifre decimali (10 caratteri) q simboli speciali, operatori, segni di punteggiatura Per un totale di 53 caratteri. Il ritorno a capo di una linea non rappresenta un carattere. Regole di formazione delle parole della lingua Le parole della lingua sono essenzialmente - Identificatori definiti dal programmatore - Le costanti definite dal programmatore - Parole chiave: riservate alla lingua (DIM, GO TO, FOR…) Più in particolare avremo la possibilità di utilizzare Operatori relazionali <> (DIVERSO) = (UGUALE) < (MINORE) Operatori logici AND, OR, NOT Operatori aritmetici +,-, / (divisione), *(moltiplicazione) Operatori di assegnazione = Nomi di variabili ed etichette sono definiti dall’utente (massimo 8 caratteri alfanumerici). COMANDI TIPICI DELL'INTERPRETE. Il tipico interprete Basic mette a disposizione alcuni comandi, che risultano essenziali per la gestione di un programma Basic. LIST. LIST [<riga-iniziale>[-<riga-finale>]][,...] Elenca le righe del programma selezionate dagli intervalli indicati come argomento. Se non viene indicato alcun argomento, la visualizzazione viene fatta a partire dalla prima riga; se viene indicata solo la riga iniziale, la visualizzazione riguarda esclusivamente quella riga. L'esempio seguente serve a visualizzare la riga 100, e poi l'intervallo da 150 a 200. LIST 100, 150-200 162 Formattati: Elenchi numerati BIOINFORMATICA RUN. RUN [<riga-iniziale>] Il comando RUN viene usato normalmente senza argomenti, per avviare il programma caricato nell'interprete. Se si aggiunge il numero di una riga, quel punto verrà utilizzato per iniziare l'interpretazione ed esecuzione del programma. NEW. Cancella il programma eventualmente caricato nell'interprete. LOAD. LOAD <file> Carica il programma indicato dal nome del file posto come argomento. Se precedentemente esisteva un programma in memoria, quello viene eliminato. Solitamente, il nome del file deve essere indicato delimitandolo tra doppi apici. È probabile che l'interprete aggiunga una estensione predefinita o obbligatoria. SAVE. SAVE <file> Salva il programma con il nome specificato come argomento. Solitamente, il nome del file deve essere indicato delimitandolo tra doppi apici. È probabile che l'interprete aggiunga una estensione predefinita o obbligatoria. DEL. DEL <riga-iniziale>[-<riga-finale>][,...] Elimina le righe indicate dall'argomento. Può trattarsi di una sola riga, o di un intervallo, o di una serie di intervalli. RENUM. RENUM [<riga-iniziale>[,<incremento>]] Rinumera le righe del programma, aggiornando i riferimenti alle subroutine. È possibile indicare il numero iniziale e anche l'incremento. Di solito, se non viene specificato alcun argomento, la riga iniziale ha il numero 10, e l'incremento è sempre di 10. BYE, QUIT. BYE | QUIT Termina il funzionamento dell'interprete Basic. L'inserimento delle righe di programma attraverso l'interprete Basic, avviene iniziando le istruzioni con il numero di riga in cui queste devono essere collocate. Ciò permette così di inserire righe aggiuntive anche all'interno del programma. Se si utilizzano numeri di righe già esistenti, queste righe vengono sostituite. Quando una istruzione Basic viene inserita senza il numero iniziale, questa viene eseguita immediatamente. ISTRUZIONI. Le istruzioni Basic, oltre al fatto di iniziare con il numero di riga, non hanno altre caratteristiche particolari. Generalmente utilizzano una riga e non richiedono la conclusione finale con un qualche simbolo di interpunzione. È interessante notare invece che i commenti vanno espressi con l'istruzione REM, seguita da qualcosa che poi viene ignorato, e che le righe vuote non sono ammissibili in generale, anche se iniziano regolarmente con il numero di riga. La natura del linguaggio Basic è tale per cui le istruzioni e i nomi delle variabili dovrebbero essere espressi sempre utilizzando le sole lettere maiuscole. Numerazione delle righe. La caratteristica tipica di un programma Basic è quella di avere le righe numerate. Infatti, non gestendo procedure e funzioni, l'unico modo per accedere a una subroutine è quella di fare riferimento alla riga in cui questa inizia. In pratica, le istruzioni iniziano con un numero di riga, progressivo, seguito da almeno uno spazio, e quindi continuano con l'istruzione vera e propria. 110 PRINT "ciao a chi legge" 120 PRINT "come va?" Si può intendere che questa dipendenza dalla numerazione delle righe costituisca poi un problema per il programmatore, perché il cambiamento di questa numerazione implica la perdita dei riferimenti alle subroutine. IDENTIFICATORI DI VARIABILI NUMERICHE. Le regole di formazione degli identificatori è molto semplice nel BASIC standard; sono delle parole di due caratteri; una lettera e una cifra. Nel BASIC si possono utilizzare solo 286 nomi di variabili. A A0 A1 ..................................................................... A9 B B0 B1 ..................................................................... B9 163 BIOINFOSTAT ................................................................................... Z Z0 Z1 ..................................................................... Z9 Nei BASIC evoluti può essere utilizzato un secondo carattere alfanumerico aumentando in tal modo le possibilità. Nel BASIC non esistono dichiarazioni esplicite per definire una variabile intera o una variabile reale. Per definire una variabile intera si associa un identificatore che è il carattere %. Cosi N% viene considerato come una variabile intera. Queste variabili vengono rappresentate nella macchina in Bit, se disponiamo di una macchina con 8 bit possiamo rappresentare i numeri da 0 a 28, quindi 255, ma se consideriamo i positivi e i negativi dobbiamo considerare il campo tra -128 e +127. Mentre utilizzando una macchina con 16 bit si possono rappresentare i numeri tra -32768 e +32767. Le variabili reali sono definite da identificatori normali (N, X...). Contengono dei valori reali che comprendono una parte intera e una parte decimale. Per molti microordinatori si può avere un campo di variazione tra 1038 e 10-38 con 9 cifre significative. % Per numeri interi compresi tra –32768 e 32767 # Numeri reali in singola precisione (numeri con virgola e con 7 cifre significative). ! Numeri reali in doppia precisione (15 cifre significative). $ Variabili alfanumeriche. LE VARIABILI INTERE. I numeri vengono indicati senza l'uso di delimitatori, e se necessario è possibile rappresentare valori decimali con l'uso del carattere punto (.); inoltre è generalmente ammissibile la notazione esponenziale. L'esempio seguente mostra due modi di rappresentare lo stesso numero. 123.456 1.23456E+2 Le stringhe si rappresentano delimitandole attraverso doppi apici (possono essere ammessi anche gli apici singoli, ma questo dipende dall'interprete), e sono soggette a un limite di dimensione che dipende dall'interprete (spesso si tratta di soli 255 caratteri). L'assegnamento di una variabile avviene attraverso l'operatore =, secondo la sintassi seguente. [LET] <variabile>=<valore> L'uso esplicito dell'istruzione LET è facoltativo. - Le operazioni aritmetiche sono eseguite in reale e i valori interi sono convertiti in reali prima dei calcoli. - L'argomento delle convertite in reale. funzioni matematiche (trigonometriche, esponenziali,....) sono - Il passaggio di un valore reale a un valore intiero implica una troncatura della parte decimale. ad esempio 10 N%=4.556 20 PRINT N% si ottiene 4. 10 N%=0,98 20 PRINT N% si ottiene 0. 164 BIOINFORMATICA Ma se 10 N% =-0,5 20 PRINT N% si ottiene -1 ESPRESSIONI NUMERICHE. Identificatori di variabili catene di caratteri, si realizzano ponendo il carattere $ dopo l'identificatore. Ad esempio A$, B$..., si ha quindi la possibilità di avere da 26 a 286 identificatori. Le variabili sono distinte in base al fatto che servano a contenere numeri o stringhe. Per la precisione, le variabili che contengono stringhe, hanno un nome che termina con il simbolo dollaro ($). I nomi delle variabili, a parte l'eventuale aggiunta del dollaro per le stringhe, sono soggetti a regole differenti a seconda dell'interprete; in particolare occorre fare attenzione al fatto che l'interprete potrebbe distinguere tra maiuscole e minuscole. In origine, si poteva utilizzare una sola lettera alfabetica! Gli operatori tipici che intervengono su valori numerici, e restituiscono valori numerici. Operatore e operandi <var> = <valore> - <op1> <op1> + <op2> <op1> - <op2> <op1> * <op2> <op1> / <op2> <op1> MOD <op2> <op1> ^ <op2> SQRT <op1> SIN <op1> COS <op1> TAN <op1> ARCTAN <op1> LOG <op1> ABS <op1> Descrizione Assegna alla variabile il valore alla destra. Inverte il segno dell'operando. Somma i due operandi. Sottrae dal primo il secondo operando. Moltiplica i due operandi. Divide il primo operando per il secondo. Modulo: il resto della divisione tra il primo e il secondo operando Esponente: eleva il primo operando alla potenza del secondo. Calcola la radice quadrata dell'operando. Calcola il seno dell'operando. Calcola il coseno dell'operando. Calcola la tangente dell'operando. Calcola l'arcotangente dell'operando. Calcola il logaritmo naturale dell'operando. Calcola il valore assoluto dell'operando. LE COSTANTI. Le costanti possono essere di due tipi o numeriche o catene di caratteri. Le costanti numeriche possono essere numeri interi, frazionari con segno + e -. Le cifre decimali sono rappresentate da una parte intera e da una parte decimale separata da un punto. La rappresentazione avviene ricorrendo agli esponenti. In effetti il numero 459.67 può essere rappresentato da 45967 x 10-2 oppure 0.45967 x 103. Si può quindi moltiplicare per una potenza del 10. Esiste una forma normalizzata in modo che la mantissa sia compresa tra 0.1 e 0.99... Per indicare una virgola mobile si impiegherà il carattere E come separatore tra la mantissa e l'esponente. 0.314 E1 corrisponde a 3.14 147.68 E3 corrisponde a 147680 .5 E0 corrisponde a 0.5 .25 E-2 corrisponde a 0.0025 LE COSTANTI STRINGHE DI CARATTERI. Si presenta la necessità di scrivere un testo; le regole vogliono che il testo venga racchiuso tra caratteri speciali " ". 165 BIOINFOSTAT Esempio " FRASE DA STAMPARE". Conosciuto l'alfabeto, gli identificatori, gli elementi di base di un linguaggio è necessario ora servirsene per creare delle frasi o delle istruzioni che siano corrette sintatticamente. Successivamente dobbiamo creare un programma che abbia un senso. Esistono diversi tipi di istruzioni nel BASIC, possiamo suddividere le istruzioni in: -Istruzioni di dichiarazione (DIM, DATA) -Istruzioni di assegnazione (LET) -Istruzioni di test (IF THEN GO TO) -Istruzioni di iterazione (FOR) -Istruzioni di ingresso ed uscita (INPUT, PRINT, READ, WRITHE) La concatenazione avviene per unire due catene di caratteri e si ottiene ponendo il simbolo +. L'istruzione "LUIGI" + " E" + "MARCO" verrà stampata come LUIGI E MARCO. L'esempio seguente emette semplicemente la stringa "Ciao Amico" attraverso lo standard output. 10 print "Ciao amico" Per eseguire il programma basta utilizzare il comando RUN. RUN[Invio] Ciao Amico Uso di variabili. 10 A$ = "Ciao" 20 B$ = "Amico" 30 PRINT A$; " "; B$ Uso del concatenamento di stringa. 10 A$ = "Ciao" 20 B$ = "Amico" 30 PRINT A$+" "+B$ Uso di una costante e di una variabile numerica. 10 A$ = "Ciao" 20 B$ = " Amico" 30 N = 1000 40 PRINT N; "volte "; A$; " "; B$ Il risultato che si ottiene dovrebbe essere il seguente. 1000 volte Ciao Amico Si voglia costruire un programma che consenta di scrivere BUONGIORNO SIGNORE o BUONGIORNO SIGNORA se si risponde alla domanda Maschio o Femmina. 10 INPUT S$ 20 B$ =" BUONGIORNO" 166 BIOINFORMATICA 30 40 50 60 70 80 90 M$ = " SIGNORE" F$ = "SIGNORA" IF S$= "F" THEN GO TO 80 R$ =B$+ " " + M$ GO TO 90 R$ =B$+ " " + F$ END ESPRESSIONI CONDIZIONALI. Sono istruzioni che offrono diverse possibilità, nel BASIC esistono 6 operatori condizionali. = uguaglianza <> differente > maggiore < minore > = maggiore o uguale < = minore o uguale Espressioni condizionali complesse o espressioni booleane. Se la condizione 1 e la condizione 2 sono vere allora.... Se la condizione 1 o 2 è vera allora..... Se la condizione 1 ma non la 2 sono verificate allora.... Si deve ora definire cosa significa o come si chiama una variabile logica. É un valore che può assumere unicamente la condizione di vero o falso. L'operatore logico di negazione è NOT. Se si considera una variabile logica A, il non A è una variabile logica che è vera quando A è falso e inversamente. Tale situazione si può rappresentare con una tabella di verità. A NON A Vero Falso Falso Vero A ad esempio rappresenta B<C, non A rappresenta la condizione inversa B>C. L'OPERATORE LOGICO AND. Nel caso si presentino 2 variabili logiche A e B, l'espressione logica A AND B si realizza se simultaneamente A e B sono veri. B VERO B FALSO A VERO vero falso A FALSO falso falso L'OPERATORE LOGICO OR. Nel caso si presentino 2 variabili logiche A e B, l'espressione logica A o B si realizza se almeno una delle due variabili logiche è vera B VERO B FALSO A VERO vero vero A FALSO vero falso 167 BIOINFOSTAT GLI OPERATORI LOGICI IN BASIC. Si consideri di dovere verificare che un numero è compreso tra un valore inferiore a I e superiore a S avremo IF N> I AND N < S THEN Lo stesso procedimento lo possiamo applicare a delle catene di caratteri. Se volessimo controllare come nell'esempio precedente il sesso avremo: 10 INPUT S$ 20 IF S$ ="F" OR S$= "M$" THEN 50 30 PRINT "ERRORE" 40 STOP 50 PRINT "GIUSTO" 60 END Oppure si può porre una condizione negativa 10 INPUT S$ 20 IF S$ ="F" AND NOT S$= "M$" THEN 10 30 PRINT "GIUSTO" 40 END Esistono delle istruzioni condizionali strutturate che consentono diverse opzioni, se la condizione si verifica allora si passa alla prima istruzione, altrimenti si passa alla istruzione 2. ISTRUZIONE DI ITERAZIONE. Il vantaggio della programmazione è che consente di effettuare delle operazioni in modo ripetitivo. Le possibilità di fare eseguire dei calcoli ripetitivi è quello di conoscere il numero delle iterazioni, avremo un contatore che si arresterà di procedere quando il numero delle iterazioni è raggiunto. Oppure si può conoscere semplicemente il momento di arresto del processo senza conoscere esattamente il numero delle interazioni necessarie. L'espressione generale è la seguente: FOR V=<espressione aritmetica> aritmetica> A <espressione aritmetica> STEP <espressione ISTRUZIONE NEXT. Nel caso in cui non venga dichiarato il passo, l'ordinatore lo considera come unità. Esempio si voglia calcolare la somma dei primi N numeri. 10 INPUT N 20 30 40 50 60 70 S=0 FOR I=1 TO N S=S+I NEXT I PRINT S END La possibilità di ottenere i risultati di una funzione, dove il numero dei punti, l'incremento di X e il valore iniziale di X sono dei dati forniti in input. Esempio si voglia calcolare la somma dei primi N numeri. 10 20 30 40 50 INPUT I, N, X FOR V =1 TO I + N*X STEP X PRINT V, LOG (V) NEXT V END Analogamente potremmo costruire un programma per i numeri fattoriali. Esempio si voglia calcolare la somma dei primi N numeri. 168 BIOINFORMATICA 10 20 30 40 50 60 70 F=1 INPUT N FOR I =1 TO N F=F*I PRINT F NEXT I END Per N=12 ; avremo come stampa 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ISTRUZIONI. Basic è un linguaggio di programmazione molto povero dal punto di vista delle strutture di controllo. In modo particolare sono assenti funzioni e procedure. Per fare riferimenti a porzioni di codice occorre sempre indicare un numero di riga, attraverso le istruzioni GOTO o GOSUB. GOTO GOTO <riga> Si tratta dell'istruzione di salto incondizionato e senza ritorno. In pratica, l'esecuzione del programma prosegue dalla riga indicata come argomento, perdendo ogni riferimento al punto di origine. GOSUB GOSUB <riga> Istruzione di salto incondizionato con ritorno. L'esecuzione del programma prosegue dalla riga indicata come argomento, e quando poi viene incontrata l'istruzione RETURN, il programma riprende dalla riga successiva a quella in cui era avvenuta la chiamata. Questo è l'unico modo offerto dal Basic tradizionale per la realizzazione di subroutine L'esempio seguente mostra un programma completo che visualizza il messaggio "Ciao" e poi il messaggio "Amico". 10 20 30 40 50 60 70 GOTO 50 A$ = "Ciao" PRINT A$ RETURN GOSUB 20 B$ = "Amico" PRINT B$ La sintassi di ingresso dei dati è semplice e permette di inserire variabili numeriche e non numeriche. INPUT N, M, N$, PR$ Durante l'esecuzione del programma questa istruzione comporta che sullo schermo compaia un punto interrogativo. Se l'inserimento del dato non corrisponde alla variabile assegnata nella istruzione di input avremo una segnalazione del tipo: INPUT ERROR TYPE REDO FROM START (ritorno alla partenza) INPUT | ? INPUT [<prompt>;] <variabile>[,<variabile>]... ? [<prompt>;] <variabile>[,<variabile>]... Attraverso questa istruzione è possibile inserire un valore in una variabile, o una serie di valori in una serie di variabili. Se viene indicata la stringa del prompt, questa viene 169 BIOINFOSTAT visualizzata prima di attendere l'inserimento da parte dell'utente; altrimenti viene visualizzato semplicemente un punto interrogativo. Se si indica un elenco di variabili, queste devono essere dello stesso tipo (tutte numeriche o tutte stringa), e il loro inserimento viene atteso in modo sequenziale da parte dell'utente. L'esempio seguente rappresenta l'inserimento di una stringa senza prompt e di una coppia di numeri con prompt. Si ha la possibilità di inserire anche delle label per facilitare la comprensione dei dati di input. Ad esempio potremo avere INPUT "Data di Nascita" G, M, A Avremo come risposta Data di Nascita ?, 18, 5, 1978 10 INPUT A$ 20 INPUT "Data di nascita "; G, M, A PRINT. L'istruzione PRINT permette di emettere sullo schermo una stringa corrispondente agli operandi utilizzati come argomenti. Eventuali valori numerici vengono convertiti in stringhe automaticamente. Gli operandi possono essere elencati utilizzando la virgola o il punto e virgola. PRINT <operando>[{,|;}...] Gli esempi seguenti sono equivalenti. 10 10 10 20 PRINT 1234, "saluti" PRINT 1234; "saluti" A = 1234 PRINT A; "saluti" 10 A = 1234 20 M$ = "saluti" 30 PRINT A; M$ L'ISTRUZIONE READ. Con questa istruzione diamo delle indicazioni affinché il programma esegua in maniera non iterativa ma sulla base di precise disposizioni. La sintassi è semplice: READ lista di variabili. Potremo avere: READ A, B$, C, D La dichiarazione di lettura è associata sempre ad una dichiarazione DATA. 10 READ A,B,C,D 20 DATA 7,8,9, 10 30 PRINT A,B,C,D Avremo A=7, B=8,C=9,D=10 L'istruzione DATA può essere collocata all'interno dl programma in qualsiasi posizione. LA LISTA E LA TABELLA. Spesso esiste la necessità di trattare un insieme di dati strutturati; ad esempio una serie di numeri o una serie di parole. In matematica è ricorrente l'impiego di strutture quadrate o rettangolari con delle righe e delle colonne ed ogni elemento può essere facilmente identificato con degli indici. Una variabile indicizzata viene scritta come A(I); dove A e I sono indicatori ed A(I) rappresenta un elemento generico di una lista di valori numerici. Si può avere anche una doppia indicizzazione; una variabile B (I,J) in questo caso I e J sono variabili numeriche intere e B (I,J) rappresenta un elemento generico di una tabella. 170 BIOINFORMATICA B(1,1) B(2,1) .......... B(1,N) B(2,1) B(2,2) .......... B(2,N) B(M,1) B(M,2)......…. B(M,N) Questa tabella non è necessariamente una matrice in quanto possiamo definire anche una tabella di caratteri quando consideriamo degli indicatori che terminano con $. Per la gestione di una lista è necessario effettuare una dichiarazione che deve precedere l'utilizzazione della lista. Tale dichiarazione è: DIM. DIM A(10), A$(20) Significa che ho una lista che contiene 10 elementi numerici ed una che contiene 20 catene di caratteri. Possiamo anche definire delle dimensioni diverse per una variabile numerica considerando che la dimensione verrà fornita nel corso dell'esecuzione del programma. I SOTTOPROGRAMMI. Si definiscono sottoprogrammi una serie di istruzioni che consentono un trattamento e che possono essere richiamati da un altro programma o sottoprogramma ma che terminano con una istruzione di ritorno al programma principale. Il vantaggio dei sottoprogrammi è quello di evitare la duplicazione di istruzioni quando nel corso del programma si debba prevedere di effettuare lo stesso trattamento. Con i sottoprogrammi possiamo utilizzare dei programmi che sono già stati testati, oppure possiamo ricorrere a dei moduli già predisposti. La sintassi è GOSUB NN; al termine del sottoprogramma è necessario indicare RETURN. TRATTAMENTO DELLE MATRICI. Prende nome di matrice una serie di numeri disposti secondo righe e colonne e che si scrivono tra parentesi tonde, quadre o graffe e si indica con A (una lettera maiuscola in grassetto). Se il numero delle righe (r) è uguale al numero delle colonne (c) la matrice è detta quadrata, altrimenti è detta rettangolare. L'ordine della matrice è definito dal numero delle righe e delle colonne. Una matrice unità è caratterizzata dal fatto di avere la diagonale uguale all'unità. A= 1 0 0 0 1 0 0 0 1 Nel BASIC possiamo scrivere un programma per definire una matrice unità: 10 DIM A(10,10) 20 FOR I=1 TO 10 30 FOR J=1 TO 10 40 A(I,J) =0 50 IF I= J THEN A (I,J)+1 60 PRINT A (I,J) 70 NEXT J 80 PRINT 90 NEXT I 100 END Le operazioni sulle matrici possono essere svolte con l'ausilio di programmi scritti in BASIC. Si abbia ad esempio C(I,J)= A(I,J) +B(I,J). 171 BIOINFOSTAT 1 3 2 2 4 1 3 7 3 0 5 1+3 0 2 = 3 5 3 3 2 3 4 5 0 7 7 3 In BASIC: 10 DIM A(3,3), B(3,3), C(3,3) 110 C (I,J)=A(I,J)+B(I,J) 20 N=3 30 FOR I=1 TO N 40 FOR J=1 TO N 50 READ DATA 60 NEXT I,J 70 DATA 1,3,2,0,5,1,3,2,3 80 DATA 2,4,1,3,0,2,4,5,0 90 FOR I=1 TO N 100 FOR J=1 TO N 120 NEXT I,J 130 FOR I=1 TO N 140 FOR J=1 TO N 150 PRINT C (I,J) 160 NEXT J 170 END La matrice per uno scalare. Quando una matrice A (N,N) viene moltiplicata per uno scalare si ottiene una matrice B(N,N) =K x A (N,N) dove tutti gli elementi di A vengono moltiplicati per K. In BASIC: 90 FOR I=1 TO N 100 FOR J=1 TO N 110 B(I,J) = K*A (I,J) 120 NEXT I,J Moltiplicazioni di matrici. L'operazione di moltiplicazione è più complessa in quanto un elemento della matrice prodotto comporta il calcolo dei prodotti degli elementi della linea I e della colonna J. 90 FOR I=1 TO N 100 FOR J=1 TO N 110 C(I,J) =0 110 FOR K=1 TO N 120 C(I,J) = C(I,J) + A (I,K)* B (K,J) 130 NEXT K,I,J Esistono delle istruzioni specifiche che consentono la manipolazione delle matrici senza dover programmare direttamente ogni operazione calcolo per calcolo. Per leggere i coefficienti di una matrice A(N,M) è sufficiente scrivere MAT READ A Esempio: 10 20 30 40 DIM B (3,4) MAT READ B DATA 5,10,15,20,4,8,12,15,3,6,10,10 MAT PRINT DATA Si otterrà in stampa: 5 4 3 10 8 6 15 12 10 20 15 10 172 BIOINFORMATICA Operazioni sulle matrici Somma di matrici MAT C = A+B Sottrazione di matrici MAT C = A-B Inizializzazione a zero di una matrice MAT A = ZER o MAT A = ZER (N,M) Inizializzazione a uno MAT A = CON o MAT A = CON (N,M) Matrice identità MAT A = IDN Matrice per uno scalare MAT A =<espressione aritmetica> *B Matrice per matrice MAT C = A * B Matrice trasposta MAT B = TRN (A) Inversione di matrice MAT B = INV (A) Esempio di risoluzione di un sistema di equazioni a due variabili: siano 3x + 4 y = 10 x+5y=7 Espresse in forma matriciale 3 4 x 10 ⋅ = 1 5 y 7 Le matrici X e B sono matrici particolari di dimensione (2,1) e sono chiamate anche vettori. Utilizzando la notazione matriciale, si suppone che esista una matrice inversa A-1, si ha quindi come soluzione. X= A -1 B per definizione la matrice inversa è tale che a11 a12 × 3 4 = 1 0 a21 a22 1 5 0 1 da cui si giunge a 3 a11 + a12 =1 3a21 + a22 =0 4 a11 + 5a12 =0 4a21 + 5a22 =0 sostituendo si ottiene a11 = 5/11 a12 =-4/11 a21 =-1/11 per cui sostituendo avremo 5 / 11 −4 / 11 − 1 / 11 3 / 11 × 10 7 = che ha come soluzione 2 e 1 In linguaggio BASIC: 10 DIM A(2,2),B(2,1), X(2,1), AI (2,2) 20 MAT READ A 30 DATA 3,4,1,5 173 a22 = 3/11 BIOINFOSTAT 40 50 60 70 80 90 MAT READ B DATA 10,7 MAT AI=INV(A) MAT X =AI*B PRINT X END LISTATI Somma tra due numeri positivi 1010 1020 1040 1050 1060 1070 1080 1090 1100 1110 1120 REM somma REM Somma esclusivamente valori positivi. REM INPUT "Inserisci il primo valore "; X INPUT "Inserisci il secondo valore "; Y LET Z = X FOR I = 1 TO Y LET Z = Z + 1 NEXT PRINT X; "+"; Y; "="; Z END Moltiplicazione di due numeri positivi attraverso la somma 1020 REM Moltiplica esclusivamente valori positivi. 1050 INPUT "Inserisci il primo valore "; X 1060 INPUT "Inserisci il secondo valore "; Y 1070 LET Z = 0 1080 FOR I = 1 TO Y 1090 LET Z = Z + X 1100 NEXT 1110 PRINT X; "*"; Y; "="; Z 1120 END Divisione intera tra due numeri positivi 1020 REM Divide esclusivamente valori positivi. 1050 INPUT "Inserisci il primo valore "; X 1060 INPUT "Inserisci il secondo valore "; Y 1070 LET Z = 0 1080 LET I = X 1090 IF I < Y THEN GOTO 1130 1100 LET I = I - Y 1110 LET Z = Z + 1 1120 GOTO 1090 1130 PRINT X; "/"; Y; "="; Z 1140 END 1150 Elevamento a potenza 1010 REM exp.bas 1020 REM Eleva a potenza. 1040 REM 1050 INPUT "Inserisci il primo valore "; X 1060 INPUT "Inserisci il secondo valore "; Y 1070 LET Z = 1 1080 FOR I = 1 TO Y 1090 LET Z = Z * X 174 BIOINFORMATICA 1100 NEXT 1110 PRINT X; "^"; Y; "="; Z 1120 END Radice quadrata 1010 REM radice.bas 1020 REM Radice quadrata intera. 1050 INPUT "Inserisci il valore "; X 1060 LET Z = 0 1070 LET T = 0 1080 REM Inizio del ciclo di calcolo 1090 LET T = Z * Z 1100 IF T > X THEN GOTO 1130 1110 LET Z = Z + 1 1120 GOTO 1080 1130 REM Riprende il flusso normale 1140 LET Z = Z - 1 1150 PRINT "radq("; X; ") ="; Z 1160 END Fattoriale 1010 REM fatt.bas 1020 REM Fattoriale. 1050 INPUT "Inserisci il valore "; X 1060 LET Z = X 1070 FOR I = (X - 1) TO 1 STEP -1 1080 LET Z = Z * I 1090 NEXT 1100 PRINT "fatt("; X; ") ="; Z 1110 END 175 BIOINFOSTAT ll riconoscimento automatico di oggetti (pattern) e la loro descrizione, classificazione e raggruppamento (clustering) sono argomenti importanti in una grossa varietà di problemi sia nell’area ingegneristica che scientifica, quali: la biologia, la psicologia, la medicina, il marketing, la visione artificiale, l’intelligenza artificiale fino alla fusione di dati (meglio conosciuta come data fusion). La domanda che sorge spontanea nel descrivere la pattern recognition, è: cos’è esattamente un pattern? Watanabe descrive un pattern come “l’opposto del caos; ovvero un’entità, generalmente definita a cui si può dare un nome”. Per esempio, un pattern può essere l’immagine di una impronta digitale, una parola scritta in corsivo, l’immagine di un volto, o un segnale acustico. Dato un pattern, il suo riconoscimento (detto anche classificazione) può essere principalmente effettuato in due modi: 1. supervisionato, in cui il pattern in input viene identificato come membro di una classe tra quelle predefinite, ovvero viene classificato in maniera supervisionata avendo l’utente o il progettista definito a priori le classi di interesse; 2. non supervisionato, in cui il pattern in input viene assegnato ad una classe sconosciuta a priori, ovvero i pattern vengono raggruppati nei cosiddetti cluster (tecniche di clustering). Il problema della pattern recognition quindi viene posto nella forma di classificazione o identificazione delle categorie di appartenenza, dove le classi o categorie possono essere sia definite dal progettista del sistema (nei metodi supervisionati), sia apprese dalle similarità tra i pattern (nei metodi non supervisionati). I sistemi di pattern recognition creano, chiaramente, nuovi scenari applicativi sia a livello accademico che industriale. Si pensi, per esempio, ai vantaggi per un processo industriale che, impiegando il riconoscimento automatico di oggetti, può beneficiare di un controllo qualità automatizzato. Sempre nell’ambito industriale, l’impiego di algoritmi di riconoscimento automatico, porta ad arricchire le funzionalità dei robot impiegati, come ad esempio la possibilità di muoversi in determinati ambienti riconoscendo automaticamente gli ostacoli. Altre applicazioni di interesse, soprattutto ai giorni nostri, sono quelle di video sorveglianza automatizzata. Pensiamo, ad esempio, ad una stazione ferroviaria o ad un aeroporto ed a come, vista la mole di persone in transito, un riconoscimento automatico di oggetti incustoditi possa essere cruciale per le funzionalità di sorveglianza. Il riconoscimento di volti, è un’altra area di applicazione che consente di aumentare notevolmente la sicurezza sia in ambito pubblico che aziendale. Un ulteriore scenario, molto interessante, riguarda la cosiddetta “Realtà Aumentata” dove informazioni reali percepite da utenti umani vengono arricchite da informazioni sull’ambiente estratte automaticamente da un sistema automatizzato. Un esempio tipico è quello militare con la possibilità di avere visori che includono tracciamento automatico dei soggetti individuati e stima della distanza dall’osservatore. Già da questi primi esempi è chiaro come l’uso di tecniche di riconoscimento automatico possa notevolmente migliorare le attuali applicazioni tecnologiche in diversi campi, dal settore scientifico a quello sociale ed industriale. Le principali aree di applicazione della Pattern Recognition sono: Automazione dei processi industriali. •Riconoscimento di oggetti, ispezioni visuali, controlli di qualità. •Navigazione e coordinazione di robot. Sorveglianza e tracking. •Traffico, sicurezza. Interazione uomo-computer. •Rilevamento e riconoscimento di volti. •Assistenza ai disabili. Realtà virtuale e visualizzazione. •Ricostruzione di scene e modelli 3D. •Fotometria. Applicazioni spaziali e militari. Tra i campi più innovativi nell’applicazione del riconoscimento di pattern, c’è ad esempio l’affective computing, identificato da Picard, che introduce la possibilità da parte del 176 BIOINFORMATICA sistema di riconoscere e esprimere emozioni, al fine di rispondere in maniera intelligente alle espressioni umane. In genere, un sistema di pattern recognition, riceve in ingresso la descrizione di un oggetto, ovvero un insieme di misure che lo caratterizzano (feature) e sulla base di queste “decide” a quale classe l’oggetto appartiene. La decisione della classe di appartenenza ha un costao associato all’assegnazione dell’oggetto alla classe sbagliata e l’obiettivo con cui realizzare un buon sistema di pattern recognition è quello di minimizzare il costo di classificazione. Comunque, la caratteristica comune a tutti questi sistemi e domini applicativi è che le misure caratteristiche (feature) non sono suggerite o identificate dagli esperti di dominio, ma vengono estratte ed ottimizzate da procedure che elaborano dati; questo avviene perché in genere abbiamo migliaia di misure possibili anche per un singolo pattern. La crescente disponibilità di risorse per il calcolo automatico non solo consente di elaborare contemporaneamente grosse moli di dati, ma permette anche l’analisi e la classificazione di grandi insiemi di pattern. Allo stesso tempo, la domanda di applicazioni di pattern recognition cresce continuamente grazie alla disponibilità di grosse basi di dati e del calo dei costi dei supporti di memorizzazione. La tabella 1 mostra, in sintesi i principali domini applicativi dei sistemi di riconoscimento. 177 BIOINFOSTAT Tuttavia, in molte delle applicazioni di pattern recognition risulta evidente che non esiste un approccio “ottimale” e “generale” alla classificazione e che la scelta di integrare diversi metodi e approcci è la migliore da perseguire. La progettazione di un sistema di pattern recognition richiede essenzialmente di affrontare i seguenti aspetti: 1. Acquisizione e pre-elaborazione (e normalizzazione) dei dati. 2. Rappresentazione e classificazione dei dati o pattern. 3. Decisione e classificazione. Il dominio di applicazione, in pratica, influenza enormemente la scelta dei sensori (nel senso generale del termine), delle tecniche di preelaborazione e di normalizzazione dei dati, della rappresentazione degli stessi e del modello decisionale di classificazione. È noto che per i problemi di riconoscimento ben definiti e quindi condizionati opportunamente (esempio: piccole variazioni nei valori appartenenti alla stessa classe e grosse variazioni in quelli appartenenti a classi diverse) esistono soluzioni efficienti e buone strategie decisionali di classificazione. Per esempio, usare approcci orientati all’apprendimento, basandosi su un insieme di dati per l’addestramento automatico del sistema (training set) consente la necessaria flessibilità del sistema, che addestrato con dati diversi, può reagire a situazioni diverse con un margine di errore controllabile. 178 BIOINFORMATICA I quattro principali approcci alla pattern recognition sono: 1. approcci basati su modello (Template Matching); 2. approcci con classificazione statistica (Statistical Classification); 3. approcci sintattici o strutturali (Syntactic or Structural Matching); 4. approcci basati su reti neurali (Neural Networks). Questi approcci non sono necessariamente separati ed indipendenti, infatti a volte lo stesso metodo può essere usato nei diversi approcci con diverse interpretazioni. Esistono anche tentativi di progettazione e realizzazione di sistemi ibridi che introducono e integrano più modelli all’interno dello stesso sistema. SISTEMI DI PATTERN RECOGNITION BASATI SUL MODELLO Uno dei primi e più semplici degli approcci alla pattern recognition è quello basato sul modello, il cosiddetto template matching. I sistemi di pattern recognition basati sul modello utilizzano la cosiddetta tecnica del “matching”; il matching è definito come l’operazione che viene usata per determinare la similarità tra due entità dello stesso tipo: punti, curve o forme ad esempio. Nell’approccio basato su modello, quest’ultimo (il modello) è tipicamente un prototipo del pattern od oggetto da riconoscere e classificare, tipicamente una forma bidimensionale. L’oggetto da riconoscere (il pattern) viene confrontato con tutti i modelli memorizzati nel sistema considerando i cambiamenti di scala e le possibili invarianze per rotazione o traslazione. Naturalmente ci saranno casi in cui sarà utile l’invarianza di scala, cioè ci interessa riconoscere l’oggetto semplicemente dalla forma, mentre in altri casi sarà necessario distinguere non solo rispetto alla forma ma anche rispetto alla dimensione. La misura di similarità utilizzata nei sistemi basati su modello, è solitamente una correlazione statistica e può essere ottimizzata apprendendo i parametri dal training set, ovvero da un insieme di esempi di oggetti forniti in input al sistema. I sistemi basati su modello sono computazionalmente inefficienti, richiedono molte risorse di calcolo per confrontare il modello del pattern in input con tutti gli altri presenti nella base dati, ma grazie alla continua crescita della potenza di calcolo questo approccio viene sempre più utilizzato soprattutto in ambito industriale. Per come abbiamo definito il modello fino ad ora si dovrebbe parlare di sistemi basati su modelli rigidi, ovvero sistemi dove il modello è descritto con parametri ed insiemi di valori fissati. Questo tipo di sistemi tende a non essere efficiente in presenza di distorsioni dovute all’acquisizione dell’oggetto (per esempio: effetti di errori sulle immagini), cambiamento dei punti di vista, o grosse variazioni di valori delle caratteristiche all’interno della stessa classe (interclass variance). In questi ultimi casi si tende utilizzare tecniche di modelli deformabili o elastici al fine di consentire un confronto di similarità (matching) tra modelli le cui deformazioni non possono essere rappresentate esplicitamente a priori. Per intenderci, questi sistemi sono utili quando non possiamo modellare a priori tutte le possibili deformazioni che un oggetto possa avere, ed allora si agisce creando un modello dell’oggetto e studiando quali agenti esterni lo possono deformare (modellando quindi le possibili deformazioni) a volte simuland anche forze fisiche. 3. SISTEMI DI PATTERN RECOGNITION CON CLASSIFICAZIONE STATISTICA Nell’approccio statistico ogni pattern è rappresentato in termini di un vettore di lunghezza d, dove d indica il numero di misure caratteristiche o feature dello stesso e viene rappresentato come un punto nello spazio d-dimensionale delle caratteristiche (feature o vector space). L’obiettivo, quindi, è quello di selezionare un insieme di feature che consenta a vettori appartenenti a categorie differenti di occupare spazi compatti in regioni disgiunte dello spazio d-dimensionale delle feature. 179 BIOINFOSTAT L’efficacia della rappresentazione spaziale delle feature (feature set) è rappresentata da come i pattern delle diverse classi sono ben separati nello spazio. Dato un insieme di addestramento (esempi di pattern) per ogni classe, l’obiettivo è quello di stabilire delle regioni di decisione nello spazio delle feature che consenta di separare i pattern appartenenti a classi diverse. Nell’approccio statistico, le regioni di decisione sono determinate dalle distribuzioni di probabilità per ogni pattern di appartenere ad una delle classi; le distribuzioni vanno quindi specificate (anche parametricamente) oppure apprese mediante addestramento del sistema (machine learning. Uno degli approcci più utilizzati è quello dell’analisi dei discriminanti per la classificazione: prima di tutto si sceglie, sulla base dell’esperienza una forma parametrica per la regione di decisione, per esempio lineare o quadratica; successivamente si sceglie, sulla base dell’insieme di addestramento, la migliore regione di decisione ai fini della classificazione. In genere si usano metodi statistici per la stima degli errori per determinare le regioni di decisione. Il motivo di questa scelta si basa sul fatto che la migliore regione di decisione è quella che minimizza l’errore nell’assegnare il pattern alla classe sbagliata. Uno degli altri principali approcci alla costruzione delle regioni di decisione, l’approccio diretto, nasce dalla cosiddetta filosofia di Vapnik. Questa si basa sull’idea che se si possiede un insieme ridotto di informazioni sul problema che si sta affrontando, è meglio cercare di risolvere il problema direttamente, senza affrontare generalizzazioni dello stesso come passo intermedio. È possibile, infatti, che in questo caso si posseggano informazioni sufficienti solo per una soluzione diretta dello stesso, ma che le stesse siano insufficienti per una soluzione più generale. 4. SISTEMI DI PATTERN RECOGNITION CON APPROCCI SINTATTICI O STRUTTURALI In molti problemi di pattern recognition che coinvolgono oggetti complessi, una soluzione può essere quella di considerare una prospettiva gerarchica, dove i pattern vengono visti come composti da subpattern più semplici I pattern elementari o subpattern sono chiamati primitivi e i pattern complessi da riconoscere sono rappresentati sotto forma di insiemi e relazioni tra primitivi. Nei sistemi di pattern recognition sintattici si crea un’analogia formale fra la struttura dei pattern complessi e la sintassi di un linguaggio. I pattern vengono visti come frasi di un linguaggio, mentre le primitive vengono rappresentate come l’alfabeto del linguaggio, e le frasi quindi sono generate a partire da una grammatica per questo linguaggio. Quindi un pattern viene riconosciuto o classificato se la rispettiva frase appartiene al linguaggio specificato per quella classe ed è quindi accettata dalla grammatica specificata. Quindi un grosso insieme di pattern-complessi può essere descritto da un semplice insieme di primitive e regole grammaticali. La grammatica per ogni classe di pattern può essere inferita o appresa dall’insieme di pattern di addestramento o di esempio per ognuna delle classi di interesse. La pattern recognition strutturale (o sintattica) è molto interessante perché, oltre all classificazione dei pattern, fornisce anche una descrizione di come essi siano costruiti a partire dalle primitive, da qui l’uso della parola strutturale. Questo approccio è molto usato in situazioni in cui la struttura dei pattern può essere catturata da insiemi di regole, come per le forme d’onda degli elettrocardiogrammi, le texture o trame (rappresentazioni fotorealistiche applicate ad un modello sintetico d’immagine) e l’analisi dei contorni. L’implementazione di un approccio sintattico alla pattern recognition è in generale piuttosto complessa e questo è dovuto per esempio al problema della segmentazione delle immagini al fine di estrarre le primitive ed all’inferenza per estrarre la grammatica dall’insieme di pattern di addestramento. Negli anni ottanta, Fu introdusse la nozione di grammatica con attributi che unifica i concetti di pattern recognition sintattico con quello basato su classificazione statistica. In effetti, un problema dell’approccio sintattico è che può generare una esplosione di combinazioni da investigare per inferire dalle primitive e 180 BIOINFORMATICA dalle loro relazioni la grammatica conseguente; per cui necessita di grandi insiemi di pattern per l’apprendimento e quindi grosse risorse di elaborazione dati. 5. SISTEMI DI PATTERN RECOGNITION BASATI SU RETI NEURALI Le reti neurali possono essere considerate come un sistema computazionale fortemente parallelo costituito da un grande numero di processori estremamente semplici ma intensamente interconnessi fra loro. I modelli basati su reti neurali cercano di utilizzare principi di organizzazione dei dati, come: addestramento, generalizzazione, tolleranza ai guasti e distribuzione dei dati, in una rete di grafi pesati; i nodi sono rappresentati da neuroni artificiali e gli archi diretti (pesati) rappresentano le connessioni tra l’output di un livello di neuroni e l’input del successivo livello. La caratteristica principale delle reti neurali è la loro capacità di addestrarsi, mediante procedure iterative, e gestire relazioni non lineari fra l’input e l’output, adattandosi ai pattern di esempio. Le reti neurali vengono divise in famiglie a seconda della loro struttura e del tipo di connessioni tra i neuroni artificiali; la famiglia di reti neurali più utilizzata per i sistemi di pattern recognition, e quindi per la classificazione, è quella basata sulle cosiddette feed-forward network, che includono tra gli altri i Multi-Layer Perceptron (MLP) e le Radial-Basis Functions (RBF). Queste reti sono organizzate per livelli e hanno connessioni unidirezionali tra i neuroni appartenenti ai differenti livelli. Un altro insieme, molto usato, di reti neurali è costituito dalle Self-Organizing Map (SOM), o anche reti di Kohonen, che sono principalmente usate per il raggruppamento automatico di pattern, chiamato data cluster. Il processo di addestramento nelle reti neurali, consiste nell’aggiornare i pesi di connessione sugli archi dei neuroni artificiali al fine di migliorare la precisione dei risultati della rete a seconda del compito assegnatole, di classificazione o di raggruppamento (clustering). Il crescente utilizzo dei modelli per la pattern recognition basati su reti neurali è dovuto principalmente alla caratteristica per cui sembra che le reti neurali siano indipendenti dal dominio applicativo del sistema di pattern recognition, in contrasto con quanto invece avviene per i sistemi basati su modello o con approccio sintattico/strutturale. In più, per le reti neurali sono disponibili algoritmi efficienti per l’apprendimento da insiemi di esempio dei pattern da classificare. In definitiva le reti neurali forniscono un insieme di algoritmi non lineari per l’estrazione delle feature dai pattern (mediante l’utilizzo del livello nascosto o hidden layer) e per la classificazione dei pattern (per esempio i multi-layer perceptron). In più, gli algoritmi di estrazione delle feature e di classificazione dei pattern possono essere direttamente applicati (matematicamente) su realizzazioni hardware delle reti neurali ai fini di incrementarne l’efficienza. Diversamente da quello che sembra, molti dei più noti modelli di reti neurali sono implicitamente equivalenti o molto simili ai metodi di pattern recognition basati su modelli statistici. Ma indipendentemente dalle similitudini, le reti neurali offrono molti vantaggi ai progettisti di sistemi di pattern recognition, quali: un approccio unificato alla selezione ed estrazione delle feature, ed una strategia generale e flessibile per trovare soluzioni ai problemi di classificazione in cui le regioni di decisione siano non lineari. 6. SISTEMI DI RICONOSCIMENTO AUTOMATICO PER BASI DATI MULTIMEDIALI Approfondiremo, ora, i sistemi di riconoscimento basati su immagini (che utilizzano, in genere, un mix delle tecniche presentate), visto che al giorno d’oggi viene prodotta una sempre maggiore quantità di documenti multimediali (immagini, filmati ecc.), per lo più memorizzati in forma digitale. L’enorme diffusione dei dati multimediali in rete negli ultimi anni ha portato alla crescita di basi dati sia di immagini che di sequenze video. Tuttavia, l’uso efficace di immagini in vari domini applicativi è ostacolato dalla difficoltà di classificare e gestire questi dati in modo efficiente. Sebbene la “navigazione” di sequenze di immagini sia un tema importante in molte applicazioni nelle quali si richiede all’utente di selezionare poche sequenze tra molte, o quando deve trovare un punto particolare all’interno di una sequenza, gli strumenti a disposizione per eseguire tali attività 181 BIOINFOSTAT rimangono piuttosto primitivi. Per progettare un sistema per l’interrogazione di basi dati di immagini è necessario stabilire: 1. quale rappresentazione adottare per descrivere il contenuto delle immagini, 2. in quale modo organizzare le informazioni estratte per poi memorizzarle, 3. che tipo di strategie utilizzare per il recupero e la visualizzazione delle immagini memorizzate. Nella selezione del tipo di rappresentazione delle immagini, si deve tentare di trovare un insieme di caratteristiche che descrivano nella maniera più completa possibile le immagini presenti nella base dati. Molte delle tecniche adottate per rappresentare il contenuto delle immagini si basano sulla conoscenza, cioè utilizzano informazioni note a priori sul dominio specifico a cui è rivolta l’applicazione, non facilmente utilizzabili per il recupero di immagini in basi dati generiche. In genere gli oggetti possono essere caratterizzati mediante: la loro forma (contorno, baricentro ecc.), le regioni omogenee (segmentazione), o caratteristiche geometriche di vario tipo (esempio, scheletro – tecnica che consiste nel rimuovere ripetutamente i pixel del contorno fino a ridurre l’oggetto a uno “scheletro” largo un pixel). La memorizzazione del contenuto delle immagini è organizzata mediante indici per rendere più efficiente la successiva fase di recupero. La capacità di recupero delle informazioni in una base dati multimediale è strettamente legata anche al linguaggio per le interrogazioni fornito con essa. Esistono svariate forme di interrogazione su immagini, come ad esempio le interrogazioni tramite identificatori, le interrogazioni testuali, le interrogazioni basate su regioni (viene scelta una regione dell’immagine e tutte quelle che la intersecano vengono selezionate) ecc.. Infine per ottenere i risultati (le immagini), gli indici delle immagini memorizzate sono confrontati con i parametri estratti dalla descrizione dell’immagine fornita in input dall’utente. La rappresentazione visuale dei risultati, quindi, consente all’utente di valutare i risultati ottenuti e di variare gli intervalli entro i quali devono essere compresi i parametri legati ai modelli degli oggetti recuperati, in modo da ottenere risultati più o meno precisi a seconda del grado di accuratezza desiderato. Per quanto riguarda i video, la descrizione delle entità “sequenze video” dipende dal contesto del filmato in esame e dall'ambito cognitivo in cui viene utilizzata. Per questi motivi, la fase di indicizzazione dei documenti deve sfruttare il contenuto della sequenza video in base alle caratteristiche tipiche del dominio applicativo. Per esempio, può essere interessante effettuare ricerche per soggetto (singolo attore, particolare scenografia), tipo di inquadratura (primo piano, quadro d’insieme), tipo di azione (entrata in scena, uscita dalla scena, coro d’insieme). Per facilitare la navigazione e il reperimento di sequenze video digitali, è utile descrivere i filmati in termini di dati strutturati e riconoscere le interruzioni logiche al loro interno. Tale tecnica è detta shot boundary detection e il suo compito è quello di segmentare lunghe sequenze, in modo automatico, sfruttando una analisi basata sul contenuto. Il rilevamento e la classificazione di interruzioni di scene è un primo passo nel processo di annotazione automatica di sequenze video digitali. Una volta eseguita la segmentazione, il video originale può essere pensato come suddiviso in porzioni internamente uniformi e ininterrotte, sulle quali è possibile effettuare ricerche più specifiche. 182