- 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