Skip to content

Définition de prédicats flous

postgresqlf edited this page Oct 14, 2011 · 8 revisions

Un prédicat flou (e.g. âge is 'jeune') peut être représenté comme une fonction trapézoïdale associée à un degré de satisfaction défini comme un nombre flottant. La relation résultat alors doit contenir les tuples pour lesquels le degré de satisfaction MU du prédicat est strictement supérieur à un seuil ALPHA. En PL/PGSQL , la définition de cette fonction générique est la suivante :

`

CREATE OR REPLACE FUNCTION trapezoidalFuzzyPredicate(val real, support1 real, core1 real, core2 real, support2 real) RETURNS real AS $$ BEGIN IF (core1 is null) THEN IF (val <= core2) THEN RETURN 1; ELSE IF (val < support2) THEN RETURN (support2-val)/(support2-core2); ELSE RETURN 0; END IF; END IF; ELSE IF (core2 is null) THEN IF (val >= core1) THEN RETURN 1; ELSE IF (val > support1) THEN RETURN (val-support1)/(core1-support1); ELSE RETURN 0; END IF; END IF; ELSE IF ((val >= core1) AND (val <= core2)) THEN RETURN 1; ELSE IF ((val > support1) AND (val < core1))THEN RETURN (val-support1)/(core1-support1); ELSE IF ((val < support2) AND (val > core2))THEN RETURN (support2-val)/(support2-core2); ELSE RETURN 0; END IF; END IF; END IF; END IF; END IF; END; $$ LANGUAGE 'plpgsql';`

Ce prédicat générique permet de définir d’autres prédicats flous tels que jeune(âge) ou élevé(salaire), comme l’indiquent les figures suivantes :

Ces prédicats flous sont destinés à être employés dans la clause WHERE de requêtes SQL telles que :

SELECT * FROM employes WHERE jeune(age)

Une telle fonction implémentant un terme flou retourne un degré de satisfaction normalisé dans l'intervalle [0,1]. Ce degré est ensuite attaché à chaque tuple par l'intermédiaire d'un attribut score qui est ajouté si celui-ci n'existe pas encore.