Eficiencia en Sistemas de Reconocimiento de Patrones

Slides:



Advertisements
Presentaciones similares
Lucio Salgado CLIPS Lucio Salgado
Advertisements

Sistemas Expertos Caso de Estudio: Selecci ó n de un microcontrolador.
Copyright © 1997 José Angel Bañares Última revisión: Octubre, 2002 Programación en Lenguajes basados en reglas. Aspectos metodológicos. Programación en.
Curso José Ángel Bañares 18/10/2013. Dpto. Informática e Ingeniería de Sistemas. Inteligencia Artificial (30223) Lección 8. Eficiencia en sistemas.
SISTEMAS EXPERTOS 2004 QUÉ ES CLISP ?. INTRODUCCIÓN A CLISP Características Generales: -Fácil implementación y modificación: rapidez para demostrar algoritmos.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Slide 2- 1.
1 © José Angel Bañares Copyright © 1998 JoséAngel Bañares Última revisión: Marz., 1999 Resolución de Problemas en LBR Departamento de Informática e Ingeniería.
5/8/2015Metamodelamiento1 METAMODELADO Carlos Mario Zapata J.
Lenguajes basados en reglas
Direct Object Pronouns. Instrucciones / Read each sentence. On a piece of paper, rewrite each sentence using a direct object pronoun. Then, advance to.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
OPTIMANDO FOIL: EXTRACCIÓN DE INFORMACIÓN. Índice  Introducción  Estrategias  FOIL  Optimizaciones  Resultados  Conclusiones.
Departamento de Ciencia de la Computación IIC3194 – Metodologías Emergentes en la Ingeniería de Software Razonamiento basado en reglas JESS Ingeniería.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
Teoría de Sistemas Operativos Archivos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Conferencia 3: Paradigmas de la Orientación a Objetos Tema 1:Principios de la Tecnología de Objetos.
Intelligent Databases and Information Systems research group Department of Computer Science and Artificial Intelligence E.T.S Ingeniería Informática –
Curs de Postgrau Visual Basic .NET: Introducció
¿POR QUÉ APRENDER UN TEMA ESPECÍFICO DE LA MATEMÁTICA
Árboles binarios. Algoritmos básicos
Stored Procedures Firebird.
Conceptos básicos de programación
Estudiante: Julian Camilo Daza R.
Estructuras de Datos Recursividad.
Curs de Postgrau Visual Basic .NET: Introducció
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
UNIVERSIDAD ICEP INTELIGENCIA ARTIFICIAL INGENIERÍA EN SISTEMAS COMPUTACIONALES Martes, 24 de Octubre de 2017 REPRESENTACIÓN DEL CONOCIMIENTO Y RAZONAMIENTO.
Sonia Rueda Herencia y Polimorfismo
Instrucciones y excepciones
Bucles y estructuras de decisión
Listas Dinámicas.
MATLAB 6.5 Clase 3: Funciones básicas e Introducción a la Programación
First Grade Dual High Frequency Words
Backups De Ficheros Temporales En Plan 9
Infografía. Estructura de Datos.
Árboles Binario de Búsqueda
MEMORIAS. Alba Lus, Esther Escobar, Laura Hierro, Raquel Fdez.
Sincronización de Procesos
ÁRBOLES El árbol es una estructura de datos muy importante en informática y en ciencias de la computación. Los árboles son estructuras no lineales,
Hardware Description Language
TOPICOS AVANZADOS (Sistemas Expertos) Temario Sinóptico
Intelligent Databases and Information Systems research group Department of Computer Science and Artificial Intelligence E.T.S Ingeniería Informática –
Sistemas expertos con Clips Instituto Tecnológico Superior de San Miguel El Grande Ing. Miguel Angel Marcial Martínez.
Criterios cobertura de grafos: código fuente
Tipos de Datos abstractos
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
5. Optimización de redes. Integrantes: * Christian Cota * Cesar Rojo
Clickhouse: Una BBDD orientada a columnas
Árboles Binarios de Búsqueda (ABB)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE HIDALGO
Tipos de Datos abstractos
Bucles y estructuras de decisión
Arboles M.C. José Andrés Vázquez FCC/BUAP
Estructuras de Datos Dinámicas
Estrategias de búsqueda de material académico escrito
Curso de Programación Estructurada
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
23 – 27 ABRIL/APRIL 2018 Santiago, Chile
Redes de Petri Coloreadas
Inteligencia Artificial
Árboles Binarios Estructuras de Datos.
Nelson Baloian, José A. Pino
Grupo Experimental de Física de Altas Energías
CARRERA DE INGENIERÍA EN ELECTRÓNICA, AUTOMATIZACIÓN Y CONTROL
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
Departamento de Ingeniería de Sistemas e Industrial
Aprendizaje en Agente Autónomos
M.C. José Andrés Vázquez Flores
Ordenación Por Inserción
Churn Norris – Retain your customers with ML
Transcripción de la presentación:

Eficiencia en Sistemas de Reconocimiento de Patrones These slides, handouts and notes are a generic OMG and CORBA presentation presented by Object Management Group, Inc. 492 Old Connecticut Path Framingham, MA 01701 U.S.A. telephone: +1-508-820 4300 facsimile: +1-508-820 4303 email: omg@omg.org Web: http://www.omg.org J.A. Bañares Bañares Departamento de Informática e Ingeniería de Sistemas C.P.S. Universidad de Zaragoza Copyright © 2000 José Angel Bañares Última revisión: Octubre, 2002 1

Eficiencia en Sistemas de Reconocimiento de Patrones Índice: Introducción Proceso de reconocimiento de patrones Registro del estado entre operaciones Algoritmo de RETE Algoritmo de TREAT ¿Cómo escribir programas eficientes? Otras aproximaciones Otras aplicaciones: Interpretación de RdP

Introducción Memoria de Trabajo Memoria de Producción Reconocimiento Cambios Agenda Reconocimiento Selección Agenda Motor Inferencia Cámbios Memoria Trabajo Ejecución

Introducción Redundancia Temporal Hechos Reglas Hechos Reglas Agenda

Proceso de correspondencia de patrones (defrule nombre-regla (primera-condición) (segunda-condición) ... (n-ésima condición) => ...)

Registro del estado entre operaciones Tipos de información a retener : McDermott, Newell y Moore 1978 Número de condiciones satisfechas Condition membership Mantenimiento de la memoria (a-memorias) Memory support Relación entre condiciones (b -memorias) Condition relationship Mantenimiento del conjunto conflicto Conflict set support

Red de RETE y algoritmo de propagación Algoritmo de RETE Red de RETE y algoritmo de propagación Forgy 1982 Aprovecha la redundancia temporal a-memorias: Árbol de discriminación (test tree) b-memorias: Árbol de consistencia (join tree) Agenda (Conflict set) Aprovecha la similitud estructural Si se repite la misma restricción en distintas reglas se aprovecha la misma rama.

Red RETE y algoritmo de propagación Las reglas se compilan bajo la forma de dos tipos de árbol : Árbol de discriminación : Filtrado y propagación de los nuevos hechos en memoria de trabajo Cada hoja contiene una premisa y cada nodo una comprobación (test) Árbol de consistencia : Verifica las correspondencias entre variable Cada nodo reagrupa 2 a 3 las premisas de una misma regla.

Árbol de discriminación (test tree) (defrule Regla-2 (tipo1 (a ?x) (b rojo)) (tipo-2 (x ~verde) (y ?x)) (tipo-2 (x ?x) (y ?x)) => ...) (defrule Regla-1 (tipo1 (a rojo)) (tipo-2 (x ?x) (y ?x)) => ...) Memoria de Trabajo El valor de a es igual a rojo El valor de b Tipo1 El valor de x es distinta de verde El valor de y es igual al valor de x Tipo2 Patrón reconocido a a a a

Árbol de consistencia (Join tree) Memoria de Trabajo Tipo1 Tipo2 El valor de x es distinta de verde El valor de y es igual al valor de x El valor de a es igual a rojo El valor de b es igual a rojo Patrón reconocido a Patrón reconocido a Patrón reconocido a Patrón reconocido a b El valor del atributo a del hecho ligado en el primer patrón, es igual al valor del atributo y del hecho ligado en el segundo patrón b El valor del atributo x del hecho ligado en el tercer patrón, es igual al valor del atributo y del hecho ligado en el segundo patrón (defrule Regla-2 (tipo1 (a ?x) (b rojo)) (tipo-2 (x ~verde) (y ?x)) (tipo-2 (x ?x) (y ?x)) =>) Regla-2 ACTIVA

Similitud estructural Compartiendo nodos Similitud estructural 1 a 2 3 4 b c regla-1 (defrule regla-1 (tipo-1 (a ?x) (b rojo)) (1) (tipo-2 (x ~verde) (y ?x)) (a) (tipo-2 (x ?x) (y ?x)) (b) (tipo-3 (q ?z)) (c) =>) (defrule regla-2 (tipo-1 (a ?y) (b rojo)) (1) (tipo-2 (x ~verde) (y ?y)) (a) (tipo-2 (x ?y) (y ?y)) (b) (tipo-3 (q ?y)) (c) 1 a b 2 c 3 4 regla-1 regla-2 5 CLIPS> (watch compilations) CLIPS> (load "join.clp") Defining defrule: compartir-1 +j+j+j+j Defining defrule: compartir-2 =j=j=j+j TRUE

Algoritmo de RETE (defrule load (PART (name ?part) (machine ?machine) (tool ?tool)) (MACHINE (name ?machine)) (TOOL (name ?tool)) ==> ...) Une las ligaduras que entran por la izquierda con las que entran por la derecha teniendo el mismo valor la variable ?machine MEMORIA DE TRABAJO Árbol de Test (liga ?tool al valor de name) Árbol de Consistencia valor de tool) (liga ?part al valor de name) (liga ?machine al valor de machine) Clase = TOOL? Clase = MACHINE? Clase = PART? Une las ligaduras consistentes de la izquierda con las que entran por la derecha teniendo el mismo valor la variable ?tool

a y b memorias MEMORIA DE TRABAJO (MACHINE (name M1)) (PART (name P1) (machine M1) (tool T1)) (PART (name P3) (machine M3) (tool T5)) (TOOL (name T18)) (TOOL (name T1)) 1 <part> P1 <mac.> M1 <tool> T1 <part> P3 <mac.> M3 <tool> T5 2 <part> ? <mac.> M1 <tool> ? <part> ? <mac.> M3 <tool> ? <part> ? <machine> M1 <tool> ? <part> P1 <mac.> M1 <tool> T1 <part> P1 <mac.> M3 <tool> T5 <part> ? <mac.> ? <tool> T1 <part> ? <mac.> ? <tool> T18 3 4 4 nodos a nodos b <part> P1 <mac.> M1 <tool> T1 5

Conjetura TREAT Algoritmo de TREAT Críticas al algoritmo de RETE McDermott, Newell y Moore, 1978 “Recalcular completamente < Mantener la información” Críticas al algoritmo de RETE Alto coste del borrado y modificación El tamaño de la información almacenada pueden ser elevados (Explosión combinatoria) TREAT Miranker 1986 No considera las b-memorias, pero considera el número de condiciones satisfechas.

Árbol TREAT Estado Inicial 1 2 3 Partición vieja Partición nueva (PART (name P1) (machine M1) (tool T1)) (MACHINE (name M1)) (TOOL (name T18)) Estado Inicial (MACHINE (name M3)) (TOOL (name T1)) (PART (name P3) (machine M3) (tool T5)) 1 PART 2 MACHINE 3 TOOL <part> P1 <mac.> M1 <tool> T1 <part> ? <mac.> M1 <tool> ? <part> ? <mac.> ? <tool> T1 <part> P3 <mac.> M3 <tool> T5 <part> ? <mac.> M2 <tool> ? <part> ? <mac.> ? <tool> T18 Partición vieja Partición nueva añadir Partición nueva borrar <part> P1 <mac.> M1 <tool> T1 Conjunto conflicto

+ (PART (name P22) (machine M2) (tool T18)) Añadir en TREAT + (PART (name P22) (machine M2) (tool T18)) PART 1 2 MACHINE 3 TOOL <part> P3 <mac.> M3 <tool> T5 <part> P1 <mac.> M1 <tool> T1 <part> ? <mac.> M2 <tool> ? <mac.> M1 <part> ? <mac.> ? <tool> T1 Partición vieja <part> ? <mac.> ? <tool> T18 <part> P22 <mac.> M2 <tool> T18 Partición nueva añadir Partición nueva borrar <part> P22 <mac.> M2 <tool> T18 <part> P1 <mac.> M1 <tool> T1 <part> P22 <mac.> M2 <tool> T18 Conjunto conflicto

- (PART (name P22) (machine M2) (tool T18)) Borrar en TREAT - (PART (name P22) (machine M2) (tool T18)) PART 1 2 MACHINE 3 TOOL <part> P1 <mac.> M1 <tool> T1 <part> ? <mac.> M1 <tool> ? <part> ? <mac.> ? <tool> T1 <part> P3 <mac.> M3 <tool> T5 <part> ? <mac.> M2 <tool> ? <part> ? <mac.> ? <tool> T18 Partición vieja <part> P22 <mac.> M2 <tool> T18 Partición nueva añadir <part> P22 <mac.> M2 <tool> T18 Partición nueva borrar Conjunto conflicto <part> P22 <mac.> M2 <tool> T18 <part> P1 <mac.> M1 <tool> T1

Comparación Experimental Reglas Condiciones MT Ciclos Agenda MAB 13 34 11 14 21 Mud 884 2134 241 972 Waltz 33 130 42 71 193 Mesgen 155 442 34 138 149 Mapper 237 771 1153 84 595 Comparaciones al borrar Comparaciones al añadir RS: RETE con similitud estructural RN: RETE sin similitud estructural TN: TREAT orden léxico TO: TREAT orden de alimentación 1,5 1,5 1,0 1,0 1,0 1,0 1,0 0,5 0,5 0,5 0,5 0,5 RS RN TN TO RS RN TN TO RS RN TN TO RS RN TN TO RS RN TN TO Waltz Mud MAB Mapper Mesgen

¿Cómo escribir programas eficientes? Criterios a seguir Los patrones más específicos primero Colocar al principio patrones que reconocen pocos hechos Patrones que reconocen hecho “volátiles” al final

La importancia del orden de los patrones Evitar una explosión combinatoria de reconocimientos parciales (partial matches ) (deffacts informacion (encuentra a c e g) (item a) (item b) (item c) (item d) (item e) (item f) (item g)) (defrule reconoce-1 (encuentra ?x ?y ?z ?w) (item ?x) (item ?y) (item ?z) (item ?w) => (assert (encontrado ?x ?y ?z ?w))) (defrule reconoce-2

Ejemplo explosión combinatoria Total: 29 patrones reconocidos 5 partial matches CLIPS> (reset) CLIPS> (matches reconoce-1) Matches for Pattern 1 f-1 Matches for Pattern 2 f-2 f-3 f-4 f-5 f-6 f-7 f-8 Matches for Pattern 3 Matches for Pattern 4 Matches for Pattern 5 Partial matches for CEs 1 - 2 f-1,f-2 Partial matches for CEs 1 - 3 f-1,f-2,f-4 Partial matches for CEs 1 - 4 f-1,f-2,f-4,f-6 Partial matches for CEs 1 - 5 f-1,f-2,f-4,f-6,f-8 Activations CLIPS>

Ejemplo explosión combinatoria CLIPS> (reset) CLIPS> (matches reconoce-2) Matches for Pattern 1 f-2 f-3 f-4 f-5 f-6 f-7 f-8 Matches for Pattern 2 Matches for Pattern 3 Matches for Pattern 4 Matches for Pattern 5 f-1 Partial matches for CEs 1 - 2 [f-8,f-8],[f-8,f-7],[f-8,f-6] [f-8,f-5],[f-8,f-4],[f-8,f-3] [f-8,f-2],[f-2,f-8],[f-3,f-8] [f-4,f-8],[f-5,f-8],[f-6,f-8] [f-7,f-8],[f-7,f-7],[f-7,f-6] [f-7,f-5],[f-7,f-4],[f-7,f-3] [f-7,f-2],[f-2,f-7],[f-3,f-7] [f-4,f-7],[f-5,f-7],[f-6,f-7] [f-6,f-6], ... En total 49 Partial matches for CEs 1 - 3 [f-8,f-8,f-8],[f-8,f-8,f-7], [f-8,f-8,f-6],[f-8,f-8,f-5], [f-8,f-8,f-4],[f-8,f-8,f-3], [f-8,f-8,f-2],[f-8,f-7,f-8], [f-8,f-7,f-7],[f-8,f-7,f-6] [f-8,f-7,f-5], ... En total 343 Partial matches for CEs 1 - 4 [f-8,f-8,f-8,f-8], [f-8,f-8,f-8,f-7], ... En total 2401 Partial matches for CEs 1 - 5 f-1,f-2,f-4,f-6,f-8 Activations Total 29 patrones reconocidos 2801 partial matches 7 + 49 + 343 + 2401 + 1 = 2801

Colocar test lo más al principio posible Test en los patrones Colocar test lo más al principio posible (defrule tres-puntos-distintos ?p1 <- (punto (x ?x1) (y ?y1)) ?p2 <- (punto (x ?x2) (y ?y2)) ?p3 <- (punto (x ?x3) (y ?y3)) (test (and (neq ?p1 ?p2) (neq ?p2 ?p3) (neq ?p1 ?p3))) => (assert (puntos-distintos (x1 ?x1) (y1 ?y1) (x2 ?x2) (y2 ?y2) (x3 ?x3) (y3 ?y3)))) (defrule tres-puntos-distinto-2 (test (neq ?p1 ?p2)) (test (and (neq ?p2 ?p3) (neq ?p1 ?p3)))

Restricciones mejor que funciones Más eficiente una restricción sobre un valor que una función (defrule color-primario (color ?x&:(or (eq ?x rojo) (eq ?x verde) (eq ?x azul))) => (assert (color-pirmario ?x))) (color ?x&:rojo|verde|azul) (assert (color-primario ?x)))

Variables que ligan varios valores (deftemplate lista (multislot elementos)) (deffacts inicio (lista (elementos a 4 z 2))) (defrule reconoce-listas (lista (elementos $?p $?m $?f)) => (assert (principio ?p)) (assert (mitad ?m)) (assert (final ?f)))

Integración de paradigmas de programación: Otras aproximaciones Integración de paradigmas de programación: El paradigma de programación imperativo (defrule comprueba-si-continua ?fase <- (fase comprueba-continuacion) => (retract ?fase) (printout t “Continua (si/no):”) (bind ?respuesta (read)) (while (and (neq ?respuesta si) (neq ?respuesta no)) do (bind ?respuesta (read))) (if (eq ?respuesta si) then (assert (fase continua)) else (halt)))

Representaciones estructuradas del conocimiento: Otras aproximaciones Representaciones estructuradas del conocimiento: Fikes y Kehler, 1985 Integración de Objetos/frames con reglas Inferencias automáticas: Herencia, demonios Inferencias embebidas en el esquema de representación Ámbito limitado

Otras aproximaciones (frames y reglas) (defmessage-handler persona agnade-hijos (?hijos) (bind ?self:hijos (insert$ ?self:hijos 1 ?hijos))) (defmessage-handler persona agnade-hijos after (?hijos) ;demonio (bind ?conyuge (send ?self get-conyuge)) (bind ?length (length ?hijos)) (bind ?i 1) (while (<= ?i ?length) (bind ?hijo (symbol-to-instance-name (nth$ ?i ?hijos))) (send ?hijo agnade-padres (create$ (send ?self get-nombre) ?conyuge)) (bind ?i (+ 1 ?i)) (defrule hijos-vivos (herederos-de ?n) ?x <- (object (is-a persona) (vivo no)(nombre ?n)) (object (is-a persona)(nombre ?h) (padres $?P ?nombre $?M)(vivo si)) => (send ?x agnade-heredero ?h))

Filtrado Otras aproximaciones Bronston, Farrell, Kant y Martin 1986 Decidir las reglas y los datos que participan en el proceso de reconocimiento: KEE: Las reglas son instancias de clases organizadas en una jerarquía. CLIPS: Reglas organizadas en módulos y visibilidad de hechos OPS5: Filtrado dirigido por objetivos/contextos (MEA)

Otras aplicaciones: Interpretación de RdP Redes de Petri de alto nivel (RAN) Las marcas son datos estructurados Similitud entre RAN y sistemas de reglas {T18 instance: TOOL} {P1 instance: PART machine: M1 tool: T1} PARTS MACHINES TOOLS {P3 machine: M3 {M1 instance: MACHINE part-in-process: tool-in-use:} {M2 {T1 (PART (name P1) (machine M1) (tool T1) (place PARTS)) (defrule LOAD ?p <- (PART (name ?part) (machine ?machine) (tool ?tool) ?m <- (MACHINE (name ?machine) (place MACHINES)) ?t <- (TOOL (name ?tool) (place TOOLS)) => (modify ?p (place PARTS-IN-PROCESS)) (modify ?m (part-in-process ?part) (tool-in-use ?tool) (place BUSY-MACHINES)) (modify ?t (place NIL)) (unit.name <part> machine <machine> tool <tool>) (unit.name <machine>) (unit.name <tool>) <part> <machine> <tool> LOAD (unit.name <part>) (unit.name <machine> part-in-process <part> tool-in-use <tool>) PARTS-IN-PROCESS BUSY-MACHINES

Interpretación de RAN <part> <machine> <tool> LOAD (unit.name <part> machine <machine> tool <tool>) (unit.name <machine>) (unit.name <tool>) (unit.name <machine> part-in-process <part> tool-in-use <tool>) (unit.name <part>) {P1 instance: PART machine: M1 tool: T1} {M1 instance: MACHINE part-in-process: P1 tool-in-use: T1} {P3 machine: M3 {M2 part-in-process: tool-in-use:} {T18 instance: TOOL} LOAD PARTS-IN-PROCESS BUSY-MACHINES PARTS MACHINES TOOLS {T1

Árboles RETE nodos a nodos b {P1 instance: PART machine: M1 tool: T1} instance: MACHINE part-in-process: tool-in-use:} {M2 instance: MACHINE part-in-process: tool-in-use:} {T1 instance: TOOL} MACHINES PARTS {T18 instance: TOOL} 1 <part> P1 <mac.> M1 <tool> T1 <part> P3 <mac.> M3 <tool> T5 2 <part> ? <mac.> M1 <tool> ? <part> ? <mac.> M3 <tool> ? TOOLS <part> P1 <mac.> M1 <tool> T1 <part> P1 <mac.> M3 <tool> T5 <part> ? <mac.> ? <tool> T1 <part> ? <mac.> ? <tool> T18 3 4 4 nodos a nodos b <part> P1 <mac.> M1 <tool> T1 5

Árboles TREAT nodos a Modos de disparo {P1 instance: PART machine: M1 tool: T1} {P3 instance: PART machine: M3 tool: T1} {M1 instance: MACHINE part-in-process: tool-in-use:} {M2 instance: MACHINE part-in-process: tool-in-use:} {T1 instance: TOOL} MACHINES PARTS {T18 instance: TOOL} 1 <part> P1 <mac.> M1 <tool> T1 <part> P3 <mac.> M3 <tool> T5 2 <part> ? <mac.> M1 <tool> ? <part> ? <mac.> M3 <tool> ? TOOLS <part> ? <mac.> ? <tool> T1 <part> ? <mac.> ? <tool> T18 3 nodos a <part> P1 <mac.> M1 <tool> T1 Modos de disparo

Comparación experimental RN: RETE, evitando realizar procesos de búsqueda para eliminar patrones RS: RETE, limitando las búsquedas a las b-memorias TN: TREAT, sin ningún proceso de búsqueda TS: TREAT, con búsqueda de los modos de disparo a eliminar CL: Una implementación clásica en RdpN (Condition membership)

Referencias C. L. Forgy Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem Artificial Intelligence, N . 19, 1982, 17-37 D. P. Miranker TREAT: A Better Match Algorithm for AI Production Systems Proc. of AAAI 87 Conference on AI, 1987, 42-47 L. Brownston, R. Farrell, E. Kant, N. Martin Programming Expert Systems in OPS5. An Introduction to Rule-Based Programming Addison-Wesley, 1985, Capítulo 6, Sección 7.3.1 J. Giarratano, G. Riley Expert Systems, Principles and Programming. Third Edition. International Thomson Company , 1998, Capítulo 11