LA FUZZY LOGIC (O LOGICA SFUMATA)

La tecnica che impiega la fuzzy logic fa parte dei sistemi decisionali basati su regole del tipo "if ...then...else", o più semplicemente di quei sistemi basati sulla conoscenza come i cosiddetti Sistemi Esperti. La base di conscenza di un sistema esperto è come una specie di database che anzichè essere composto di dati è composto di relazioni tra i dati intese come associazioni di conseguenze determinate da particolari condizioni di ipotesi: tutto ciò viene chiaramente espresso nelle regole tipo "if then else". E' importante dire che il programma che "aziona le regole" contenute nella "conoscenza" viene spesso chiamato motore inferenziale o reasoning engine e può essere basato su diverse tecniche di supporto alla decisione. In fig.1 si può vedere un tipico protocollo di ragionamento per un sistema esperto ibrido con la estensione delle ultime tecnologie come reti neurali e algoritmi genetici.

I Sistemi Esperti si differenziano dalla fuzzy logic per il fatto che hanno la facoltà di utilizzare il linguaggio dei simboli, ma contrariamente alla fuzzy, peccano nel dare delle risposte che siano più complesse di quelle affermative o negative. Come si può immaginare, un sistema esperto può essere basato anche solamente su regole fuzzy e quìndi è il caso di capire cosa significa ragionamento fuzzy o sfumato. Se prendiamo in esame una regola del tipo if(acqua bolle) then (butto la pasta), non vi sono sicuramente incertezze a decidere quando buttare la pasta dato che (acqua bolle) è sicuramente vero o sicuramente falso. Se prendiamo in esame invece la regola if(acqua è calda) then (abbassa la fiamma) ci troviamo di fronte a dati incerti: che cosa significa calda? E quanto si deve abbassare la fiamma? Supponendo di poter misurare la temperatura con un termometro, come faremo a decidere se quel valore rientrerà nella definizione "calda"? Dovremo iniziare a definire un range di valori in cui la temperatura può variare e dei subranges che rappresentino definizioni come "calda" o "molto calda". Appare quindi evidente che non sono i dati input a essere imprecisi ma bensì le relazioni che esistono tra input e output: nei problemi trattati con fuzzy logic infatti non esiste un facile modello matematico che collega input e output . In pratica con un motore inferenziale fuzzy si puo empiricamente sintonizzare una funzione matematica che vincola input e output, tramite regole tipo " if ...then ...".

FUZZIFICAZIONE DELL' INPUT
Il ragionamento cosiddetto sfumato dei sistemi fuzzy è dovuto al fatto che un ipotesi non è mai completamente vera nè completamente falsa ma ha un suo "grado di verita" che inciderà sulla forza con cui verrà eseguita la regola e quindi applicata la conseguenza. Il grado di verità dell ipotesi è in realtà il grado di appartenenza del valore di input a quel determinato range(es:calda) e ciò è dovuto al fatto che questi ranges non sono nettamente separati ma si sovrappongono con funzioni di appartenenza normalmente di tipo triangolare/trapeziodale, per cui un valore di una variabile di input potrebbe appartenere a due ranges con due differenti gradi di credibilità(fig.2).

Il valore 25 gradi della tempertura appartiene alla classe tiepida con un grado di appartenenza pari a 0.8 e alla classe fredda con un grado di appartenenza uguale 0.4. Come si vede, definendo delle classi triangolari o trapeziodali (le più usate) si hanno dei gradi di appartenenza che diminuiscono verso gli estremi delle classi costruendo così un inizio di quello che è un ragionamento sfumato. Quello che rappresenta la fig.2 è la operazione che viene comunemente definita "FUZZIFICAZIONE DELL INPUT", cioè trasformazione del dato preciso in dato tipo fuzzy:

dato preciso temp=25 gradi centigradi

dato fuzzy temp =tiepida con credibilità 0.8

temp = fredda con credibilità 0.4

Per realizzare matematicamente il processo di fuzzificazione bisogna effettuare alcuni semplici calcoli sulle funzioni triangolari/trapeziodali . Il primo passo da fare nel processo di fuzzificazione è uno scanning dei valori estremi di ogni classe per cui quando si ha che

limite_inf_class < x < limite_sup_class

allora x appartiene alla classe e bisogna calcolare il grado di appartenenza. Bisogna definire una pendenza , sui lati dei triangoli o dei trapezi che definiscono le classi, che sia fisso per ogni classe e che ci consenta di calcolare il grado di appartenenza di un input x alla classe y. A questo punto bisogna vedere se il valore x cade nella parte bassa della classe (pendenza positiva) o nella parte alta (pendenza negativa): per far questo è sufficente verificare se

x> oppure x < di (lim_sup-lim_inf)/2

che rappresenta il centro della classe. Nel primo caso si effettuerà il calcolo con la pendenza positivo e nel secondo con la pendenza negativo(fig.3):


1) gda = (x-lim_inf)*slope (se gda>max allora gda=max)

2) gda= (lim_sup-x)*slope (se gda >max allora gda=max)

(gda=grado di appartenenza o "degree of membership")


Bisogna precisare che questo è solamente un possibile approccio alla soluzione del problema di fuzzificazione, infatti è possibile implementare funzioni di qualunque tipo per definire il grado di appartenenza di un input ad una classe; si tratta solamente di calcolare il valore di una funzione in un particolare punto definito dal valore dell input. Inoltre si può fare in modo che la pendenza dei triangoli sia differenziabile per ogni classe e all interno di ogni classe quella di salita da quella di discesa. Si può anche effettuare il calcolo di fuzzificazione in modo differente senza calcolare il centro della classe (fig.4). Risulta evidente che quanto più complesse sono le forme delle funzioni scelte per definire le classi, tanto maggiore è la quantità di informazione che deve essere memorizzata per definire una classe e la quantità di calcoli da effettuare per ottenere un valore di "membership degree". Ad esempio la semplice scelta di differenziare le pendenze dei lati dei triangoli o dei trapezi obbliga a memorizzare tale informazione per ogni classe presente.

LA VALUTAZIONE DELLE REGOLE
Una volta che siamo in possesso di dati fuzzy provenienti dal processo di fuzzificazione
dobbiamo inserire nel motore decisionale delle regole che ci diano degli output fuzzy particolari
per particolari situazioni(fuzzy) degli input.
Una di queste regole può avere la forma: if (input n appartiene a classe k) then output m
appartiene a classe j con forza pari al grado di appartenenza di n a k. Spesso nella applicazione
delle regole alcune di esse portano alla medesima conseguenza con livelli di forza differenti:
in questi casi è pratica comune scegliere il valore maggiore.
Si rende necessario trasformare i dati che derivano dalla valutazione delle regole in dati
numerici reali: questo processo è il processo opposto alla fuzzificazione dell' input e infatti
si chiama defuzzificazione dell' output. In fig.5 si vede rappresentato lo schema di un sistema
fuzzy completo.

LISTATO 1


REGOLA 1: IF (A&&B) THEN X E Y

REGOLA 2: IF (C&&D) THEN X E Z


FORZA DELLA REGOLA 1= MIN(A,B)

FORZA DELLA REGOLA 2= MIN(C,D)


Y= FORZA DELLA REGOLA 1

Z= FORZA DELLA REGOLA 2

X=MAX(FORZA DELLA REGOLA 1,FORZA DELLA REGOLA 2) = MAX(MIN(A,B),MIN(C,D))

DOVE A,B,C,D SONO IPOTESI DEL TIPO "DEGREE OF MEMBERSHIP" OVVERO GRADO DI
APPARTENENZA DI UN INPUT DEL SISTEMA AD UNA SPECIFICA CLASSE

E

X,Y,Z SONO CONSEGUENZE INTESE COME GRADO DI APPARTENENZA DI UN OUTPUT AD UNA
PARTICOLARE CLASSE

DEFUZZIFICAZIONE DELL OUTPUT
Una volta fuzzificato gli inputs e fornite le informazioni in formato fuzzy al motore decisionale
del sistema (il programma che fa girare le regole) e che questo ha fornito in risposta
degli output in formato fuzzy del tipo output 3 appartiene a classe2 con grado 0.6 ,
è necessario trovare un sistema che consenta di estrarre dati numerici precisi da
applicare alle uscite.
Questa operazione detta defuzzificazione dell' output deve risolvere il problema della
conflittualità che nasce dal fatto che alcune regole possono avere generato conseguenze
contrastanti tipo:

conseguenza1: out1 appartiene a classe2 con grado 0.6

conseguenza2: out1 appartiene a classe3 con grado 0.3

dove, cioè lo stesso output viene assegnato a classi differenti (normalmente adiacenti o vicine).
Viene comunemente utilizzato un metodo che consiste nel calcolare le aree "attive"
dei trapezi o triangoli che definiscono le classi e, una volta posizionato il valore a metà
tra i centri delle classi in conflitto farlo "attrarre" dai rispettivi centri-classe in modo
proporzionale alle aree attive associate, come mostrato in fig.6.
Una possibile semplificazione può essere quella di prendere i centri di tutte le classi in conflitto e
far attrarre il valore numerico finale da tutti i centri in modo proporzionale alla forza delle regole
che hanno determinato le conseguenze di appartenenza ad ogni classe:


valore finale = (f1*c1 + f2*c2 + f3*c3 ...+fn*cn)/(f1+f2+f3...+fn)


dove cn=centro numerico della classe n fn=grado di appartenenza (o forza della regola)

REALIZZAZIONE SOFTWARE
La realizzazione software di un sistema a regole basato su ragionamento sfumato non è
particolarmente difficile inquanto non presenta particolari difficoltà tecniche.
Quando si progetta un sistema fuzzy bisogna tenere presente alcuni passi fondamentali :

1) definizione delle classi per ogni variabile di ingresso

2) definizione delle classi per ogni variabile di uscita

3) definizione della forma che descrive il "degree of membership" e delle formule da usare per fuzzificazione e defuzzificazione (decidendo anche se utilizzare una normalizzazione dei dati)

4) definizione delle regole di base del motore decisionale

5) realizzazione del programma in modo che sia possibile aggiungere regole e modificare i limiti
delle classi molto facilmente.

6) test del programma sul problema e sintonizzazione del sistema sul risultato desiderato
tramite operazioni successive di affinamento tipo aggiunta/modifica di nuove regole e modifica
dei limiti delle classi (talvolta anche ridefinizione del numero di classi presente sul range
di una variabile).

Questo ultimo passo è senza dubbio il più difficile e il più lungo, tanto che ultimamente
sono stati realizzati sistemi che permettono di sintonizzare un sistema fuzzy sulla soluzione
del
problema tramite reti neuronali e sono in fase di studio anche sistemi che cercano di
pilotare la evoluzione di un fuzzy-system tramite algoritmi genetici, cioè algoritmi che seguono
i principi della teoria di Darwin.

APPLICAZIONI
La maggior parte delle applicazioni di sistemi fuzzy riguada il controllo di processi o meccanismi
in genere e nell industria americana e, giapponese soprattutto, se ne è fatto largo uso in questi
ultimi tempi con risultati, a quanto pare, estremamente soddisfacenti: Minolta, Panasonic,
Hitachi hanno fatto uso di fuzzy logic nella realizzazione di oggetti come
macchine fotografiche o semplici aspirapolveri.
In ogni caso la logica sfumata può essere il nucleo di sistemi di supporto alla decisione o
sistemi di controllo, in tasks dove l' estrema complessità non permette un approccio di tipo analitico:
in questo senso la logica fuzzy è concorrente alla tecnologia delle reti neurali, ma sempre più spesso
queste due tecnologie vengono utilizzate contemporaneamente in sistemi ibridi.