Vous êtes sur la page 1sur 58

Plan

▪ Introduction
▪ cycle de fonctionnement du MI
▪ Caractéristiques d’un Moteur d’inférence
▪ Exemple de MI à chaînage avant en profondeur & algorithme
▪ Exemple de MI à chaînage avant en largeur & algorithme
▪ Exemple écrit en CLIPS

2
introduction
▪ Un Moteur d'Inférence (MI) : C’est un programme ou
procédure qui simule le raisonnement humain par
applications répétitives du savoir faire de l’expert (règles
& faits) pour résoudre un d’un problème donné par
déduction de nouveaux faits ou résultats.

3
introduction
▪ Au cours du traitement d’un problème, le moteur d’inférence
génère de nouveaux faits qui enrichiront l’ancienne base des
faits et applique de nouvelles règles et ainsi de suite jusqu’à
l’aboutissement au résultat cherché (succès) ou à une impasse
(échec).

4
introduction
▪ Le Moteur d’inférence est une partie du SE qui est indépendante de la
connaissance. Ainsi, un même Moteur d’inférence peut être appliqué à des
bases de connaissances différentes pour constituer à chaque fois un SE
différent. C’est le cas de Prolog qui possède au un moteur d’inférence
fonctionnant en chaînages arrière ou Clips qui a son tour fonctionnent en
chaînage avant.

▪ Sa généralité est telle qu’il peut déduire des faits dans plusieurs contextes.

5
Cycles d'un Moteur d’Inférence

Un cycle de fonctionnement du MI est composé de deux phases

▪ une phase d’évaluation et


▪ une phase d’exécution.

6
phase d’évaluation

Cette phase d’évaluation s’effectue généralement en trois étapes :

1. la sélection
2. Le filtrage (pattern matching)
3. La résolution de conflits

7
phase d’évaluation

1. La sélection (restriction) : cette étape optionnelle concerne


une première sélection d’un sous-ensemble de règles dans la
base des règles qui à priori mérite d’être considéré dans
l’étape suivante. Ce choix dépend de l’état courant de la
base de faits.

8
phase d’évaluation

2. Le filtrage (pattern matching) : Parmi l’ensemble retenu à


l’étape précédente, cette étape retient un sous-ensemble, dit
de conflit, qui contient seulement les règles effectivement
applicables qui sont, généralement, celles dont le côté gauche
(côté ‘ situation ’ dit aussi ‘prémisses ’) est satisfait au vu de
l’état actuel de la base de faits.

9
phase d’évaluation
3. La résolution de conflits : Parmi les règles retenues suite au
filtrage, le moteur décide de la (des) règle(s) qui sera (seront)
exécutée(s).
Ce choix est souvent indépendant du contexte d’application et de la
sémantique des règles mais généralement guidé par des soucis
d’efficacité (par exemple, choix des règles les moins complexes).
Toutefois, des informations heuristiques ou des méta-règles peuvent
être exploitées pour fixer un ordre de priorité entre ces règles.
10
phase d’exécution

La deuxième phase de ce cycle de travail d’un moteur


d’inférence est la phase d’exécution qui, comme son nom
l’indique, concerne l’exécution de la partie ‘ action ’ des
règles sélectionnées lors de la phase d’évaluation et à
modifier (mise à jour) en conséquence la base de faits.

11
Cycle de base de fonctionnement d’un
Phase d’évaluation Phase d’exécution
Moteur d’inférence.
Sélection
d’un sous
Exécution Cycle de base de fonctionnement d’un
ensemble R1 € BR
Des actions des règles
Moteur thermique.
de l’ensemble R3
Filtrage
déterminer
l’ensemble de conflit Mise à jour
R2 C R1 De la base des
connaissances
Résolution de conflit
déterminer
l’ensemble de conflit
R3 C R2

Non Non Arrêt 1 : but dans la BDF ou


Arrêt 2 Arrêt 1 Règle qui ordonne l’arrêt.

Arrêt 2 : pas de règles à appliquer


Oui Oui dans la BDR, R3 = Ø .
Arrêt de processus
12
Caractéristiques d’un Moteur d’inférence
la programmation d’un moteur d’inférence nécessite la sélection d’un
ensemble de critères :
• le mode d’invocation des règles :(chaînage avant, chaînage arrière).
• la stratégie de recherche qu’il utilise (profondeur, largeur).
• son régime de contrôle (irrévocable ou par tentative.).
• le critère de monotonie (monotone ou non-monotone).

13
Caractéristiques d’un Moteur d’inférence
Modes d’invocation des règles :
Les moteurs d'inférences peuvent enchaîner les règles de différentes façons :
c'est ce que l'on appelle le chaînage. Les deux principaux chaînages sont le
chaînage avant et le chaînage arrière, mais il existe des moteurs possédant
un chaînage mixte .

14
Caractéristiques d’un Moteur d’inférence
Principe du chaînage avant :
Un moteur à chaînage avant est aussi appelé un moteur à inférences dirigé par les
données.

Dans ce mode de chaînage, on part des données disponibles en base de faits, et on


teste pour chaque règle si elle peut s'appliquer ou non. Si oui, on l'applique et on
rajoute la conclusion à la base de faits.

Le moteur explore donc toutes les possibilités, jusqu'à trouver le fait recherché ou
jusqu'à ne plus pouvoir appliquer de nouvelles règles.

Ce mode de chaînage est celui proposé par défaut dans des langages de type CLIPS
( C Language Integrated Production System), spécialisés dans la construction de
systèmes experts).

15
Caractéristiques d’un Moteur d’inférence

Principe du chaînage avant :

Un Exemple :
soit BDF = {A, B, C, D}
et soit la règle : A,C ➔ G

cette règle est peut être déclenchée et on obtient BDF = { A, B, C, D, G }

L’étape de filtrage et résolution de conflit correspond à rassembler toutes les règles


dont les prémisses sont dans la BDF.

16
Caractéristiques d’un Moteur d’inférence

Principe Chaînage arrière


Les moteurs d'inférences à chaînage arrière sont aussi dits dirigés par le but.
On part des faits que l'on souhaiterait obtenir et on cherche une règle qui
pourrait permettre d'obtenir ce fait . On rajoute alors toutes les prémisses
de cette règle dans les nouveaux buts à atteindre.

On réitère, jusqu'à ce que les nouveaux buts à atteindre soient présents dans
la base de faits. Si un fait est absent de la base de faits ou prouvé comme
faux, alors on sait que la règle ne peut pas s'appliquer (backtracking).

L’exécution de ces règles ne modifie pas la BDF mais elle remplace le


problème initial par d’autres.

17
Caractéristiques d’un Moteur d’inférence

Principe Chaînage arrière

Un exemple :
Soit le but à établir P, et soit la règle :
A, B, C ➔ P
Pour résoudre le problème P, il suffit de résoudre les sous problèmes A, B et C.
Ce mécanisme sera répété jusqu’à ce que la dernière liste de faits à établir soit
entièrement dans la BDF.

L’étape de filtration consiste à rassembler toutes les règles dont les conclusions
contiennent le fait à établir.

18
Caractéristiques d’un Moteur d’inférence
Chaque mode de chaînage a ses avantages et ses inconvénients :

- Le chaînage avant permet de découvrir en permanence de nouveaux faits,


mais il risque d'appliquer et de tester de nombreuses règles qui ne concernent
pas l'information recherchée par l'utilisateur. Il est donc plus adapté à
l'exploration.

- Le chaînage arrière permet de se concentrer sur un but précis (ou plusieurs


buts), mais il va tester de nombreuses possibilités qui seront finalement
démontrées comme fausses. Ainsi, il va essayer de prouver des règles qui ne
pourront pas l'être. Sa gestion est aussi plus complexe (car il doit gérer la liste
des buts et permettre le backtracking) .

19
Caractéristiques d’un Moteur d’inférence

Chaînage mixte
Un mélange des deux chaînages a alors été proposé : le chaînage mixte. Dans
ce nouveau chaînage, on va alterner des périodes en chaînage avant (pour
déduire de nouveaux faits de ceux que l'on vient juste de prouver) et des
périodes de chaînage arrière (dans lesquelles on cherche de nouveaux buts à
prouver) .

20
Caractéristiques d’un Moteur d’inférence
Stratégies de recherche

Un moteur d’inférence développe un arbre de recherche dans lequel chaque


niveau correspond à l’ensemble de règles déclenchable (ensemble de conflits).
Chaque règle déclenchée crée une nouvelle situation et de nouvelles règles à
invoquer. Deux stratégies de recherche de la solution se présentent :

• en largeur d'abord (Breadth first search : BFS)


• en profondeur d'abord (Depth first search : DFS)

21
Caractéristiques d’un Moteur d’inférence

Stratégies de recherche

• en largeur d'abord (Breadth first search : BFS)


• en profondeur d'abord (Depth first search : DFS)

BFS DFS

22
Caractéristiques d’un Moteur d’inférence
Stratégies de recherche

Stratégie en largeur d'abord : le M.I. on développe toutes les règles d’un même
niveau de l’arbre l’une après l’autre avant de passer au niveau suivant.

stratégie profondeur d'abord : le M.I. passe d’un niveau à un autre à chaque fois
qu’on déclenche une règle et on ne revient aux règles restantes que si on épuise
toutes les règles en profondeur sans avoir trouver la solution.

le cas où la recherche en profondeur échoue sera appelé : backtracking

Le mode d’invocation des règles et la stratégie de recherche constituent les critères


de base pour la réalisation d’un moteur d’inférence.

23
Caractéristiques d’un Moteur d’inférence

Régime de contrôle

Irrévocable : l’application d’une règle dans un cycle du moteur d’inférence n’est


jamais remise en cause et on n’opère pas de backtracking. S’il n’y a plus de règles à
appliquer le moteur d’inférence s’arrête et signale un échec sans faire de retour
arrière.

par tentatives : peuvent remettre en cause des règles déjà appliquées si elles n’ont
pas abouti, et faire un backtracking en retirant aussi les faits qui en étaient déduits.

24
Caractéristiques d’un Moteur d’inférence

Monotonie

Un Moteur d’inférence peut être monotone ou non-monotone.

Moteur d’inférence monotone : garde chaque fait initial ou ajouté à la BDF jusqu’à
la fin de la recherche.

Moteur d’inférence non-monotone : peut retirer de la BDF un fait précédemment


ajouté. Cette situation peut être rencontrée en cas de backtracking par exemple.

25
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
26
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G} BUT {F}

Base des Règles


Cycle N° 1 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R4, R5 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R4
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
27
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
28
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C} BUT {F}

Base des Règles


Cycle N° 2 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R5 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R5
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
29
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
30
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B} BUT {F}

Base des Règles


Cycle N° 3 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R1, R3 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R1
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
31
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
32
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H} BUT {F}

Base des Règles


Cycle N° 4 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R3, R7 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R3
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
33
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
34
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S} BUT {F}

Base des Règles


Cycle N° 5 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R7 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R7
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
35
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S, R} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
36
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S, R} BUT {F}

Base des Règles


Cycle N° 6 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R8 et R9 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R8
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
37
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S, R, T} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
38
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S, R, T} BUT {F}

Base des Règles


Cycle N° 7 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R9 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ? R9
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
39
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, H, S, R, T, F } BUT {F}

Base des Règles


R1: A, B, C -> H
But {F} dans la BDF
R2: A, U, C -> F Fin avec Succès But atteint !
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
40
Exemple : MI à chaînage avant en profondeur d'abord monotone avec régime irrévocable

L’arbre en Profondeur d’abord

41
/* Soient : BF la base de faits, BR la base des règles
Conditions(Ri) les conditions de déclenchement de la règle Ri de BR
Conclusion(Ri) les conclusions de la règle Ri de BR
F le fait à établir
FIN : variable booléenne initialisée à VRAI
Algorithme chaînage avant en profondeur d'abord monotone avec régime irrévocable */
FIN = true
Tantque not(F In BF)&(FIN = true) Faire
FIN = false
Pour toutes (Ri) de BR Faire
Si Conditions(Ri) In BF alors
{ BF = BF + Conclusion(Ri)
BR = BR – (Ri)
FIN = true }
finSi
finPour
fintantque

Si (F In BF) alors
renvoyer(‘ ... Succès ... ’)
Sinon
renvoyer(‘ ... Échec ... ’)
finSi

42
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
43
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G} BUT {F}

Base des Règles


Cycle N° 1 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R4, R5 et R8 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ?
On applique R4, puis R5, ensuite R8.
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
44
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
45
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T} BUT {F}

Base des Règles


Cycle N° 2 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R1 et R3 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ?
On applique R1, puis R3.
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
46
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T, H, S} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
47
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T, H, S} BUT {F}

Base des Règles


Cycle N° 3 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R7 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ?
On applique R7.
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
48
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T, H, S, R} BUT {F}

Base des Règles


R1: A, B, C -> H
R2: A, U, C -> F
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
49
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T, H, S, R} BUT {F}

Base des Règles


Cycle N° 4 : Quelles sont les règles à déclencher ?
R1: A, B, C -> H
R2: A, U, C -> F Conflit = { R9 }
R3: E, G, B -> S
R4: D, G -> C Quelle est la Règle exécutable ?
On applique R9.
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
50
Exemple : MI à chaînage avant en largeur d'abord monotone avec régime irrévocable

Base des faits {A, D, E, G, C, B, T, H, S, R, F } BUT {F}

Base des Règles


R1: A, B, C -> H
But {F} dans la BDF
R2: A, U, C -> F Fin avec Succès But atteint !
R3: E, G, B -> S
R4: D, G -> C
R5: A, E -> B
R6: U, S, T -> F
R7: G, H -> R
R8: D, E -> T
R9: R, S, H -> F
R10: A, U -> B

Règle désactivée
Règle activée
51
/* Soient : BF la base de faits, BR la base des règles
Conditions(Ri) : les conditions de déclenchement de la règle Ri de BR
Conclusion(Ri) : les conclusions de la règle Ri de BR
F : le fait à établir
FIN : variable booléenne initialisée à VRAI
Q : file d’attente
Algorithme chaînage avant en largeur d'abord monotone avec régime irrévocable */
FIN = true
Tantque not(F In BF)&(FIN = true) Faire
FIN = false
Pour toutes (Ri) de BR Faire
Si Conditions(Ri) In BF alors Enfiler(Ri,Q) finSi
finPour
Tantque Q ≠ Ø Faire
{ R= Défiler(Q)
BF = BF + Conclusion(R)
BR = BR – (R)
FIN = true }
fintantque
fintantque

Si (F In BF) alors
renvoyer(‘ ... Succès ... ’)
Sinon
renvoyer(‘ ... Échec ... ’)
finSi 52
Exemple écrit en CLIPS

; Base-Des-Faits:

(deffacts Faits
(A)
(D)
(E)
(G)
)

; Base-des-Regles:

(defrule R1 (and (A) (B) (C)) => (printout t "la règle R1 se déclenche" crlf) (assert (H)))
(defrule R2 (and (A) (U) (C)) => (printout t "la règle R2 se déclenche" crlf) (assert (F)))
(defrule R3 (and (E) (G) (B)) => (printout t "la règle R3 se déclenche" crlf) (assert (S)))
(defrule R4 (and (D) (G)) => (printout t "la règle R4 se déclenche" crlf) (assert (C)))
(defrule R5 (and (A) (E)) => (printout t "la règle R5 se déclenche" crlf) (assert (B)))
(defrule R6 (and (U) (S) (T)) => (printout t "la règle R6 se déclenche" crlf) (assert (F)))
(defrule R7 (and (G) (H)) => (printout t "la règle R7 se déclenche" crlf) (assert (R)))
(defrule R8 (and (D) (E)) => (printout t "la règle R8 se déclenche" crlf) (assert (T)))
(defrule R9 (and (R) (S) (H)) => (printout t "la règle R9 se déclenche" crlf) (assert (F)))
(defrule R10 (and (A) (U)) => (printout t "la règle R10 se déclenche" crlf) (assert (B)))

53
54
55
56
57
58

Vous aimerez peut-être aussi