Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.
robotics:logique_floue [2014/12/01 14:22] ldo [Valeurs et fonctions d'appartenance] |
robotics:logique_floue [2014/12/01 16:07] (Version actuelle) ldo [Moteur d'inférence] |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
==== Logique classique (Boole) ==== | ==== Logique classique (Boole) ==== | ||
==== Logique floue ==== | ==== Logique floue ==== | ||
+ | La logique floue s'utilise dans de nombreux domaines et particulièrement dans les cas où une modélisation mathématique du système ou du procédé est difficile. | ||
===== Définitions ===== | ===== Définitions ===== | ||
==== Variables linguistiques ==== | ==== Variables linguistiques ==== | ||
Une variable linguistique V est un terme utilisé lors de la description d’une situation ou d'un procédé tel que la température, la vitesse, l'age ... | Une variable linguistique V est un terme utilisé lors de la description d’une situation ou d'un procédé tel que la température, la vitesse, l'age ... | ||
- | Ces variables sont définies sur une plage des valeurs X (de -20 à 50°C, de 5 à 100 km/h, de 0 à 100 ans). | + | Ces variables sont définies sur une plage de valeurs X (de -20 à 50°C, de 5 à 100 km/h, de 0 à 100 ans). |
- | ==== Valeurs et fonctions d'appartenance ==== | + | ==== Valeurs linguistiques ==== |
- | Chaque variable linguistiques est définie par un ensemble Tv de valeurs tel que tel que chaud, froid, rapide, lent, jeune ... | + | |
+ | Chaque variable linguistique est définie par un ensemble Tv de valeurs tel que tel que chaud, froid, rapide, lent, jeune … Le nombre de valeurs linguistiques dépend de la précision désirée. Plus on ajoute de valeurs linguistiques, plus la description du système sera précise. En général, on se limite à 7 valeurs linguistiques car au-delà, la formulation des règles d'inférence devient trop complexe. | ||
+ | |||
+ | ==== Fonctions d'appartenance ==== | ||
+ | |||
+ | Chaque valeur linguistique est définie par une fonction mathématique (triangulaire, trapèze, cloche …) qui détermine le degré d'appartenance d'une donnée à une variable linguistique. | ||
- | Chaque valeur est définie par une fonction mathématique (triangulaire, trapèze, cloche ...) qui détermine le degré d'appartenance d'une donnée à une variable linguistique. | ||
==== Règles linguistiques ==== | ==== Règles linguistiques ==== | ||
Ligne 26: | Ligne 30: | ||
* **Si** ma vitesse est rapide **et** un obstacle est proche **alors** je freine fort | * **Si** ma vitesse est rapide **et** un obstacle est proche **alors** je freine fort | ||
+ | ===== Système flou ===== | ||
+ | Un système flou est composé de 4 étapes. | ||
+ | |||
+ | ==== Définition des entrées et sorties ==== | ||
+ | La première étape est de définir pour le processus : | ||
+ | * les variables linguistiques d'entrée (température, vitesse...) | ||
+ | * les valeurs linguistiques d'entrée (chaud, froid, rapide, petit, grand...) et leurs fonctions d'inférences | ||
+ | * les variables linguistiques de sortie (tension, courant, position...) | ||
+ | * les valeurs linguistiques de sortie (grand, petit, ouvert, fermé...) | ||
+ | * les règles linguistiques | ||
+ | |||
+ | ==== Fuzzification ==== | ||
+ | La deuxième étape consiste à « traduire » une entrée classique (mesure provenant d'un capteur) en valeur linguistique. | ||
+ | On associe à chaque valeur son degré d'appartenance grâce aux fonctions d'appartenance correspondantes. | ||
+ | Par exemple, T° = 20° → froid = 5 %, tiède = 95 %, chaud = 0 % | ||
+ | |||
+ | ==== Moteur d'inférence ==== | ||
+ | La troisième étape établit la relation entre les entrées et les sorties. On applique toutes les règles linguistiques pour obtenir les valeurs de sortie. | ||
+ | |||
+ | === Exemple === | ||
+ | \\ On considère un système à 2 entrées x, y et une sortie z. | ||
+ | \\ Les valeurs linguistiques associées à ces variables sont grand, petit et nul. | ||
+ | On définit les règles : | ||
+ | \\ **SI** x est grand **ET** y est grand **ALORS** z est grand **OU** | ||
+ | \\ **SI** x est grand **ET** y est petit **ALORS** z est petit **OU** | ||
+ | \\ **SI** x est grand **ET** y est nul **ALORS** z est nul **OU** | ||
+ | \\ **SI** x est petit **ET** y est grand **ALORS** z est petit **OU** | ||
+ | \\ **SI** x est petit **ET** y est petit **ALORS** z est petit **OU** | ||
+ | \\ **SI** x est petit **ET** y est nul **ALORS** z est nul **OU** | ||
+ | \\ **SI** x est nul **ET** y est grand **ALORS** z est nul **OU** | ||
+ | \\ **SI** x est nul **ET** y est petit **ALORS** z est nul **OU** | ||
+ | \\ **SI** x est nul **ET** y est nul **ALORS** z est nul **OU** | ||
+ | |||
+ | === Définition des opérateurs === | ||
+ | Il faut définir les opérateurs flous NON, ET et OU. Il existe plusieurs méthodes : | ||
+ | == Méthode MIN/MAX == | ||
+ | * condition : ET -> min, OU → max | ||
+ | * implication : OU -> max, ALORS → min | ||
+ | |||
+ | == Méthode MAX-PROD == | ||
+ | * condition : ET -> Min, OU -> Max | ||
+ | * implication : ou -> Max, Alors -> Prod | ||
+ | |||
+ | == Méthode SOMME-PROD == | ||
+ | * condition : ET -> Prod OU -> Somme | ||
+ | * implication : ou -> Somme Alors -> Prod | ||
+ | |||
+ | ==== Défuzzification ==== | ||
+ | En sortie du moteur d'inférence, nous avons les valeurs linguistiques des variables de sortie. L'opération de défuzzification va permettre de "traduire" ces valeurs floues en valeurs nettes exploitables pour le système (tension, courant...). Cette opération est l'inverse de l'opération de fuzzification. | ||
+ | |||
+ | === Méthodes de défuzzification === | ||
+ | Pour chaque sous-ensemble, on va calculer la valeur nette correspondante selon une des méthodes suivantes : | ||
+ | |||
+ | == Méthode du premier maximum == | ||
+ | On prend la valeur minimum correspondant au degré d'appartenance. | ||
+ | Cette méthode est simple et rapide mais elle comporte des ambiguïtés et une discontinuité de la sortie. | ||
+ | |||
+ | == Méthode du dernier maximum == | ||
+ | On prend la valeur maximum correspondant au degré d'appartenance. | ||
+ | |||
+ | == Méthode du centre des maxima == | ||
+ | On prend les valeur minimum et maximum correspondant au degré d'appartenance puis on prend le centre des 2 abscisses. | ||
+ | |||
+ | == Méthode du barycentre (centroid) == | ||
+ | On prend la valeur du centre de gravité de la surface de la fonction d'appartenance de sortie. Cette méthode de calcul est plus gourmande en calcul mais elle donne de très bon résultats en conservant la continuité de la sortie. | ||
+ | |||
+ | === Méthode de calcul de la sortie finale === | ||
+ | Une fois que l'on a calculé les valeurs de chaque variables de sortie, on doit en déduire une seule sortie finale (valeur nette exploitable par le système). | ||
+ | |||
+ | La première solution est de calculer la sortie sur l'union des sous ensembles floues. Cette solution est complexe et très lourde en calcul. | ||
+ | |||
+ | La seconde solution consiste à calculer chaque sous-ensemble séparément (avec une des méthodes de défuzzification) et d'appliquer une méthode de conjonction des sorties. | ||
+ | |||
+ | == Minimum == | ||
+ | On prend la valeur minimale des sous-ensembles. | ||
+ | |||
+ | == Moyenne == | ||
+ | On calcule la moyenne de chaque sous-ensemble. | ||
+ | |||
+ | == Moyenne pondérée == | ||
+ | On calcule la moyenne pondérée de chaque sous-ensembles. Par exemple, pour la méthode du calcul du barycentre, nous allons calculer le centre de gravité de chaque sous-ensemble puis nous pondérons chaque résultat avec sa surface. Cette solution est coûteuse en calcul mais offre des très bon résultat. |