Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Si può definire un livello di significatività, ad esempio 0.5, per cui se c’è bisogno di risparmiare
carico computazionale si tiene conto soltanto delle classificazioni che sono sopra la soglia di
significatività.
In questo esempio, nell’applicazione si può dire che una persona di 35 anni è “non molto giovane” con
grado 0,6 e tralasciare le altre classificazioni che sono sotto la soglia.
Come definire funzioni di appartenenza
- Selezionare una variabile e definire qual è l’intervallo di valori che vogliamo considerare
- Identificare i nomi degli insiemi fuzzy (etichette-label) che servono per la nostra
applicazione
- Identificare per ogni insieme fuzzy i punti caratteristici (in generale i punti in cui la funzione
va a 0, 1 e altri eventuali valori intermedi significativi)
- Identificare la forma della funzione di appartenenza
- Verifica sulla base dell’applicazione per valutare quanto quello che abbiamo definito
cattura gli aspetti che vogliamo modellizzare
Es.
Funzioni di appartenenza particolari
- Singleton: un insieme fuzzy con un elemento solo (che vale 1)
- Intervalli: insiemi fuzzy in cui gli elementi hanno grado di appartenenza 1
Insiemi fuzzy su scale ordinali
Operazioni su insiemi fuzzy
Le operazioni definite sugli insiemi crisp sono riportate anche agli insiemi fuzzy.
Operazioni standard:
- Complemento: µf –(x) = 1-µf(x)
L’appartenenza di un valore x al complemento dell’insieme fuzzy f è uguale a 1 meno il valore di
appartenenza di x all’insieme fuzzy f stesso.
- Unione: µf1Èf2(x) = max[µf1(x), µf2(x)]
Il valore di appartenenza di un elemento x all’insieme fuzzy unione tra gli insiemi fuzzy f1 e f2 è
il massimo tra i valori di appartenenza della stessa x a f1 e quelli di appartenenza a f2.
- Intersezione: µf1Èf2(x) = min[µf1(x), µf2(x)]
È possibile definire intere classi di operatori che si differenziano da questi per il tipo di operatore
(perché hanno le stesse proprietà matematiche ad alto livello) che danno origine a una serie di
modalità per definire aspetti concettuali collegati all’interazione tra insiemi fuzzy.
Logica fuzzy
A differenza della logica booleana, che ha solo due valori ed è quindi usata principalmente per
esprimere il vero-falso (-> problema se non si sa se un fatto è vero o falso, ad esempio un fatto
futuro), la logica fuzzy è una logica a infiniti valori:
- La verità di una proposizione può assumere valori reali compresi tra 0 e 1.
Possiamo esprimere un insieme di possibilità come valori di verità di una proposizione, che può
quindi essere vera (1), falsa (0) o assumere un valore intermedio.
- La logica fuzzy è isomorfa alla teoria degli insiemi fuzzy, con gli operatori standard visti
precedentemente, così come la logica booleana è isomorfa alla teoria degli insiemi (crisp).
Questo vuol dire che, una volta ottenuti dei risultati in uno di questi ambienti (logica o
insiemi), questi risultati possono poi essere riportati all’interno dell’altro ambiente
corrispondente.
Es. Possiamo dire che “domani pioverà” ha valore di verità 0.8 in base all’opinione che abbiamo rispetto
alla possibilità che questo evento si verifichi.
Ø Si può rappresentare l’incertezza di una proposizione.
In logica fuzzy le proposizioni sono espresse come:
X is L
Dove:
- is è una parola chiave che significa “è”
- X è la variabile linguistica
- L è un’etichetta che denota un insieme fuzzy
Es. Temperature is HIGH
Una variabile linguistica è definita da una quintupla di valori: (X, T(X), U, G, M)
- X è il nome della variabile (es. Temperature)
- T(X) è l’insieme dei valori linguistici che può assumere la variabile (es. parole)
- U è l’universo del discorso definito su una variabile di base u
- G è una grammatica che definisce delle regole sintattiche per generare l’interpretazione
T(X) per ogni valore di u (-> regole che permettono di passare da un valore della variabile di
base definita sull’universo del discorso a un valore linguistico, che è un valore che può
assumere la variabile linguistica)
- M è la regola semantica per associare X al suo significato
Es.
Abbiamo una variabile di nome “età”.
Per essa l’universo del discorso U = [0, 125].
I valori linguistici che può assumere sono: “vecchio”, “mezz’età”, “giovane”, “bambino”.
La variabile di base u è l’età in anni.
M è la definizione in termini di fuzzy set dei valori di X, quindi associamo a ciascuno dei valori linguistici
di X un fuzzy set che avrà un’etichetta corrispondente al valore linguistico e che definisce
l’interpretazione dei valori della variabile di base u in termini di fuzzy set.
G è la definizione del processo di unificazione tra T e U, quindi costituisce il modo di interpretare la
variabile di base u in termini linguistici nei termini che sono valori per la variabile T.
Il valore di verità di una proposizione in logica fuzzy è interpretato come il grado di appartenenza
all’insieme fuzzy corrispondente.
Es. Quanto è vero che una temperatura di 30 gradi è “alta”?
u = temperatura
p: Temperatura is alta
X = Temperatura
Abbiamo un fuzzy set che definisce cosa significa “alta”, quindi permette di classificare i valori di u in
termini di appartenenza all’insieme fuzzy.
Un valore di appartenenza di 0.75 viene riportato con una funzione lineare ad un valore di verità di 0.75.
Questo passaggio permette, in linea di principio, di trovare delle relazioni tra gradi di appartenenza e
valore di verità, e in effetti è possibile stabilire delle relazioni non lineari che permettono di dare
particolari interpretazioni alla verità.
Operatori logici
Gli operatori di composizione sono gli stessi usati nella teoria degli insiemi fuzzy:
- NOT (¬) è realizzato come il complemento: T(¬a) = 1–T(a)
- AND (∧) come Ç quindi è una T-norma, ad esempio min T(a∧b) = min{T(a), T(b)}
- OR (∨) come È, realizzato da una T-conorma, ad esempio MAX T(a∨b) = MAX{T(a), T(b)}
Un’altra T-norma comunemente usata è li prodotto T(a)*T(b):
il valore di verità di una proposizione che è l’AND di due proposizioni sarà il prodotto dei valori di
verità delle due proposizioni.
La sua corrispondente conorma è T(a)+T(b)–T(a)*T(b).
Similarità e differenze con la logica booleana
Operatori analoghi: quando i valori di verità sono 0 e 1 danno esattamente gli stessi risultati.
Alcune tautologie che sono alla base della logica booleana non valgono nella logica fuzzy:
- Legge del terzo escluso: a ∨ ¬a = 1 (è vero a o non a)
Es. in logica fuzzy:
se il valore di verità di una proposizione a è 0.7, allora (a ∨ ¬a) = MAX{0.7,(1–0.7)} = 0.7 ≠ 1
- Legge di non contraddizione: a ∧ ¬a = 0 (non è vera una cosa e il suo contrario)
Es. in logica fuzzy:
se il valore di verità di una proposizione a è 0.7, allora (a ∧ ¬a) = min{0.7,(1–0.7)} = 0.3 ≠ 0
Cade anche il paradosso del mentitore: “sono bugiardo” è un’asserzione che implica la verità della
negazione e si giunge a un paradosso.
In logica fuzzy può essere che il valore di verità della proposizione e della sua negazione siano
entrambi 0.5, quindi abbiamo valori di verità consistenti con gli assiomi e non c’è contraddizione.
I sistemi realizzati con regola fuzzy implementano delle inferenze tra valori di ingresso e valori di
uscita, analogamente a quanto abbiamo visto per le regole nei sistemi basati sulla conoscenza. Le
regole Fuzzy si mostrano esattamente come le regole di produzione in un tradizionale sistema
esperto.
Cos’è una regola fuzzy?
Una regola fuzzy è una regola per cui le clausole hanno la forma
V is L, quindi analoga a quella delle proposizioni
Dove:
- V è una variabile linguistica
- L è l’etichetta che denota un insieme fuzzy
Questa viene detta clausola linguistica.
Di solito le clausole dell’antecedente sono legate dal solo operatore AND, quindi rispetto a una
forma generale delle regole, le regole fuzzy non hanno l’operatore OR e NOT, ma hanno solo
l’operatore AND. (Questo è un uso, in realtà se fosse necessario OR e NOT sarebbero possibili
perché sono definiti comunque all’interno della logica fuzzy.)
L’antecedente viene unificato con fatti rappresentati da valori di variabili ordinali corrispondenti a
variabili linguistiche.
Il conseguente può essere di due tipi diversi, dando origine a due tipi diversi di regole linguistiche.
- Regole Mamdani: sono regole linguistiche, il conseguente è una congiunzione di clausole
linguistiche, quindi è del tutto analogo all’antecedente, e ancora una volta abbiamo solo
l’operatore AND che lega le varie clausole.
Es. IF (A is LAn) AND (B is LBk) AND… THEN (U is LUm) AND…
Sia nell’antecedente che nel conseguente ci sono dei termini che denotano dei valori linguistici
per delle variabili.
IF (Distance is Far) AND (BallDirection is Front) THEN (Speed is HIGH) AND (Direction is Ahead)
Questo tipo di regole mette in relazione l’interpretazione di una configurazione di ingresso
con una descrizione simbolica delle uscite desiderate.
- Regole Sugeno: sono regole matematiche o di modello, legano un modello matematico
(lineare, non lineare, rete neurale…) con l’interpretazione linguistica delle sue condizioni di
applicabilità. Il modello è definito sulle variabili d’ingresso alla regola, e siamo in grado di
definire, con le variabili di ingresso (antecedenti), delle condizioni di applicabilità di un
modello espresse in termine linguistico, e sulla base di questo decidiamo di applicare il
modello con un certo peso che dipende da quanto le condizioni della regola sono vere.
Es. IF (A is LAn) AND (B is LBk) AND… THEN U is f(A, B)
F può essere un modello di qualsiasi tipo.
IF (Temperature is High) AND (Pressure is High) THEN Heating = 2000 + 3T – 7P
Questa può essere considerata una relazione tra l’interpretazione di una configurazione
d’ingresso (che rappresenta le condizioni di applicabilità del modello) e la valutazione del
modello sulle variabili d’ingresso.
Questo tipo di regole ci permette di definire per ogni modello quando è il caso di applicarlo
e di mescolare, in casi che possono essere interpretati diversamente ma che sono vicini, gli
effetti di due modelli.
Come funzionano le regole fuzzy
Il meccanismo di attivazione delle regole è un processo di 5 passi:
- Input matching: mettere in relazione i fuzzy set con i valori d’ingresso, che in generale
saranno dei valori numerici o comunque valori di variabili ordinali.
- Combinazione gradi di matching nell’antecedente: (quanto è vero l’antecedente nel suo
complesso) viene fatta con una t-norma.
Es. con la t-norma minimo:
- Combinazione con il peso della regola: si può dare a una regola un “peso”, grado di
importanza relativa che può essere associato alle regole per definire quanto una regola è
più importante di un’altra. Il peso di una regola viene combinato col grado
dell’antecedente. L’operatore di combinazione è ancora una t-norma.
Il grado risultante viene riportato come peso del conseguente, cioè diventa l’importanza
che una regola ha nell’affermare qualcosa sulle variabili d’uscita. Quindi tanto più una
regola è “buona”, tanto più avrà diritto di ritenere che la sua uscita “conti” rispetto alla
valutazione finale.
Quindi (X is PM), (X is PS), (X is PM) hanno valore 0.2, 0.5, 0.4.
- Aggregazione delle uscite:
es. R1: if (A is PL) (B is PS) Then (X is PM) -> 0.2
R2: if (A is PM) (B is PS) Then (X is PS) -> 0.5
R2: if (A is PL) (B is PM) Then (X is PM) -> 0.4
Abbiamo due valori identici, (X is PM) in R1 e R2, a cui sono stati attribuiti dei gradi diversi, 0.2 e
0.4.
L’aggregazione è fatta con una t-conorma, quindi con un massimo:
(X is PM) -> MAX{0.2, 0.4} = 0.4
- (Eventuale) defuzzyficazione: in molte applicazioni è importante completare il passaggio
dai valori di ingresso, che originariamente erano numerici, per arrivare a valori d’uscita che
sono ancora numerici. Si considera che le corrispondenti membership functions in uscita
vengano tagliate ai livelli relativi ai pesi rispettivi.
La membership function di Positive Small (PS) viene
tagliata a 0.5 e quella di Postive Medium (PM) a 0.4.
Ora è come se avessimo due figure, che in questo caso
sono rappresentate solo da segmenti visto che
abbiamo dei singleton.
Occorre effettuare un’operazione di defuzzyficazione: possiamo scegliere tra tanti
operatori, ad esempio si può usare l’operatore “media pesata” (baricentro). Quindi
considerando le due aree (nell’esempio sono due segmenti) come se fossero dei segmenti
pesanti costituiti da un qualche materiale, posti alla distanza indicata dalla differenza di
valori della X, si applica semplicemente la formula del baricentro, che ci porta ad avere un
risultato finale numerico.
Altri operatori sono:
Ø Centroide
Ø Bisettrice
Ø Media dei massimi (mom)
Ø Massimo inferiore (lom)
Ø Massimo superiore (som)
Ø Centro dell’area più alta
Ø …
Questi operatori danno origine valori anche molto diversi tra loro: scegliere il metodo di
defuzzyficazione fa parte della progettazione del sistema basato su regole fuzzy.
Conclusione
Quindi dall’insieme di regole che abbiamo definito, abbiamo messo in relazione gli ingressi
numerici 22 e 140 con un’uscita numerica, 13.
Abbiamo ottenuto lo stesso risultato che avremmo potuto ottenere con un modello matematico,
ma l’abbiamo espresso in termini linguistici, cioè abbiamo dato delle qualità linguistiche ai dati in
ingresso e sulla base di queste li abbiamo interpretati e abbiamo ottenuto dei valori in uscita
ancora linguistici, e sulla base di questi siamo riusciti ad arrivare ad un numero.
Questo tipo di approccio ci permette di definire, ad esempio, dei sistemi di controllo in cui a parole
si dice cosa deve fare il controllore e si ottiene effettivamente un risultato: i sensori sentono dei
numeri, quindi forniscono dei numeri al controllore, e gli attuatori ricevono dei numeri dal
controllore.
Progettazione di sistemi a regole fuzzy
- Definizione del problema
- Parametrizzazione del modello: definire i concetti che vengono rappresentati con le regole
e gli insiemi fuzzy
- Definizione delle regole
- Realizzazione del sistema
- Verifica
Definizione del problema
Analoga a quella fatta nella progettazione dei sistemi classica:
- Selezione delle variabili di ingresso: in molti casi determinate da quello che riusciamo a
portare all’interno del sistema
- Selezione delle variabili di uscita: cosa vogliamo ottenere
- Selezione degli obiettivi del modello: cosa deve fare il modello
Per quanto riguarda la parametrizzazione del sistema dovremo:
- Definire le funzioni di appartenenza:
Ø Quante sono? Il numero spesso è legato all’applicazione e alla differenza che ci
interessa poter catturare. In generale non sono mai molte: studi psicologici hanno
definito come 7 il numero massimo di valori tra cui le persone sono in grado di
discriminare
Ø Garantire la copertura di tutto l’insieme dei valori di ingresso: è importante che per
ogni valore di ingresso ci siano delle funzioni di appartenenza definite
Ø Considerazioni agli estremi (valori a 1): agli estremi avremo dei valori che hanno
grado di appartenenza 1, perché dato che agli estremi non ci sono sovrapposizioni
tra diverse funzioni di appartenenza possiamo garantire che avremo un valore
massimo in quel punto
Ø Densità di valori: avremo più valori linguistici (quindi più fuzzy set) laddove ci
interessa discriminare meglio tra valori delle variabili numeriche, quindi avremo
maggiore densità dove necessario
Ø Incroci: le funzioni di appartenenza si incrociano, quindi sono sovrapposte le
interpretazioni che diamo dei vari calori numerici. C’è un risultato teorico che
dimostra che si ottiene una maggiore robustezza quando per ogni valore delle
variabili di ingresso la somma delle possibili interpretazioni è 1. Quindi se abbiamo
solo due funzioni di appartenenza che si incrociano, queste si devono incrociare a
un livello 0.5 per garantire questa robustezza.
- Definire i meccanismi inferenziali (t-norme, …): selezionare le t-norme opportune. Le
proprietà delle diverse t-norme danno luogo a una quantità di diversi operatori ognuno dei
quali ha significati particolari:
Ø Per definire un AND tra gli antecedenti o la composizione dell’antecedente col
peso della regola possiamo usare:
§ min: il grado di matching peggiore è il più rilevante
§ prodotto: tutti i gradi di matching sono ugualmente rilevanti e partecipano
al valore finale
§ o una qualsiasi delle norme comprese tra queste due
Ø Per OR e aggregazione dei gradi dello stesso conseguente (t-conorme):
§ max: il grado di matching migliore è il più rilevante
§ somma pesata: tutti i gradi di matching sono ugualmente rilevanti
N.B: se si usa il minimo come norma bisogna usare il massimo per la conorma,
quindi se si usa min per gli AND bisogna usare max per gli OR e viceversa.
- Definire meccanismi di fuzzyficazione e defuzzyficazione
La fase di test ha come scopo verificare gli obiettivi del progetto. A seconda degli obiettivi che ci si
è posti occorre verificare che il risultato delle nostre regole sia effettivamente quello che vogliamo
ottenere.
Come si fa?
- Simulazione dinamica: se abbiamo a disposizione il modello con cui vogliamo che il nostro
sistema fuzzy interagisca.
Es. Se abbiamo il modello di un sistema da controllare se il nostro sistema fuzzy è un
controllore, possiamo agganciare il controllore fuzzy alla simulazione del modello e quindi
vedere come si comporta il modello simulato.
Questo meccanismo ha i limiti della simulazione, in quanto da un lato occorre avere il
modello, dall’altro lato occorre che il modello catturi effettivamente tutte le caratteristiche
interessanti per, in questo caso, l’operazione di controllo.
- Simulazione statica: verifica delle coppie ingressi/uscite e analisi delle superfici di
controllo. La verifica della superficie di controllo serve per verificare che la superficie stessa
non presenti delle forme indesiderate o inattese. Di solito quando si definisce un sistema a
regole fuzzy si definiscono delle regole più o meno indipendentemente una dall’altra e
quello che ci si può ritrovare alla fine è una superficie di controllo con strani avvallamenti o
picchi.
- Test sul processo: si attacca il controllore direttamente al processo e si verifica che svolga
effettivamente il suo compito. Questo va fatto in condizioni di sicurezza perché non
vogliamo che eventuali errori di progettazione di ripercuotano in un danno del processo.
Strumenti di sviluppo disponibili
Esistono molti strumenti di sviluppo per realizzare sistemi fuzzy. La maggior parte sono strumenti
per il controllo fuzzy, quindi per la realizzazione di regole fuzzy allo scopo di controllare dei
processi. Molti di questi sono estensioni a pacchetti più generali di calcolo ingegneristico (es.
Matlab), altri sono dedicati, quindi realizzano soltanto sistemi fuzzy.
Caratteristiche comuni:
- Definizione guidata (grafica) di funzioni di appartenenza e regole
- Visualizzazione delle superfici di controllo
- Possibilità di avere diverse forme di funzioni di appartenenza, operatori e metodi di
defuzzyficazione
- Supporto per il testing in tempo reale
- Supporto per apprendimento (sistemi che permettono di apprendere automaticamente le
regole piuttosto che le funzioni di appartenenza o comunque di farne un adattamento alla
situazione che ci troviamo ad affrontare)
- Producono codice per diversi processori (es. C o codice macchina)
Esistono inoltre qualche strumento per la realizzazione di sistemi a regole fuzzy generici. Mentre
un sistema di controllo fuzzy ha soltanto regole che regolano ingressi con uscite (processo
inferenziale a un colpo solo: dati certi ingressi otteniamo un’uscita), in generale potremmo voler
realizzare dei sistemi fuzzy che hanno delle vere e proprie catene inferenziali, in cui le uscite delle
regole, i conseguenti, vengono usati come produttori di fatti che vengono usati come antecedenti
da altre regole per continuare una linea di ragionamento.
In questo caso abbiamo sistemi molto più generali che sono focalizzati non al controllo ma alla
realizzazione di sistemi a regole più complessi. In qualche caso sono estensioni di sistemi per l’AI,
in qualche altro caso sono librerie che implementato delle funzionalità che possono essere
integrate in un qualsiasi sistema software.
(FOOL, Fuzzy Clips, FLIP, FCL, …)