Componenti principali di un FIS Mamdani
- Variabili di ingresso con i loro insiemi fuzzy.
- Base di regole del tipo IF–THEN.
- Motore di inferenza che applica le regole.
- Defuzzificatore per ottenere un'uscita numerica.
Fase 1: Fuzzificazione
Dato un ingresso numerico x (ad esempio una temperatura), calcoliamo il grado di appartenenza di x a ciascun insieme fuzzy definito per quella variabile (es. fredda, confortevole, calda).
Formalmente, per ogni insieme fuzzy Ai associato alla variabile X, si calcola μAi(x).
Fase 2: Inferenza sulle regole
Ogni regola fuzzy ha tipicamente la forma:
SE X è Ai E Y è Bj ALLORA Z è Ck
Si calcola il grado di attivazione della regola combinando i gradi di appartenenza delle condizioni tramite un operatore di congiunzione (spesso il minimo).
Ad esempio, per una regola con due condizioni:
α = min( μ_Ai(x), μ_Bj(y) )
Questo grado α verrà poi usato per “tagliare” o scalare l'insieme fuzzy di uscita Ck.
Fase 3: Aggregazione delle uscite
Ogni regola produce un insieme fuzzy di uscita parziale. Nella versione Mamdani classica, si usa l'operatore min per applicare il grado α all'insieme di uscita Ck:
μ_Ck'(z) = min( μ_Ck(z), α )
Le uscite parziali di tutte le regole vengono poi combinate, di solito tramite il massimo:
μ_out(z) = max_k μ_Ck'(z)
Fase 4: Defuzzificazione
Il risultato μ_out(z) è ancora un insieme fuzzy. Per pilotare un attuatore o prendere una decisione numerica, occorre trasformarlo in un singolo valore reale.
Uno dei metodi più diffusi è il centroide (baricentro):
output = ( ∑ z * μ_out(z) ) / ( ∑ μ_out(z) )
In implementazioni discrete, le somme vengono calcolate su una griglia di punti z nel dominio dell'uscita.
In Python, questo metodo può essere implementato facilmente con array NumPy e un loop o operazioni vettorializzate.