Algorithmiquepourles systèmesdeproducFon AlgorithmeRETE parJulienVelcin LicenceMIASHS 2016-2017 Règlesàvariables • Commentfairelelienentrelabasedefaitset lesprémisses? (defrulefrere_ou_soeur (parent?x?y) (parent?z?y) (test(neq?x?z)) => (assert (frere_ou_soeur?x?z))) Basedefaits f0:(iniFal-fact) f1:(parentJosephSarah) f2:(parentSarahFrances) f3:(parentMabelFrances) f4:(parentHebeMabel))) 1. 2. 3. 4. Filtrage(différenceavecl’unificaFon) Problème(complexitédufiltrage) Méthodedesfiltres AlgorithmedeRETE LogiquedesproposiFons • r1:quadrupede&mammifere&poilu& ongles_rétracFles→chat • r2:bipede&ovipare&crete→coq • r3:bipede&sans_plumes&sans_poils→homme • r4:mamelles→mammifere Basedefait: • r5:pond_oeufs→ovipare Bipede Ovipare Crète Appartenanced’uneproposiFonàlabasedefait Algorithmedefiltrage Filtrage&unificaFon • Prémisse(moFf):(possede ?X ?Y) • Fait:(possede Jean appartement) • QuesFon:commentfairelelienentrelaprémisseetle fait? • OpéraFondefiltrage – DéfiniFon:untermet1filtreversuntermet2siet seulementsiilexisteunesubsFtuFonσtellequet1σ=t2. • OpéraFond’unifica4on – DéfiniFon:deuxtermest1ett2s’unifientsietseulementsi ilexisteunesubsFtuFonσtellequet1σ=t2σ (pa$ernmatching) filtrage(t1,t2) Sit1=t2alorsretournerσ:={}; Sit1=()out2=()alorsretournerσ:=échec; Sivar(t1)alorsretournerσ:={{t1,t2}}; Siatom(t1)ouatom(t2)alorsretournerσ:=échec; σ1:=filtrage(tete(t1),tete(t2)); Siσ1=échecalorsretournerσ:=échec; sinonσ2:=filtrage(subsFtuer(σ1,queue(t1)),queue(t2)); Siσ2=échecalorsretournerσ:=échec; sinonretournerσ:=composiFon(σ1,σ2) Complexitéducycledebase EvaluaFondelaprémissed’unerègle • PourtouteslescondiFonsCidelaprémisse • PourtousfaitsFjdelabasedefaitscalculer σi,j:=filtrage(Ci,Fj) • VérifierlescompaFbilitésdesσi,jpourtoutes lescondiFonsCidelarègle NRNombrederègles NFNombredefaits cNombremoyendecondiFonsparrègle TempsdedétecFond'unéchec:c/2*NF*T TempsdedétecFond'unsuccès:c*NF/2*T Tempsd'uncycle: Σ (c/2*NF*T ) +Σ (c*NF/2*T ) • CeladonneT =O(NF*NR) • • • • • • filtrage règlesenéchec filtrage règlesretenues filtrage Cycle filtrage Algorithmegénéral • TantquelacondiFonterminalen’estpas aqeinte • Répéterlecycledebase • Deuxsourcesd’inefficacité: – D’uncycleàl’autre,peudemodificaFon – Desprémissessontcommunesàplusieursrègles Premièresourced’inefficacité: D’uncycleàl’autre,peudemodificaFon • Conclusion:neprendreenconsidéraFonque lesmodificaFonsconsécuFveaucycle précédentpourévaluerlesdifférentes condiFonsCik Cycleài+1 Cycleài Premièresourced’inefficacité: D’uncycleàl’autre,peudemodificaFon • TantquelacondiFonterminalen’estpas aqeinte • Répéter: – PourtouteslesrèglesRk – PourtouteslescondiFonsCikdelaprémissedeRk – PourtousfaitsFjdelabasedefaitscalculer σi,j:=filtrage(Cik,Fj) Deuxièmesourced’inefficacité: Desprémissessontcommunesàplusieursrègles • TantquelacondiFonterminalen’estpas aqeinte • Répéter: – PourtouteslesrèglesRk – PourtouteslescondiFonsCikdelaprémissedeRk – PourtousfaitsFjdelabasedefaitscalculer σi,j:=filtrage(Cik,Fj) Rl(?i,?j,?k):a(?i,?j)&a(?j,?k)&b(?k,?i)=>… Rm(?i,?j):a(?i,?j)&c(?j)=>… Rn(?i,?j):b(?i,?j)&d(?j,?i)=>… Deuxièmesourced’inefficacité: Desprémissessontcommunesàplusieursrègles • SoluFon: – Déterminerl’ensembledescondiFons a(?i, ?j), b(?i, ?k), c(?i), d(?i, ?j) – EvalueruneàunetoutescescondiFonssurla basedefaits – EtablirlajointuredescondiFonsdechaquerègle Exemple:a(?i, ?j) & a(?j, ?k) & b(?k, ?i) Algorithmesefficaces • Méthodesdesfiltres(McDermoq) • AlgorithmeRETE(ForgyetMcDermoq) • AlgorithmeSNARK(Laurière) Rl(?i,?j,?k):a(?i,?j)&a(?j,?k)&b(?k,?i)=>… Rm(?i,?j):a(?i,?j)&c(?j)=>… Rn(?i,?j):b(?i,?j)&d(?j,?i)=>… Méthodedesfiltres • Principegénéral Basede règles • Principegénéral Basede règlesfiltrée Ensembledes conflits E→{R10,R11} F→{R11,R12} D→{R10,R12} Basede règles Basede règlesfiltrée Ensembledes conflits • Exemple(filtragenégaFf:siunecondiFonestabsente, quellesrèglessontsuscepFblesd’êtredéclenchées?) • Exemple(filtrageposiFf) R10D&E→... R11E&F→... R12F&D→... Faits:{D,F} Méthodedesfiltres E→{R10,R11} F→{R11,R12} D→{R10,R12} R10D&E→... R11E&F→... R12F&D→... Faits:{D,F} E→{R12} F→{R10} D→{R11} E→{R12} F→{R10} D→{R11} AlgorithmedeRETE(réseauenlaFn) LesystèmeRETE • ForgyC.L.Rete:Afastalgorithmforthemany paqern/manyobjectpaqernmatchproblem. InAIJournal,1982. • Deuxtypesdemémoire: – ProducFonmemory(PM)=ensemblederèglesde producFonLHS=>RHS – Workingmemory(WM)=ensembledefaitsàun momentdonné (extraitdelathèsedeR.B.Doorenbos,1995) LesréseauxdeRETE Réseaude discrimina4on prem-1(?x,?y) Réseaude jointurepour larègleR prem-2(?x,?z) prem-3(?y,?z) Prémisse dela règleR • Déterminerles prémisses ac4ves (mémoire alpha) • Déterminerles règlesvalides (mémoirebeta) RéseaudediscriminaFon Réseaude discrimina4on token (a01) PropagaFondu fait(a01)dans leréseaude discriminaFon prem-1(?x,?y) prem-2(?x,?z)prem-3(?y,?z) Listedesinstancesdeprem-1:((0,1)) RéseaudediscriminaFon:exemple Faits Prem1 a(?i,?j) a(1,3) (1,3) a(1,4) (1,4) a(3,4) (3,4) a(3,1) (3,1) b(1,3) Prem2 b(?i,?j) Prem3 c(?i) Prem1 d(?i,?j) Réseaude discrimina4on prem-1(?x,?y) (1,3) Réseaude jointurepour larègleR Rl(?i,?j,?k):a(?i,?j)&a(?j,?k)&b(?k,?i)=>… Rm(?i,?j):a(?i,?j)&c(?j)=>… Rn(?i,?j):b(?i,?j)&d(?j,?i)=>… Réseaudejointure:détail prem-1(?x,?y) Réseaudejointure: déterminaFondesrèglesvalides prem-2(?x,?z) Réseaude jointure pourla règleR nœud-2 PrémissedelarègleR =nœuddeproducFon prem-3(?y,?z) Prémisse dela règleR Exemple prem-3(?y,?z) noeud-1 prem-2(?x,?z) (defruleregle_1 (a?x?y) (a?z?w) => (assert(h1?x?w))) (defruleregle_2 (a?x?y) (a?y?z) => (assert(h2?x?z)) ) (defruleiniFalisaFon (iniFal-fact) => (assert(a13) (a14) (a34) (a31) (a36)) ) Miseenœuvre (f?x) ListedesinstanciaFons:((0)) (g?x) ListedesinstanciaFons:((0)) (b?x) ListedesinstanciaFons:() AutresquesFons • Retraitsdefaits:mainFendelacohérence • NégaFond’uneprémisse nonQ P nœud-1 ListdesinstanciaFons: ((0)) nœud-2 • Chaînagearrière SiQestprésent, larèglesebloque Sinon,elleestvalide