Softcomputing e applicazioni embedded

Softcomputing è il termine creato qualche decennio fa per distinguere una serie di metodologie di elaborazione a base linguistica (reti neurali, logica fuzzy, algoritmi genetici, ecc.) da quelle metodologie a base matematica e logica (algoritmi) contrassegnate con il termine hardcomputing. Le due metodologie più note e applicate, soprattutto in ambito di sistemi embedded, sono le reti neurali artificiali e la logica fuzzy. Queste metodologie di elaborazione dell'informazione sono ispirate a modelli biologici come il cervello (reti neurali) e suoi meccanismi decisionali (logica fuzzy), imitandone il funzionamento e soprattutto le peculiarità. In particolare, la capacità di apprendere e la capacità di generalizzare, sono due peculiarità particolarmente interessanti per lo sviluppo di sistemi embedded, in quanto consentono di soddisfare uno dei requisiti fondamentali di tali sistemi: operare senza essere assistiti dall'uomo. A differenza dei sistemi non embedded, i sistemi embedded sono caratterizzati da requisiti funzionali molto stringenti come il basso consumo di energia, poco spazio per la memorizzazione del codice di programma e dei dati, operatività in tempo reale e soprattutto viene sempre più richiesta la resistenza ai guasti (fault-tolerant). Attualmente la maggior parte dei sistemi embedded utilizzano metodologie di elaborazione hardcomputing, cioè algoritmi matematico/logici e modelli computazionali deterministici. La capacità decisionale di tali sistemi dipende strettamente da quanto nella fase di sviluppo il progettista sia stato capace di includere nel modello matematico/logico (ammesso che fosse stato possibile) la tolleranza alla variabilità dei dati cui il sistema embedded risulterà sottoposto quando funzionerà in campo. Per esempio, un sistema Abs può essere implementato con modelli di controllo automatici classici, considerando la sua funzione principale, cioè non bloccare mai le ruote. Questa implementazione non prevede però il controllo quando per esempio si perde una ruota e il conducente tenta di frenare. Questa infatti è una situazione non prevista e l'implementazione hardcomputing dell'Abs non è in grado di gestirla. L'implementazione softcomputing è invece capace di gestire anche situazioni non previste nella fase di sviluppo, grazie alla sua capacità intrinseca di generalizzare la conoscenza acquisita alla stessa maniera di come un essere umano è capace di reagire più o meno efficacemente rispetto a situazioni che non aveva mai affrontato prima (di cui cioè non aveva esperienza pregressa). Le altre esperienze immagazzinate concorrono a derivare una soluzione che meglio si adatta al problema sconosciuto. Le metodologie softcomputing non sono tecniche di intelligenza artificiale, ancora troppo complesse per essere utilizzate e applicate nei sistemi embedded. Sono invece metodologie che conferiscono al sistema embedded la capacità di reagire a situazioni variabili senza che una persona possa aiutarlo a farlo. In particolare, le metodologie softcomputing conferiscono al sistema embedded caratteristiche di affidabilità, autonomia, facilità di modellazione, economicità funzionale. Grazie a queste caratteristiche, i sistemi embedded che utilizzano le metodologie softcomputing per la loro implementazione, non solo risultano più versatili e affidabili, ma consentono anche di ridurre i costi di sviluppo e progettazione, altre ai costi di funzionamento in campo.

La logica fuzzy
La logica fuzzy (fuzzy-logic) è la metodologia softcomputing più semplice da implementare sui sistemi embedded, in quanto si tratta di un processo di elaborazione delle informazioni basato su un meccanismo di valutazione ponderata di regole di natura linguistica del tipo:

“se la temperatura è alta raffredda moderatamente”

Termini come “alta” e “moderatamente” sono le cosiddette misure “fuzzy” delle informazioni fisiche (per esempio la temperatura) dette misure “crisp”. Apparentemente le misure fuzzy delle informazioni fisiche sembrano imprecise, ma in realtà è proprio questa apparente imprecisione che rende la misura stessa e il processo fuzzy di elaborazione particolarmente robusto ed efficace. Infatti, uno dei problemi principali dei modelli di elaborazione hardcomputing (per esempio i sistemi di controllo automatici classici) hanno proprio nella precisione dei valori di misura la principale causa di instabilità. Gli esseri umani non sono computer in grado di elaborare algoritmi matematici di calcolo per eseguire compiti e prendere decisioni, ma si comportano meglio di un computer quando devono eseguire i passi di una ricetta per preparare una pietanza. La ricetta è piena di misure e azioni approssimative come “un pizzico di sale”, “una tazza di zucchero”, “amalgamare bene”, ecc. Malgrado questa imprecisione delle misure e delle azioni da svolgere, se l'esperienza del cuoco è buona, il risultato è ottimo.
L'”esperienza” è l'altro elemento caratterizzante della metodologia fuzzy. L'esperienza viene trasmessa da un “esperto” che suggerisce all'esecutore le “regole” di interpretazione delle misure fuzzy:

“se l'impasto si indurisce rapidamente impastare energicamente”

Una terza caratterizzazione del ragionamento fuzzy è la classificazione della misura crisp in termini fuzzy: quando una temperatura è alta? A 70°, a 80° oppure a 90°? La misura fuzzy “alta” non è un numero, ma una funzione (detta funzione di appartenenza) che definisce, data la misura crisp, il grado di “qualificazione” della misura con il termine “alta”. Per esempio, 70° è una temperatura da ritenersi “alta” al 90% ma anche “bassa” al 15%. La nota espressione “bicchiere mezzo pieno” e “bicchiere mezzo vuoto” che per la logica booleana ha semplicemente il significato di “bicchiere completamente pieno” e “bicchiere completamente vuoto”, per la logica fuzzy ha un significato più sfumato, cioè che c'è una tendenza al riempimento (ma non è completamente pieno) e che c'è una tendenza allo svuotamento (ma non è completamente vuoto). L'azione di controllo che consegue dalla logica booleana è drastica (svuotare rapidamente o riempire rapidamente), mentre quella della logica fuzzy è ponderata (svuoto in maniera adeguata al grado di pieno o riempio in maniera adeguata al grado di pieno). Se la condizione è per esempio di 49,9% della capacità, l'azione di riempimento deve essere particolarmente lieve per non innescare un meccanismo di oscillazione (instabilità) intorno al punto di equilibrio (50%).
Una funzione di appartenenza (membership function) è una rappresentazione della conoscenza dell'esperto. Questa non va confusa con una distribuzione di probabilità in quanto l'elaborazione fuzzy logic non è elaborazione statistica, ma deterministica, anche se non di natura “matematica”, ma logica. Non si tratta nemmeno di logica “booleana” in quanto le misure fuzzy possono avere tutti i valori tra 0 e 1 e la logica combinatoria di tali valori produce risultati fuzzy (quindi qualsiasi valore compreso tra 0 e 1). Dato che le misure fuzzy non sono direttamente applicabili al mondo fisico (forza, spostamento, calore, ecc.) il risultato dell'elaborazione fuzzy logic richiede un processo di defuzzificazione che trasforma (applicando in maniera inversa il concetto di funzione di appartenenza) la decisione fuzzy in una misura fisica crisp.

Le reti neurali
Le reti neurali artificiali sono sistemi di elaborazione dell'informazione softcomputing maggiormente ispirate al modello biologico degli esseri viventi dotati di sistema nervoso. Il modello di elaborazione delle reti neurali è completamente differente da quello hardcomputing, ma anche completamente differente dal modello di elaborazione della fuzzy logic.
Una rete neurale impara ad eseguire un determinato processo di elaborazione delle informazioni attraverso meccanismi di apprendimento basati sulla ripetizione di cicli di elaborazione delle informazioni e correzione dei risultati prodotti. A differenza della logica fuzzy cui l'esperto fornisce una descrizione linguistica del modello di elaborazione, alla rete neurale artificiale l'esperto è in grado di indicare solo se la risposta a un determinato input è corretta o sbagliata ed eventualmente di quanto sia sbagliata. L'apprendimento della rete neurale artificiale dipende dai meccanismi interni alla stessa, cioè da come questa è in grado di rappresentare la risposta a un ingresso (interconnessioni). Apparentemente una rete neurale opera come una memoria indirizzabile tramite la codifica dell'ingresso, ma in realtà la risposta a un input data dalla rete neurale non è memorizzata, ma ricostruita attraverso la concorrenza di innumerevoli pezzi di informazioni che, durante la fase di apprendimento, la rete neurale artificiale ha configurato internamente. A differenza di una memoria che restituisce in uscita solo i dati di cui sono stati definiti gli input, la rete neurale artificiale, grazie al suo modo di rappresentare l'informazione internamente, è in grado di fornire in uscita risposte corrette a input su cui non è stata mai addestrata. È cioè in grado di generalizzare, capacità questa completamente assente nel modello di elaborazione hardcomputing. Una rete neurale artificiale consiste di neuroni interconnessi tra loro in modo da realizzare percorsi di attraversamento dall'ingresso all'uscita diversi per ogni input e tali che, quando la rete neurale artificiale è completamente addestrata, a ogni input consegue l'output corrispondente alla corretta risposta a quello specifico input. Il neurone di una rete neurale artificiale è un elemento di elaborazione non di natura aritmetico-logica come per l'hardcomputing, ma semplicemente somma un certo numero di stimoli provenienti dagli altri neuroni e, se questi sono sufficientemente intensi propaga tali stimoli agli altri neuroni cui è a sua volta connesso. La fase di apprendimento di una rete neurale consiste nel rafforzamento o nell'indebolimento delle connessioni tra i neuroni in funzione dell'entità dell'errore che l'esperto (supervisor) evidenzia alla rete dall'esterno. È la rete che internamente si automodifica in modo da minimizzare l'errore in uscita. Come recita il teorema di Hecht-Nilsson, qualsiasi funzione può essere eseguita da una rete neurale artificiale con almeno tre livelli di interconnessione e un numero sufficiente di neuroni. Ciò significa che con una rete neurale è possibile realizzare qualsiasi funzione se si dispone di un sistema capace di implementarla in termini dimensionali e di velocità di esecuzione.

Gli algoritmi genetici
Gli algoritmi genetici derivano, come le reti neurali, dal modello biologico. Questi sono modelli di elaborazione che producono un risultato sulla base di principi di selezione naturale ed evoluzione, quindi senza affidarsi ad algoritmi matematici o logici. Gli elementi computazionali di un algoritmo genetico sono i “geni” e un meccanismo che consente gli incroci tra i geni e la valutazione di quanto questi siano adatti a rappresentare la soluzione cercata. I geni sono una rappresentazione dell'informazione nota, non esaustiva di tutta la possibile informazione relativa al problema da risolvere, ma che tramite processi di mutazione e ricombinazione, può portare, in tempi più o meno rapidi a trovare una combinazione di geni ottimale relativamente al problema da risolvere. Al contrario degli algoritmi di ricerca hardcomputing, quelli softcomputing di natura genetica non hanno bisogno di verificare tutte le possibili soluzioni, quindi convergono più rapidamente. Inoltre possono avere una conoscenza della problematica molto scarsa o addirittura nulla. Per esempio, un algoritmo genetico può essere utilizzato per eseguire la messa a punto delle regole e delle funzioni di appartenenza di un sistema fuzzy logic. I geni sarebbero le regole e le funzioni di appartenenza quelle che una persona poco esperta può aver fornito per il sistema fuzzy. L'algoritmo genetico può consentire al sistema fuzzy di evolvere verso una configurazione ottimale (non necessariamente ottima) anche se non si dispone di un vero esperto per il trasferimento della conoscenza nelle regole e nelle funzioni di appartenenza. Affiancando un algoritmo genetico a una sistema fuzzy logic, è possibile conferire a questo la capacità di configurarsi in maniera ottimale relativamente a una certa applicazione, pur non disponendo dell'esperto per il trasferimento della conoscenza. La conoscenza viene acquisita in modalità evolutiva.

I sistemi embedded intelligenti
Reti neurali e logica fuzzy, e più in generale i metodi di elaborazione softcomputing dell'informazione, sono più vicini alla natura e ai requisiti dei sistemi embedded di quanto lo siano i metodi di elaborazione hardcomputing, ancorché questi siano per il momento la metodologia di sviluppo dominante per i sistemi embedded. Uno dei principali requisiti dei sistemi embedded è quello di resistere ai guasti, quindi di continuare a funzionare anche in condizioni che determinano dati incerti. La capacità di generalizzazione della logica fuzzy e delle reti neurali artificiali garantisce sempre questo comportamento, garantendo, da parte del sistema, una risposta adeguata in qualsiasi situazione.
La tolleranza ai guasti non è solo software, ma anche hardware. Per esempio, se alcuni neuroni di una rete neurale si danneggiano, la rete neurale globalmente continua a funzionare soddisfacentemente, in quanto l'informazione e il modello funzionale derivato dall'apprendimento sono distribuiti e non concentrati come in un sistema hardcomputing. In un sistema hardcomputing, per esempio, è sufficiente che una sola cella di memoria si danneggi perchè l'intero sistema embedded si blocchi.
Un'altra peculiarità del softcomputing che soddisfa i requisiti dei sistemi embedded è l'intrinseca stabilità del modello computazionale. Una rete neurale artificiale o un sistema fuzzy logic sono sempre stabili indipendentemente dalla loro complessità, mentre, come è noto, il rischio di instabilità dei sistemi hardcomputing cresce molto rapidamente al crescere della complessità del modello computazionale utilizzato.
Questa peculiarità del softcomputing, oltre a rendere più affidabile il sistema embedded, consente di realizzare funzionalità molto interessanti come l'autoapprendimento (quindi l'adattatività all'ambiente circostante) e soprattutto l'implementazione di sistemi di cui è difficile o addirittura impossibile derivare un modello funzionale matematico o logico.

I microcontrollori fuzzy

Fuzzy logic e reti neurali artificiali sono processi di elaborazione delle informazioni intrinsecamente paralleli. I microcontrollori, componenti fondamentali dei sistemi embedded, sono di natura sequenziale e basati su un'unità aritmetico-logica poco rappresentativa delle operazioni tipiche dei processi computazionali del softcomputing. Per reti neurali e fuzzy logic, l'industria dei semiconduttori ha proposto componenti specifici, cioè specifiche implementazioni del modello neurale (per esempio Etann di Intel) o del modello fuzzy logic. Questi chip dedicati, pur essendo estremamente efficienti, non hanno avuto successo in quanto la versatilità del microcontrollore ha predominato.
Una rete neurale con un'architettura di sistema è VindAX di Axeon, che oltre a implementare una sofisticata rete neurale, implementa anche un'altrettanto sofisticata logica di interfaccia e controllo della rete neurale. Realizzata in tecnologia 0.18 micron sviluppa una potenza di calcolo equivalente a 130000 Mips a 200 MHz.
Una versione di microcontrollore dotato di istruzioni fuzzy logic fu realizzato da Motorola sulla base del core HC12.
Un esempio più recente è l'ST52x301 di STMicroelectronics, un microcontrollore a 8 bit che combina un processore fuzzy dedicato e una unità aritmetico-logica (ALU) per le operazioni booleane e aritmetiche. Grazie alle possibilità di integrazione di natura SoC, il dispositivo a doppia logica (DualLogic) integra anche numerose periferiche che consentono di far interagire il sistema embedded direttamente con il mondo fisico circostante. In particolare, il processore consente di ricevere 4 ingressi fuzzy e di produrre due uscite fuzzy. Capace di 300 regole fuzzy memorizzabili al suo interno, il sistema può implementare funzioni di controllo, di sensing intelligente e di monitoraggio di parametri fisici.

Gli ambienti di sviluppo per il softcomputing

Fuzzy logic, reti neurali, algoritmi genetici e altre metodologie softcomputing richedono, per la loro implementazione, ambienti di sviluppo specifici. Questi sono ambienti Cad che, utilizzando strumenti grafici, consentono di modellare l'applicazione utilizzando la specifica metodologia di softcomputing. Uno degli aspetti più importanti è quello della simulazione, cioè della verifica funzionale senza dover procedere alla implementazione hardware. Matlab di The Matworks è un ambiente di modellazione che supporta, tramite l'utilizzo di toolbox, reti neurali, fuzzy logic e algoritmi genetici. Esistono ambienti di sviluppo specifici come quello di FuzzyTech che consente di modellare l'applicazione fuzzy logic in tutte le sue fasi. Ci sono anche ambienti di programmazione, per esempio Fuzzy-C di Byte Craft, che consistono in un preprocessore che traduce in codifica C le descrizioni linguistiche tipiche della logica fuzzy: regole, funzioni di appartenenza e funzioni conseguenza. Il codice C generato è compilabile per qualsiasi processore.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome