Home > Doc > Reti Neurali su .... > Realizzazione Software

Reti neurali su Personal Computer e Fuzzy Logic: Fuzzy Logic e La teoria del Ragionamento sfumato

Realizzazione Software

La realizzazione software di un sistema a regole basato su ragionamento sfumato non è particolarmente difficile in quanto non presenta particolari difficoltà tecniche. Naturalmente a seconda del tipo di applicazione che può avere esigenze di velocità esecutiva o meno, si potranno scegliere soluzioni differenti sia dal punto di vista strettamente teorico relativo alla scelta delle funzioni, sia dal punto di vista della programmazione. 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 fuzzyficazione e defuzzyficazione (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. Dal punto di vista strettamente inerente la tecnica di programmazione credo che le soluzioni stilistiche possano essere ben differenziate anche a seconda dell utilizzo o meno di un linguaggio object oriented come il c++: in ogni caso uno schema di base da seguire può essere quello seguente.

dati definiti in partenza:

float inp_class_min[n][m] (vettore con limiti minimi di m classi su n input)

float inp_class_max[n][m] (vettore con limiti massimi di m classi su n input)

float out_class_min[n][m] (vettore con limiti minimi di m classi su n output)

float out_class_max[n][m] (vettore con limiti massimi di m classi su n output)

programma:

per ogni input

{ leggi il valore fuzzyficazione: per ogni classe { if (min < valore < max) calcola grado appartenenza } }

per ogni regola

{ if(ipotesi input) imposta tesi output con grado di forza associato }

defuzzyficazione: per ogni output { calcola i conflitti con il "gravity center method" }

 

Luca Marchese

Successivo: Applicazioni

Sommario: Indice