|
DALL’ELABORAZIONE TRADIZIONALE DEI DATI AI SISTEMI ESPERTI1. Il problema della rappresentazione 2. La rappresentazione della conoscenza 4. Una struttura di controllo alternativa – I SISTEMI DI PRODUZIONE 5. Le strutture di controllo e la dipendenza dal dominio 6. Altri limiti all’approccio tradizionale CALCOLO DEI PREDICATI E INFERENZA LOGICA1. Il calcolo dei predicati e la rappresentazione della conoscenza 3. I problemi connessi al calcolo dei predicati nell’elaborazione della conoscenza APPROCCI COMPUTAZIONALI ALLA RAPPRESENTAZIONE E AL CONTROLLO1. Il passaggio a sistemi basati sulla conoscenza 2. Il Lisp, un linguaggio per programmare sistemi basati sulla conoscenza. 3. La rappresentazione del dominio di conoscenza SISTEMI ESPERTI ED ESPERTI RISOLUTORI DI PROBLEMI1. Risoluzione di problemi basata sulla conoscenza 2. Uno schema di classificazione per i sistemi esperti 3. Il trattamento dell’evidenza incerta – Mycin
DALL’ELABORAZIONE TRADIZIONALE DEI DATI AI SISTEMI ESPERTI1. Il problema della rappresentazione I sistemi esperti hanno origine dall’elaborazione tradizionale dei dati e sono il risultato del tentativo di automatizzare alcuni dei principali aspetti del processo informativo umano. Un elaboratore ha generalmente il compito di trasformare una sequenza di simboli in ingresso in una sequenza di simboli in uscita. L’elaboratore d’altro canto non ha alcuna cognizione di quello che sta facendo ma si limita ad imitare delle operazioni che noi poi interpretiamo nella realtà. Il problema che a questo punto si pone deriva dal fato che le trasformazioni primitive sono valide soltanto se le sequenze fornite in input sono nel formato adatto e le sequenze di output sono interpretate correttamente. Entrambe queste attività sono di natura umana quindi il problema è, essenzialmente, di rappresentazione. Dobbiamo quindi definire un formalismo valido, in modo da presentare all’elaboratore delle sequenze di simboli che definiscano in maniera non ambigua ciò che intendiamo e parimenti determinare le trasformazioni primitive in modo tale che una volta eseguite forniscano delle sequenze in uscita che abbiano per noi un significato non ambiguo. L’elaborazione tradizionale è pertanto resa possibile dalla definizione di rappresentazioni adeguate, sia per i dati che vogliamo manipolare, sia per la sequenza di operazioni che desideriamo svolgere. La scelta della rappresentazione risulta quindi essere cruciale in quanto determina quali tipi di processo conoscitivo possano essere adattati o meno all’automazione. Il processo conoscitivo di un esperto attinge ad ampie fonti d’informazione, alcune delle quali possono essere incomplete e presentate in molte forme diverse. Il processo grazie al quale un esperto sceglie, sintetizza e trasforma i dati iniziali è poco noto. Da ciò la necessità di rappresentare le caratteristiche essenziali del modo in cui avviene l’approccio e la risoluzione di un problema da parte dell’esperto. Le tecniche tradizionali di rappresentazione sono risultate inadeguate a far fronte a questi problemi; da ciò il rischio, impostoci dai nostri limiti di rappresentazione, di raggiungere un punto morto. Con successo però da diversi anni il problema della rappresentazione è stato esaminato nel campo dell’Intelligenza Artificiale. Torna all'inizio2. La rappresentazione della conoscenza Gli esseri umani hanno «conoscenza» del mondo in cui vivono che si divide in due grandi categorie:
La conoscenza di oggetti e delle loro relazioni ci pone in condizione di classificarli e di stabilire le connessioni reciproche (fatti). Un altro tipo di conoscenza, le regole, rende possibile specificare come inferire nuove istanze di una classe, o nuove istanze di una relazione, da oggetti non ancora classificati. Naturalmente la rappresentazione di certi processi conoscitivi richiederà un insieme di regole molto ampio e complesso, e gli esperti finiscono con l’utilizzare regole o procedimenti non comprensibili a coloro che non sono esperti. In alcuni casi l’esperto stesso può non comprendere realmente i procedimenti che di fato svolge nel formulare un giudizio. Si sono finora introdotte due componenti fondamentali di un processo conoscitivo, i fatti e le regole. Un terzo requisito è una struttura di controllo che determini le modalità di applicazione delle varie regole. Fondamentalmente, una struttura di controllo permette di decidere quale sarà la prossima regola da utilizzare durante il processo. Le regole potrebbero essere prese in sequenza o potrebbe rendersi necessario qualche sottosistema di regole per decidere quali altre regole siano da applicare (regole di livello superiore o metaregole). Il meccanismo di applicazione di una determinata regola in situazioni caratterizzate da una scelta è anch’esso un problema di strutture di controllo. In certi punti siamo di fronte ad una scelta; da ciò la necessità si possedere un metodo adeguato, determinato dalla struttura di controllo, per la scelta della via da seguire. In conclusione per descrivere un processo conoscitivo possiamo utilizzare:
Il limite tra le due è molto flessibile. In generale, quanta minore è la conoscenza che dichiariamo, tanto più sarà necessaria una conoscenza procedurale e viceversa. Torna all'inizioIl primo compito da affrontare implica, quindi, la classificazione di tutti gli oggetti che devono essere manipolati dall’elaboratore. Questa classificazione è, in realtà, la costruzione di relazioni tra singoli simboli computazionali e singoli oggetti esterni o idee. L’atto di porre relazioni stabilisce connessioni tra oggetti già classificati. In genere si ottiene una classificazione di oggetti simili fornendo un’etichetta (o nome variabile) e un indice. L’etichetta fornisce una classe e l’indice un’occorrenza, o istanza, di quella classe. Per definire le relazioni si usa un approccio piuttosto simile a quello usato per la classificazione; vengono infatti usati un’etichetta e un indice. Ancora una volta l’etichetta stabilisce la relazione e l’indice ne definisce un’istanza. Entrambe queste definizioni possono essere fatte agevolmente con i comuni linguaggi di programmazione mediante l’uso di strutture dati convenzionali come gli array. Le procedure, in un secondo tempo, creano nuove istanze di relazioni e classi a partire da quelle esistenti. E’ da notare quindi l’influenza delle nostre definizioni di classificazione e relazione sulle costruzioni di procedure. E’ importante sottolineare che l’elaborazione tradizionale non può creare nuove classi o nuove relazioni – queste vengono tutte definite durante la scrittura del programma – ma solo istanziare classi o relazioni esistenti. Per far ciò si utilizzano costrutti artificiali comuni dei linguaggi di programmazione tradizionali quali DO…WHILE, FOR…DO, REPEAT…UNTIL, ecc. Torna all'inizio4. Una struttura di controllo alternativa – I SISTEMI DI PRODUZIONE Quale struttura di controllo potremmo adottare? Una possibile è offerta dal sistema di produzione. Un sistema di produzione consta dei tre elementi definiti in precedenza:
Le classificazioni e le relazioni vengono denominate «base di dati», che contiene in sostanza la conoscenza dichiarativa. Le procedure sono un insieme di regole del tipo:
La struttura di controllo determina quale regola venga verificata in seguito, ed è spesso definita un interprete di regole. La (condizione) è una prova dello stato corrente della base di dati e l’(azione) aggiorna in un certo modo la base dati. Oltre all’approccio fondato sulla regola di produzione, sono possibili molte altre strutture di controllo, e la ricerca nel campo dell’Intelligenza Artificiale ha portato alla scoperta di un certo numero di approcci diversi. Un punto importante concerne la relazione tra la struttura di controllo e il dominio di conoscenza. Torna all'inizio5. Le strutture di controllo e la dipendenza dal dominio Spesso la struttura di controllo è indipendente dal dominio. In altre parole questo significa che il suo modus operandi non dipende dalla conoscenza del dominio in esame. Tali strutture di controllo sono semplici e chiare, e ci mettono in grado di separare nettamente la conoscenza sull’applicazione (cioè la base dati comprensiva di fatti, relazioni e regole) dall’operazione considerata. In molti problemi reali ciò non è facilmente conseguibile e può non essere desiderabile. Un semplice esempio di dipendenza dal dominio si riferisce all’effetto prodotto dal contesto. In molti problemi, certe serie di regole possono essere applicate solo in circostanze o contesti determinati. Torna all'inizio6. Altri limiti all’approccio tradizionale Vi sono altre difficoltà, associate all’elaborazione tradizionale dei dati, che pongono restrizioni alla determinazione della linea di demarcazione tra l’elaborazione della conoscenza da parte dell’uomo e da parte dell’elaboratore. Le più importanti sono quelle relative ai dati inferiti, al ragionamento inesatto e a soluzioni del problema che non possono essere formulate come algoritmi convenzionali. Torna all'inizio
Torna all'inizio
Torna all'inizioCome si è potuto constatare si ha la necessità di disporre di modi migliori per:
Si deve quindi cercare di spostare in avanti, per quanto concerne l’elaborazione della conoscenza, la linea di demarcazione fra la conoscenza umana e quella dell’elaboratore. Superare il tradizionale approccio algoritmico così da poter adattare all’automazione attività di elaborazione che si ascrivono agli esperti. Torna all'inizioCALCOLO DEI PREDICATI E INFERENZA LOGICA1. Il calcolo dei predicati e la rappresentazione della conoscenza Nel campo dei sistemi esperti è stata condotta durante gli ultimi venti anni un’ampia ricerca all’interno della disciplina dell’Intelligenza Artificiale, che ha tra i suoi principali obiettivi la progettazione di programmi capaci d’intraprendere attività per le quali veniva ritenuto necessario l’intervento dell’intelligenza umana. Le origini di tal iniziativa risalgono comunque più indietro, ad una delle prime discipline accademiche: la logica. La logica si occupa criticamente della validità delle argomentazioni, cioè dei metodi atti a determinare se sia possibile trarre validamente conclusioni da fatti assunti. La logica è, inoltre, pertinente alla programmazione, dal momento che un programma è in realtà un insieme di asserzioni quasi logiche che vengono sottoposte a certi procedimenti in modo da generare una conclusione. All’interno della logica la nozione di «argomentazione vera» ha un significato preciso e ben definito: un’argomentazione è considerata vera se e solo se, qualora le sue premesse siano vere, le conclusioni tratte sono anch’esse vere. D’altronde la logica, dati i molti anni di sviluppo alle spalle , fornisce sia un formalismo ben definito e facilmente comprensibile per rappresentare dei fatti, sia regole per manipolarli. All’interno del calcolo dei predicati i nomi delle relazioni vengono definiti «predicati» e gli oggetti vengono definiti «argomenti». Un oggetto può essere espresso o con una «costante» indicando così un particolare individuo o classe di individui, o con una «variabile», indicando che l’individuo o la sua classe di individui rimangono non specificati. Quando in una variabile si inserisce il nome di un oggetto (diviene, cioè, una «costante»), la variabile si dice «istanziata». Singole proposizioni, chiamate «atomiche», consistenti ognuna di un predicato e degli argomenti correlati, possono essere combinate per formare proposizioni composte mediante l’uso di «connettivi logici». Questi includono «e» (Ù ), «o» (Ú ), «non» (Ø ) e «implica» (® ). Perché il calcolo dei predicati possa sottoporre a procedimento delle variabili, è necessaria una struttura supplementare nota come «quantificatore». Esistono due tipi di quantificatori: il «quantificatore universale», simboleggiato da «" », e il «quantificatore esistenziale», simboleggiato da «$ ». Un’ultima considerazione da fare è che la funzione dei connettivi logici e dei quantificatori nella costruzione di proposizioni composte da proposizioni semplici («atomiche») è governata da regole ben definite, denominate «regole di formazione». Queste mantengono il significato dell’insieme di proposizioni pur mutandone la struttura. Tali proposizioni composte, formate correttamente, vengono definite «formule ben formate» o in forma abbreviata «fbf». Torna all'inizioPer elaborare la conoscenza utilizzando il calcolo dei predicati è essenziale che si sia in condizione di prendere un dato insieme di fatti e regole e di inferirne di nuovi. Inoltre sarebbe desiderabile far questo in modo tale da poter essere sicuri della validità della nuova informazione. Si ha così bisogno di regole di livello superiore che all’interno della logica vengono definite «regole di inferenza». La prima di queste è la regola «modus ponens»
Un’altra regola è chiamata «specializzazione universale»
Esistono, all’interno del calcolo dei predicati, molte regole d’inferenza diverse che in questo ambito non menzioneremo. Torna all'inizio3. I problemi connessi al calcolo dei predicati nell’elaborazione della conoscenza Il calcolo dei predicati è detto «monotono» intendendo con ciò che le conclusioni sono aggiuntive e non necessitano mai di essere riesaminate. Nella vita reale dobbiamo spesso modificare o ritrarre delle conclusioni quando si rendono disponibili dei fatti nuovi. I sistemi formali che ci pongono in condizione di farlo si dicono «non monotoni». Per quanto riguarda l’automazione, un approccio non intelligente che non verrebbe mai adottato nella pratica, consisterebbe nell’applicare le regole d’inferenza alla cieca nella speranza che emerga alla fine una «dimostrazione». Tuttavia non sarebbe realistico, con un procedimento così semplicistico, aspettarsi che il programma funzioni in tempo reale. Tanto per cominciare, molte delle dimostrazioni dipendono dall’adozione, a un certo punto, di nuovi assunti, in modo da rendere possibile l’applicazione di una regola in uno stadio successivo. Sarebbe pertanto necessario che l’elaboratore avesse delle aspettative sulle azioni future. Un secondo problema è dato dal fatto che l’applicazione cieca di alcune regole d’inferenza perfettamente valide porterebbe a una «esplosione combinatoria». Apparirà pertanto evidente, allo scopo di adattare all’automazione dimostrazioni di calcolo dei predicati, la necessità di definire un procedimento, per decidere quali regole applicare, che impedisca un’esplosione combinatoria e comporti un ragionamento non combinatorio. Negli anni ’60, sia nel campo della logica che dell’Intelligenza Artificiale, è stata svolta un’intensa attività diretta alla scoperta di tali procedure efficaci, come vengono definite. Questi approcci presero due direzioni distinte:
Torna all'inizioAPPROCCI COMPUTAZIONALI ALLA RAPPRESENTAZIONE E AL CONTROLLO1. Il passaggio a sistemi basati sulla conoscenza L’approccio all’elaborazione della conoscenza da cui si sviluppò la tecnologia dei sistemi esperti differì da quello perseguito dai logici nel fatto che cercò delle tecniche per il controllo dell’inferenza che fossero specifiche ad un particolare dominio di conoscenza. Per avvicinarsi all’esecuzione umana, era necessario codificare in sistemi una considerevole parte di conoscenza del dominio. Il fatto che si sia spostata l’enfasi dai problemi relativi alla costruzione di efficaci «motori inferenziali» d’uso generale a quelli relativi all’automazione della conoscenza umana ha portato inevitabilmente a un nuovo complesso di interessi. La rappresentazione della conoscenza è solo uno dei problemi che sono alla base della programmazione della conoscenza. La facilità con cui un problema può essere risolto è in parte riferibile alla misura in cui può essere scomposto in un certo numero di sottoproblemi più semplicemente risolubili. Torna all'inizio2. Il Lisp, un linguaggio per programmare sistemi basati sulla conoscenza. I progettisti necessitavano di un linguaggio che fosse più flessibile di quelli convenzionali; per sviluppare tale necessità fu sviluppato il Lisp, un nuovo e funzionale linguaggio di programmazione. Il Lisp è basato sul lavoro svolto da McCarthy, nel corso degli anni ’60, sul calcolo non numerico. Da allora è stato soggetto a un notevole sviluppo ed ora è la lingua franca dell’Intelligenza Artificiale. L’acronimo Lisp sta per LISt Programming language. Torna all'inizio3. La rappresentazione del dominio di conoscenza
Torna all'inizio
Torna all'inizio
Torna all'inizioI problemi del controllo nel campo dell’Intelligenza Artificiale vengono solitamente espressi in riferimento al concetto di ciò che viene definito come una «ricerca nello spazio degli eventi». Nella risoluzione di problemi basati sulla conoscenza non si ha, di solito, un metodo unico ed evidente per raggiungere una soluzione. Sarà così necessario esplorare diversi possibili percorsi, cercando di valutare ad ogni stadio le possibilità di successo. La struttura di controllo di un sistema di risoluzione di un problema definisce la strategia generale per scegliere dei percorsi. L’approccio del tipo «ricerca nello spazio degli stati» deve molto a un precoce interesse nel gioco automatico. L’insieme di tutte le scelte possibili può venir rappresentato come un albero che si estende da una radice, lo stato iniziale, fino a un insieme di stati finali che rappresenta l’obiettivo. Persiste un problema potenzialmente serio nel risolvere un problema conducendo una ricerca esaustiva dello spazio degli stati. Nella maggior parte delle situazioni d’elaborazione della conoscenza spesso non è possibile trovare delle regole che garantiscano il successo. Frequentemente è possibile, tuttavia, trovare delle regole che aumentino le probabilità di successo. Tali regole si chiamano «euristiche», e una ricerca che ne comporti l’uso si chiama una «ricerca euristica». Normalmente, una ricerca euristica ha bisogno d’accedere a un’informazione che le dica se e quanto stia agendo bene. Quest’informazione viene ricavata da una «funzione di valutazione». Molta parte dell’attività svolta sulle strutture di controllo nel campo dell’Intelligenza Artificiale è stata dedicata a far fronte a queste complesse situazioni. Due strategie generali applicate con notevole successo ai sistemi esperti sono:
L’applicabilità di strategie di controllo diverse è legata in grandissima misura alla struttura del dominio di conoscenza e può così essere meglio considerata nel contesto di un problema specifico. Il processo di progettazione di sistemi basati sulla conoscenza può essere visto come un esercizio nell'identificare delle caratteristiche del dominio che porranno il problema in condizione di essere organizzato in modo tale da minimizzare il calcolo. Torna all'inizioSISTEMI ESPERTI ED ESPERTI RISOLUTORI DI PROBLEMI1. Risoluzione di problemi basata sulla conoscenza Passaggio dall’obiettivo di trovare alcuni metodi efficaci e di scopo generale per risolvere problemi a quello di meccanizzare la conoscenza di dominio effettivamente usata da esperti umani per risolvere problemi complessi. Il progetto che aprì la strada a questo mutamento fu Dendral. Il gruppo di ricerca Dendral si costituì all’università di Stanford nel 1965 per lavorare sulla progettazione di un sistema con lo scopo di aiutare i chimici ad inferire la struttura di composti chimici da dati spettrali di massa. L’incorporazione di un esplicito dominio di conoscenza in programmi di risoluzione di problemi si dimostrò di grande importanza pratica e teorica. Benchè la programmazione della conoscenza sia apparsa sin dal 1965 di grande importanza per una gamma molto ampia d’applicazioni, l’approccio ha continuato ad avere successo soprattutto per la risoluzione di problemi in campi che richiedono una notevole quantità di conoscenza personale da esperti. I sistemi d’elaborazione che meccanizzano tale conoscenza da esperti sono divenuti generalmente noti come «sistemi esperti». I punti principali della saggezza convenzionale sono stati elencati da Davis, uno studioso eminente in questo campo, come:
I principi di cui sopra forniscono un efficace punto di partenza per la progettazione di sistemi esperti. Esistono tra l’altro alcuni criteri che identificano le tecniche esistenti e derivanti dal gruppo Dendral.
Esistono altri due criteri, discendenti dai precedenti, per la scelta dei compiti.
Torna all'inizio2. Uno schema di classificazione per i sistemi esperti Una relazione di Stefik e dei suoi colleghi presenta uno schema per la classificazione dei sistemi esperti. Si tratta di un ampio schema che organizza i sistemi in base al grado di capacità nell’affrontare problemi che non siano «ben strutturati», cioè che non sia adatto ad un’efficace risoluzione automatica. Data la rappresentazione di problemi in forma di spazio degli stati:
Vantaggi:
Torna all'inizio3. Il trattamento dell’evidenza incerta – Mycin
Torna all'inizio
Torna all'inizio
Torna all'inizio
Torna all'inizioLa struttura di controllo consiste di un motore inferenziale per il concatenamento in avanti o a ritroso insieme a una struttura di conoscenza che pone il sistema in condizione di decidere quali regole applicare successivamente. L’ordine in cui le regole sono applicate non ha importanza. Tutte le regole pertinenti vengono applicate finché una regola particolare non giunge ad una conclusione certa, nel qual caso le regole restanti vengono ignorate. La pertinenza di una regola viene definita dalla struttura di controllo dipendente dal dominio. Mycin fa uso principalmente del concatenamento a ritroso, benché alcune regole siano definite per essere applicate solo mediante concatenamento in avanti. La conoscenza del controllo dipendente dal dominio è memorizzata come un albero di contesto. Quest’albero organizza le terne nella base di conoscenza in una gerarchia ed è utilizzato per dirigere il flusso della consultazione. La radice dell’albero è il punto di partenza per la scelta di obiettivi iniziali che il sistema tenterà di soddisfare. L’albero è una gerarchia di tipi di contesto (o schemi), e le terne reali che esistono o vengono create durante la consultazione formano una struttura che imita quella dell’albero di contesto. Una regola si riferisce sempre ad un tipo di contesto e le regole vengono raggruppate insieme in gruppi di regole definiti da un insieme di tipi di contesto applicabili. Tutte le regole che appartengono a un gruppo di regole che si riferisce a un contesto d’interesse sono prese in considerazione per essere attivate. L’albero di contesto, col definire relazioni gerarchiche tra raggruppamenti di contesti e di parametro, guida in tal modo l’interprete delle regole durante la consultazione. Inoltre, dal momento che l’albero di contesto riflette la relazione esistente tra gli oggetti nel dominio, è d’aiuto nel fornire un sistema di consultazione che sia familiare all’utente. Torna all'inizioLa sequenza di domande poste al medico utente dipenderà dalle istanziazioni correnti della base dati. Le domande vengono poste quando la regola fallisce, allo scopo di determinare dell’informazione necessaria, o quando l’informazione viene definita come proveniente da necessità dell’utente (cioè dati di laboratorio). Il progettista ha un certo controllo sul modo in cui l’informazione viene estratta. Una domanda, se non è stata compresa, può essere elaborata, permettendo così la creazione di gruppi diversi di domande per gli utenti esperti o inesperti. Il progettista del sistema deve provvedere a un’accettabile interfaccia utente. Questo aspetto di Mycin non risulta essere interamente soddisfacente. Torna all'inizioMycin ha uno strumento per spiegare e giustificare la propria esecuzione; tale strumento è anche utile in situazioni educative. In qualsiasi momento l’utente può interrogare il sistema su COME o PERCHE’ abbia raggiunto una decisione, il compito di fornire tali «spiegazioni» viene semplificato sfruttando l’architettura basata su regole. Quando gli viene chiesto PERCHE’ elenca dapprima la parte della regola contenete l’azione. Quindi elenca le premesse già istanziate e infine le premesse che si richiede siano istanziate dalla domanda. L’uso ripetuto di PERCHE’ viene interpretato come una richiesta di mostrare la regola successiva nella catena di ragionamento corrente. COME agisce nella direzione opposta. Pur essendo uno strumento efficace è limitato ad esaminare le immediate vicinanze dello stato di ragionamento di Mycin durante la consultazione. Non vi è alcuna esplicita conoscenza causale del dominio di interesse. Torna all'inizioLa forma di rappresentazione basata su regole di produzione è ideale per un’area d’interesse in cui vi sia un’importante conoscenza empirica che debba ancora essere codificata in una struttura formale e di principi. Questo è sicuramente il caso del campo della diagnosi e del trattamento di infezioni di cui si occupa Mycin. Oltre alla possibilità d’integrare tipi diversi di conoscenza , si può elaborare una miscela «povera» di fatti mediante l’aggiunta di un componente numerico, il quale esprime il grado di relazione che si crede esista tra loro (fattore di certezza). L’architettura del sistema di produzione e il sistema di considerazione probabilistica si è dimostrata di notevole successo per quanto riguarda il suo utilizzo nella risoluzione di problemi diagnostici all’interno di aree d’interesse in cui predomini la conoscenza empirica. Vi sono tuttavia dei punti deboli. In primo luogo, ad esclusione dell’albero di contesto, ogni struttura causale o tassonomica all’interno della conoscenza codificata nelle regole di produzione non viene esplicitamente rappresentata, e così non è né visibile all’utente né direttamente disponibile per l’elaborazione. Un secondo problema è che, mentre il semplice processo di ragionamento è progettato per essere comprensibile ad un utente, non è finalizzato a modellare i processi realmente adottati dagli esperti umani. Il risultato è che un approccio di questo tipo sono efficacissimi per delle diagnosi all’interno di aree d’interesse ristrette e ben definite dove l’utente abbia già un’idea ragionevole della soluzione. Sono meno efficaci nei casi in cui le soluzioni siano molto complesse o l’utente sta lavorando con una relativa ignoranza delle soluzioni possibili. Torna all'inizio |
"Le cose importanti non si trovano mai negli incartamenti"J. W. Goethe
|
Inviare a dolphin group un messaggio di
posta elettronica contenente domande o commenti su questo sito Web.
|