Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Inteligencia Artificial II Curso 2005–2006
Tema 1: Representacion delconocimiento mediante reglas
Carmen Graciani Dıaz
Jose L. Ruiz Reina
Dpto. de Ciencias de la Computacion e Inteligencia Artificial
Universidad de Sevilla
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.1
Sistemas basados en el conocimiento
x Sistemas basados en el conocimiento:u Programas que resuelven problemas usando un determinado dominio de conoci-
miento
u A veces llamados sistemas expertos
x Ventajas:
u Facil acceso y disponibilidad de conocimiento (experto)
u Coste reducido
u Permanencia
u Fiabilidad y rapidez
u Respuestas no subjetivas
u Tutores
u Explicacion del razonamiento
u Competitivos con expertos humanos
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.2
Sistemas basados en el conocimiento
x Componentes principales de un SBC
u Conocimiento, que necesita ser representado
u Mecanismos que permitan inferir nuevo conocimiento
u Estos componentes deberıan constituir modulos independientes
x Otros componentes:
u Interfaz de usuario
u Explicaciones acerca del conocimiento inferido
u Adquisicion de nuevo conocimiento
u Tutor
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.3
Representacion del conocimiento
x Requisitos de los formalismos de representacion del conocimiento:
u potencia expresiva
u facilidad de interpretacion
u eficiencia deductiva
u posibilidad de explicacion y justificacion
x Algunos formalismos de representacion:
u reglas, redes semanticas, marcos, logicas de descripcion, logica de primer orden, . . .
x Cada formalismo de representacion usa un metodo de inferencia es-pecıfico:
u razonamiento hacia adelante y hacia atras (SLD-resolucion), herencia, tableros,
resolucion, . . .
x En este tema nos centraremos en la representacion del conocimientomediante reglas
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.4
Representacion del conocimiento mediante reglas
x Ejemplos (reglas):
SI la luz del semaforo es verde Y no hay peatones cruzandoENTONCES continua la marcha
SI x es numero natural Y x es parENTONCES x es divisible por 2
SI el reactivo toma color azul Yla morfologıa del organismo es alargada Yel paciente es un posible receptorENTONCES existe una evidencia (0.7) de quela infeccion proviene de pseudomonas.
x Ejemplos (hechos):
La luz del semaforo es verde
El reactivo toma color azul
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.5
Representacion del conocimiento mediante reglas
x Esencialmente, existen dos mecanismos para inferir nuevo conocimientoa partir de un conjunto de reglas
u Razonamiento hacia atras (backward chaining)
u Razonamiento hacia adelante (forward chaining)
x En lo que sigue veremos con detalle ambos mecanismos
u Se estudian mejor desde un punto de vista formal mediante su formulacion logica
(proposicional y primer orden)
x Recomendacion: repasar ”Logica Informatica”, segundo curso y ”Pro-gramacion Declarativa”, tercer curso
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.6
Logica proposicional
x Lenguaje de la logica proposicional
u Sımbolos (variables) proposicionales: p, q, r, luz-verde, peatones-cruzando, . . .
u Conectivas: ¬, ∨, ∧, →, ↔
x Formulas de la logica proposicional
u Los sımbolos son formulas (atomicas)
u Si F1 y F2 son formulas, tambien lo son F1 ∨ F2, F1 ∧ F2, F1 → F2, ¬F1, F1 ↔ F2
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.7
Logica proposicional
x Consecuencia logica:
u Interpretacion: asignacion de valores de verdad (⊤ o ⊥) a las variables proposicio-
nales
u Una interpretacion asigna un valor de verdad a cada formula (por ejemplo, I(F1 →
F2) = ⊥ si I(F1) = ⊤ y I(F2) = ⊥; I(F1 → F2) = ⊤ en caso contrario)
u Consecuencia logica: decimos que {F1, F2, . . . , Fn} |= G si para toda interpretacion I
tal que I(Fi) = ⊤ i = 1, . . . , n, se tiene que I(G) = ⊤
u Ejemplo: {p, q, p ∧ q → r} |= r
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.8
Reglas, hechos, objetivos y bases de conocimiento
x Una regla (proposicional) es una formula proposicional de la forma
p1 ∧ p2 ∧ . . . ∧ pn → q
donde p1, . . . , pn, q son sımbolos proposicionales
u Representaciones alternativas: q ← p1, . . . , pn, SI p1 Y p2 Y ...Y pn ENTONCES q
u Cabeza y cuerpo de una regla
x Un hecho (proposicional) es una variable proposicional
u Un hecho puede verse como una regla sin cuerpo
u Representacion alternativa: p←
x Una base de conocimiento es un conjunto de hechos y reglas
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.9
Un ejemplo ”de juguete”: fuga de agua
x Situacion:
COCINA
BAÑO RECIBIDOR
VENTANA
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.10
Un ejemplo ”de juguete”: fuga de agua
x Base de conocimiento FA:fuga_en_ba~no ← recibidor_mojado, cocina_secaproblema_en_cocina ← recibidor_mojado, ba~no_secono_agua_exterior ← ventana_cerradano_agua_exterior ← no_lluevefuga_en_cocina ← problema_en_cocina, no_agua_exterior
recibidor_mojadoba~no_secoventana_cerrada
x Ejemplo de consecuencia logica: FA |= fuga en cocina
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.11
Deduccion en una base de conocimiento
x Problema: implementar un algoritmo tal que dada una base de conoci-miento BC y un atomo p, responda a la pregunta ¿BC |= p?
x Derivabilidad respecto de una base de conocimiento:
u Regla de inferencia: Modus Ponens:
p1 p2 . . . pn p1 ∧ p2 ∧ . . . ∧ pn → q
q
u Dada una base de conocimiento BC y un sımbolo de proposicion p, decimos que
BC ⊢ p si existe una secuencia de formulas F1, . . . , Fn tales que Fn = p y cada Fi esta en
BC o se obtiene de formulas anteriores mediante aplicacion de Modus Ponens
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.12
Deduccion en una base de conocimiento
x Teorema: BC |= p ⇐⇒ BC ⊢ p
u Este teorema nos sugiere como implementar algoritmos para responder preguntas
a una base de conocimiento
u Esencialmente, se trata de implementar procesos que buscan una secuencia de apli-
caciones validas de la regla de Modus Ponens que obtenga p como formula final
u Por tanto, algoritmos de busqueda
x Esta busqueda puede realizarse:
u Hacia adelante: partiendo de BC
u Hacia atras: partiendo de p
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.13
Encadenamiento hacia atras proposicional
FUNCION ENCADENAMIENTO-HACIA-ATRAS-PROP(BC,p)Devolver ENCADENAMIENTO-HACIA-ATRAS-PROP-REC(BC,{p})
FUNCION ENCADENAMIENTO-HACIA-ATRAS-PROP-REC(BC,OBJETIVOS)1. Si OBJETIVOS esta vacıo, devolver EXITO y terminar2. Hacer ACTUAL igual a SELECCIONA-UNO(OBJETIVOS)3. Para cada elemento q ← p1, ..., pn (n≥0) en BC tal que q=ACTUAL
3.1 Hacer NUEVOS-OBJETIVOS igual a {p1, ..., pn} ∪ (OBJETIVOS\{ACTUAL})3.2 Hacer RESULTADO igual a
ENCADENAMIENTO-HACIA-ATRAS-PROP-REC(BC,NUEVOS-OBJETIVOS)3.3 Si RESULTADO es EXITO, devolverlo y terminar.
4. Devolver FALLO
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.14
Encadenamiento hacia atras proposicional
x Es facil ver que si ENCADENAMIENTO-HACIA-ATRAS-PROP(BC,p) devuelveEXITO, entonces BC ⊢ p
x Se trata de una busqueda en profundidad mediante backtracking
x No es completa (podrıa ser que BC ⊢ p y que el algoritmo no devolvieraEXITO, debido a la posible existencia de ramas infinitas)
x Estrategia de busqueda:
u Busqueda en profundidad
u Seleccion del objetivo a resolver: cualquier funcion de seleccion valdrıa
u Orden de uso de las reglas de la base de conocimiento
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.15
Logica de primer orden
x Lenguaje de la logica de primer orden
u Sımbolos de variable: x, y, . . .
u Sımbolos de funcion (con su aridad): f , g, . . .
u Sımbolos de predicado (con su aridad): p, q , . . .
u Conectivas: ¬, ∨, ∧, →, ↔
u Cuantificadores: ∀, ∃
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.16
Logica de primer orden
x Terminos de la logica de primer orden
u Las variables son terminos
u Si t1, . . . , tn son terminos y f es un sımbolo de funcion de aridad n, entonces
f(t1, . . . , tn) es un termino
x Formulas de la logica de primer orden
u Si t1, . . . , tn son terminos y p es un sımbolo de funcion de aridad n, entonces p(t1, . . . , tn)
es una formula (atomica)
u Si F1 y F2 y son formulas y x es una variable, tambien lo son F1∨F2, F1∧F2, F1 → F2,
¬F1, F1 ↔ F2, ∀xF1 y ∃xF1
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.17
Logica de primer orden
x Consecuencia logica:
u Interpretacion: un conjunto (universo) junto con una asignacion de funciones y
relaciones concretas, en ese universo, a los sımbolos de funcion y predicado
u Una interpretacion asigna un valor de verdad a cada formula (repasar LI)
u Consecuencia logica: decimos que {F1, F2, . . . , Fn} |= G si para toda interpretacion I
tal que I(Fi) = ⊤, para todo i = 1, . . . , n, se tiene que I(G) = ⊤
u Ejemplo:
{∀x(antecesor(y, x)→ quiere(x, y)), antecesor(Pedro, Juan)} |= quiere(Juan, Pedro)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.18
Reglas, hechos, y bases de conocimiento
x Una regla es una formula de primer orden de la forma
P1 ∧ P2 ∧ . . . ∧ Pn → Q
donde P1, . . . , Pn, Q son formulas atomicas
u Las variables de una regla se interpretan como universalmente cuantificadas
u Representaciones alternativas: como en el caso proposicional
x Un hecho es una formula atomicau Como en el caso proposicional, un hecho puede verse como una regla sin cuerpo
x Una base de conocimiento es un conjunto de hechos y reglas
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.19
Ejemplo: una pequena base de conocimiento
R1: hereda_de(x,y) ← bueno(x),rico(y),quiere(x,y)R2: quiere(x,y) ← amigo(x,y)R3: quiere(x,y) ← antecesor(y,x)R4: antecesor(x,y) ← progenitor(x,y)R5: antecesor(x,y) ← progenitor(x,z),progenitor(z,y)H1: progenitor(padre(x),x)H2: rico(Pedro)H3: rico(padre(padre(Juan)))H4: amigo(Juan,Pedro)H5: bueno(Juan)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.20
Deduccion en una base de conocimiento
x Sustituciones: θ = {x1 7→ t1, . . . , xn 7→ tn}
u Si Q es una formula atomica, θ(Q) es la formula obtenida sustituyendo cada aparicion
de xi en Q por ti
x Regla de inferencia: Modus Ponens Generalizado
P1 P2 . . . Pn P ′1∧ P ′
2∧ . . . ∧ P ′n→ Q
θ(Q)
donde θ es una sustitucion tal que θ(Pi) = θ(P ′i )
u Ejemplo: a partir de antecesor(y, x)→ quiere(x, y) y de antecesor(Pedro, Juan) se deduce
quiere(Juan, Pedro) (mediante la sustitucion θ = {x 7→ Juan, y 7→ Pedro})
u Dada una base de conocimiento BC y una formula atomica P , decimos que BC ⊢ P si
existe una secuencia de formulas F1, . . . , Fn tales que Fn = P y cada Fi esta en BC o se
obtiene de formulas anteriores mediante aplicacion de Modus Ponens Generalizado
x Teorema: BC |= P ⇐⇒ BC ⊢ P
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.21
Razonamiento hacia atras con reglas de primer orden
x Podemos aplicar la misma idea que en el caso proposicional para di-senar un algoritmo de encadenamiento hacia atras basado en la regla deModus Ponens Generalizado
x Dado un objetivo Q y una regla Q1 ∧ . . . ∧ Qn → P , los nuevos objetivospodrıan ser {θ(Q1), . . . , θ(Qn)} si encontramos una sustitucion θ tal queθ(P ) = θ(Q)
u Dicha sustitucion se denomina unificador de P y Q
x Por tanto, se necesita un algoritmo que dado el objetivo y la cabeza dela regla, encuentre un unificador, si es que existe
u Dicho algoritmo se denomina algoritmo de unificacion
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.22
Unificacion
x Ejemplos:
Objetivo Cabeza de regla Unificador
amigo(x,Juan) amigo(Antonio,y) {x 7→ Antonio,y 7→ Juan}progenitor(padre(x),x) progenitor(y,Juan) {x 7→ Juan,y 7→ padre(Juan)}p(f(x),g(y)) p(z,z) No existep(x) q(y) No existequiere(x,z) quiere(padre(y),x) {x 7→ padre(Juan),y 7→ Juan,z 7→ padre(Juan)}quiere(x,z) quiere(padre(y),x) {x 7→ padre(y),z 7→ padre(y)}
x En general, dados dos atomos podrıan no ser unificables, o si son unifi-cables pueden tener mas de un unificador
u Aunque se puede probar que si son unificables existe un unificador mas general que
cualquier otro unificador
u Ejemplo: {x 7→ padre(y), z 7→ padre(y)} es mas general que {x 7→ padre(Juan), y
7→ Juan, z 7→ padre(Juan)}
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.23
Algoritmo de unificacion
FUNCION UNIFICA(S,T)Devolver UNIFICA-REC(S,T,{})
FUNCION UNIFICA-REC(S,T,θ)1. Si S = T, devolver {}2. Si no, si S es variable, entonces:
2.1 Si S ocurre en T, devolver FALLO2.2 Si S no ocurre en T, devolver {S 7→ T}
3. Si no, si T es variable, entonces devolver UNIFICA-REC(T,S,θ)4. Si no, sea S=f(S1,...,Sn) y T=g(T1,...,Tm)
4.1 Si f6=g o n6=m, devolver FALLO4.2 En caso contrario, devolver UNIFICA-REC-LISTA([S1,...,Sn],[T1,...,Tn],θ)
FUNCION UNIFICA-REC-LISTA(LS,LT,θ)1. Si LS es la lista vacıa, devolver θ2. Si no, sea σ = UNIFICA-REC(PRIMERO(LS),PRIMERO(LT),θ)
2.1 Si σ es igual a FALLO, devolver FALLO2.2 En caso contrario, devolver
UNIFICA-REC-LISTA(σ(RESTO(LS)),σ(RESTO(LT)),COMPONER(θ,σ))u Nota: COMPONER(S1,S2) obtiene la sustitucion que actua como si se aplicara S1 y
a continuacion S2. Por ejemplo: COMPONER({x 7→ f(y),z 7→ g(u,v)}, {y 7→ k(u)}) =
{x 7→ f(k(u)), z 7→ g(u,v), y 7→ k(u)}IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.24
Algoritmo de unificacion
x Ejemplo:
UNIFICA(quiere(x,z),quiere(padre(y),x)) ⇒UNIFICA-REC(quiere(x,z),quiere(padre(y),x),{}) ⇒UNIFICA-REC-LISTA({x,z},{padre(y),x},{}) ⇒
[UNIFICA-REC(x,padre(y),{}) = {x 7→ padre(y)}]UNIFICA-REC-LISTA({z},{padre(y)},{x 7→ padre(y)}) ⇒
[UNIFICA-REC(z,padre(y),{x 7→ padre(y)}) = {z 7→ padre(y)}]UNIFICA-REC-LISTA({},{},{x 7→ padre(y),z 7→ padre(y)}) ⇒
{x 7→ padre(y),z 7→ padre(y)}
x Teorema: UNIFICA(S,T) no devuelve FALLO si y solo si S y T se puedenunificar; en ese caso, devuelve un unificador de S y T mas general quecualquier otro unificador
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.25
SLD-resolucion
x Combinando unificacion y encadenamiento hacia atras proposicional po-demos obtener un procedimiento que permite responder a preguntas deltipo ¿BC |= P?
u En concreto, el algoritmo encontrara sustituciones θ tal que BC |= θ(P ) (respuestas)
u Este algoritmo se denomina de SLD-resolucion
x Como en el caso proposicional, el algoritmo realiza una busqueda enprofundidad (backtracking)
u Como es habitual, esta busqueda se puede representar mediante un arbol
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.26
Un ejemplo de arbol SLD
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.27
Arboles SLD
x Un arbol SLD representa el proceso de busqueda
u Los nodos de un arbol representan los objetivos pendientes (atomos por deducir)
x Nodo raız: objetivo inicial
x Nodos finales:u Un nodo de fallo se obtiene cuando su primer atomo no es unificable con la cabeza
de ninguna regla o hecho
u Un nodo de exito es aquel en el que no tiene objetivos pendientes
x Ramas de exitou Una rama de exito es aquella que termina en un nodo de exito
u Cada rama de exito ”construye” una sustitucion (respuesta) que se va ”concretan-
do” mediante los sucesivos pasos de unificacion
u Cada rama de exito representa una SLD-refutacion
x Renombrado de reglas y hechosIA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.28
Algoritmo de SLD-resolucion
FUNCION SLD-RESOLUCION(BC,Q)Devolver SLD-RESOLUCION-REC(BC,{Q},{})
FUNCION SLD-RESOLUCION-REC(BC,OBJETIVOS,θ)1. Si OBJETIVOS esta vacıo, devolver la lista unitaria θ2. Hacer RESPUESTAS igual a la lista vacıa
Hacer ACTUAL igual θ(SELECCIONA-UNO(OBJETIVOS))3. Para cada elemento P ← P1, ..., Pn en BC (renombrado con variables nuevas)
tal que σ=UNIFICA(P,ACTUAL) es distinto de FALLO3.1 Hacer NUEVOS-OBJETIVOS igual a {P1, ..., Pn} ∪ (OBJETIVOS\{ACTUAL})3.2 A~nadir a RESPUESTAS el resultado de
SLD-RESOLUCION-REC(BC,NUEVOS-OBJETIVOS,COMPONER(θ,σ))4. Devolver RESPUESTAS
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.29
Propiedades del algoritmo de SLD-resolucion
x Propiedades:
u Teorema (correccion): Si θ ∈ SLD-RESOLUCION(BC, P ) entonces BC ⊢ θ(P )
u Teorema: Si BC ⊢ σ(P ), entonces existe una SLD-refutacion a partir de P que
construye una respuesta θ tal que σ es ”un caso particular” de θ
u Problema: el algoritmo de SLD-resolucion podrıa no encontrar tal SLD-refutacion
debido a la existencia de ramas infinitas
x Estrategia de busqueda:
u En nuestro pseudocodigo, busqueda en profundidad
u Seleccion del objetivo a resolver: cualquier funcion de seleccion servirıa
u Orden en el que se usan las reglas y hechos de la BC
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.30
Programacion logica
x Una base de conocimiento puede verse como un programa declarativo
u Programa logico: conjunto de reglas y hechos
u Declarativo: ”que es” en lugar de ”como se hace”
x Las respuestas que calcula el algoritmo de SLD-resolucion pueden versecomo la salida que calcula el programa logico
x Ejemplo de programa logico: concatenacion
R1: concatena(c(x, y), z, c(x, v)) ← concatena(y, z, v)H1: concatena(NIL, x, x)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.31
Arbol SLD
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.32
Arbol SLD
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.33
Programacion logica y PROLOG
x PROLOG es el lenguaje de programacion mas conocido basado en elparadigma de la programacion logica
x Diferencias entre PROLOG y Programacion logica pura
u Notacion :- en lugar de ←
u Estrategia de busqueda: seleccion del primer atomo; reglas y hechos usados en el
orden en el que aparecen en el problema
u Se amplıa la expresividad: negacion como fallo
u Control: corte
u Unificacion sin occur-check
u Funciones predefinidas: aritmetica,entrada/salida,. . .
u Azucar sintactico: operadores
u . . .
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.34
Implementacion en PROLOG de la deduccion hacia atras
x SBCs implementados en PROLOG:
u Debido a que el encadenamiento hacia atras forma parte del propio interprete,
PROLOG es un lenguaje especialmente adecuado para la implementacion de SBCs
basados en reglas con razonamiento hacia atras
x SBC: BC+motor de inferencia+interfaz de usuario
x Veamos un ejemplo de como se implementa un SBC basico en PROLOG
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.35
Un SBC basico en PROLOG
x Azucar sintactico para reglas y hechos
:- op(875, xfx, hecho).:- op(875, xfx, #).:- op(825, fx, si).:- op(850, xfx, entonces).:- op(775, xfy, y). % Asociatividad a la derecha
x Ejemplo de BC:
r1 # si bueno(X) y rico(Y) y quiere(X,Y) entonces hereda_de(X,Y).
r2 # si amigo(X,Y) entonces quiere(X,Y).
r3 # si antecesor(Y,X) entonces quiere(X,Y).
r4 # si progenitor(X,Y) entonces antecesor(X,Y).
r5 # si progenitor(X,Z) y progenitor(Z,Y) entonces antecesor(X,Y).
h1 hecho progenitor(padre(X),X).
h2 hecho rico(pedro).
h3 hecho rico(padre(padre(juan))).
h4 hecho amigo(juan,pedro).
h5 hecho bueno(juan).
x Nota: Las reglas y hechos de la base de conocimiento son hechos Prolog
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.36
Un SBC basico en PROLOG
x Programa PROLOG:
se_deduce(P) :- _ hecho P.
se_deduce(P) :- _ # si C entonces P, se_deduce(C).
se_deduce(P1 y P2) :- se_deduce(P1), se_deduce(P2).
x Ejemplo:
?- se_deduce(hereda_de(X,Y)).X = juanY = pedro ;X = juanY = padre(padre(juan))Yes?- se_deduce(hereda_de(pedro,juan)).No?-
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.37
SBC en PROLOG con justificacion de respuestas
x Estructura de las pruebas:
P es cierto esta_afirmado_por F.P es cierto es_consecuencia_de R porque Prueba.Prueba1 y Prueba2.
x Operadores:
:- op(850, xfx, es_consecuencia_de).:- op(850, xfx, esta_afirmado_por).:- op(800, xfx, porque).:- op(750, xfx, es).
x
Arboles de prueba
x Diferencia entre arbol SLD y arbol de prueba
u
Arbol SLD: Refleja el proceso de busqueda de la deduccion
u
Arbol de prueba: Justifica la deduccion encontradaIA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.38
SBC en PROLOG con justificacion de respuestas
se_deduce(P, P es cierto esta_afirmado_por F) :- F hecho P.
se_deduce(P, P es cierto es_consecuencia_de R porque Pr) :-R # si C entonces P, se_deduce(C, Pr).
se_deduce(P1 y P2, Prueba1 y Prueba2) :-se_deduce(P1, Prueba1), se_deduce(P2, Prueba2).
se_deduce(P) :- se_deduce(P,Prueba), escribe_prueba(Prueba).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.39
Ejemplo de SBC en PROLOG con justificacion de respuestas
?- se_deduce(hereda_de(X,Y)).
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h2, sabemos que rico(pedro),
y
por h4, sabemos que amigo(juan, pedro),
luego, segun r2 se concluye que quiere(juan, pedro),
luego, segun r1 se concluye que hereda_de(juan, pedro),
X = juan
Y = pedro ;
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h3, sabemos que rico(padre(padre(juan))),
y
por h1, sabemos que progenitor(padre(padre(juan)), padre(juan)),
y
por h1, sabemos que progenitor(padre(juan), juan),
luego, segun r5 se concluye que antecesor(padre(padre(juan)), juan),
luego, segun r3 se concluye que quiere(juan, padre(padre(juan))),
luego, segun r1 se concluye que hereda_de(juan, padre(padre(juan))),
X = juan
Y = padre(padre(juan))
Yes
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.40
Ampliando funcionalidades del SBC
x Interfaz de usuario: hechos preguntables
x Preguntas ¿Como?
x Preguntas ¿Por que?
x Navegacion en la prueba
x Razonamiento probabilıstico
x Objetivos retardables
x Aprendizaje
x En el anexo se muestra un SBC implementado en PROLOG que incor-pora alguna de estas funcionalidades
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.41
Ejemplo de sesion (I):
?- se_deduce(hereda_de(X, Y)).
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): porque.
=== Porque:
La regla r2 dice que probando:
amigo(juan, pedro)
se tiene:
quiere(juan, pedro)
Repito:
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): porque.
=== Porque:
La regla r1 dice que probando:
bueno(juan)y rico(pedro)y quiere(juan, pedro)
se tiene:
hereda_de(juan, pedro)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.42
Ejemplo de sesion (II):
Repito:
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): si.
****** Se ha encontrado respuesta afirmativa:
------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 1.
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h2, sabemos que rico(pedro),
y
por usted, sabemos que amigo(juan, pedro),
luego, segun r2 se concluye que quiere(juan, pedro),
luego, segun r1 se concluye que hereda_de(juan, pedro),
X = juan
Y = pedro
Yes
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.43
Ejemplo de sesion (III):
?- se_deduce(hereda_de(X, Y)).
****** Se ha encontrado respuesta afirmativa:
------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 2.
Por r1, hereda_de(juan, pedro) es consecuencia de:
1: bueno(juan)
2: rico(pedro)
3: quiere(juan, pedro)
Posibles respuestas: [seguir, 1, 2, 3] (seguidas de un punto): 3.
Por r2, quiere(juan, pedro) es consecuencia de:
1: amigo(juan, pedro)
Posibles respuestas: [seguir, arriba, 1] (seguidas de un punto): 1.
amigo(juan, pedro) esta afirmado por usted.
Posibles respuestas: [seguir, arriba] (seguidas de un punto): seguir.
¿Es cierto amigo(juan, padre(padre(juan)))?
Posibles respuestas: [si, no, porque] (seguidas de un punto): no.
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.44
Ejemplo de sesion (IV):
****** Se ha encontrado respuesta afirmativa:
------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 1.
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h3, sabemos que rico(padre(padre(juan))),
y
por h1, sabemos que progenitor(padre(padre(juan)), padre(juan)),
y
por h1, sabemos que progenitor(padre(juan), juan),
luego, segun r5 se concluye que antecesor(padre(padre(juan)), juan),
luego, segun r3 se concluye que quiere(juan, padre(padre(juan))),
luego, segun r1 se concluye que hereda_de(juan, padre(padre(juan))),
X = juan
Y = padre(padre(juan))
Yes
?-
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.45
Deduccion hacia adelante
x En contraposicion al encadenamiento hacia atras, podemos aplicar laregla de Modus Ponens Generalizado hacia adelante
u A partir de los hechos, y usando las reglas, obtener nuevos hechos
u De la misma manera, los hechos deducidos permiten obtener nuevos hechos
x Problemas adecuados para razonar hacia adelante
u Monitorizacion y control
u Problemas dirigidos por los datos
u Sin necesidad de explicacion
x Problemas adecuados para razonar hacia atras
u Diagnostico
u Problemas dirigidos por los objetivos
u Interaccion/Explicacion al usuario
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.46
Algoritmo de encadenamiento hacia adelante
FUNCION ENCADENAMIENTO-HACIA-ADELANTE(BC,P)1. Hacer DEDUCIDOS igual a vacıo2. Para cada elemento Q ← P1, ..., Pn en BC (renombrado con variables nuevas)
2.1 Para cada θ tal que θ(Pi) = θ(P ′i ) para ciertosP ′i en BC, i=1,...,n,2.1.1 Hacer Q’=θ(Q)2.1.2 Si Q’ (o un renombrado de Q’) no esta ni en BC ni en DEDUCIDOS,
a~nadir Q’ a DEDUCIDOS2.1.3 Si σ=UNIFICA(P,Q’) es distinto de FALLO,
devolver σ y terminar3. Si DEDUCIDOS es vacıo, devolver FALLO y terminar.
en caso contrario, a~nadir DEDUCIDOS a BC y volver al punto 1
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.47
Algoritmo de encadenamiento hacia adelante
ENCADENAMIENTO-HACIA-ADELANTE(BC,hereda_de(x,y))
H6 | antecesor(padre(x), x) | R4 {x1 7→ padre(x), y1 7→ x} H1H7 | antecesor(padre(padre(x)), x) | R5 {x1 7→ padre(padre(x2)),
| | z1 7→ padre(x2), y1 7→ x2},| | H1 {x 7→ padre(x2)}, H1 {x 7→ x2}
H8 | quiere(Juan, Pedro) | R2 {x1 7→ Juan, y1 7→ Pedro} H4
H9 | quiere(x, padre(x)) | R3 {x1 7→ x, y1 7→ padre(x)} H6H10 | quiere(x, padre(padre(x))) | R3 {x1 7→ x, y1 7→ padre(padre(x))} H9H11 | hereda_de(Juan, Pedro) | R1 {x1 7→ Juan, y1 7→ Pedro}, H5, H2, H8
θ = {x 7→ Juan, y 7→ Pedro}
H12 | hereda_de(Juan, padre(padre(Juan))) | R1 {x1 7→ Juan, y1 7→ padre(padre(Juan))},| | H5, H3, H10 {x 7→ Juan}
θ = {x 7→ Juan, y 7→ padre(padre(Juan))}
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.48
Sistemas de produccion
x Paradigma de los sistemas de produccion
u Hechos: pieza basica de informacion
u Reglas: describen el comportamiento del programa en funcion de la informacion
existente
x Modelo de hecho:
<ındice>: <sımbolo>(<elemento>*)
x Modelo de regla:
<Nombre>:SI <Condicion>*ENTONCES
<Accion>*
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.49
Elementos de una regla
x Condiciones acerca de:u Existencia de cierta informacion: <patron de hecho>*
u Relaciones entre datos
x Acciones:u Incluir nueva informacion: INCLUIR: <hecho>*
u Eliminar informacion: ELIMINAR: <hecho>*
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.50
Ejemplo de sistema de produccion (I)
Base de Hechos:1: Tiene(pelos)2: Tiene(pezu~nas)3: Tiene(rayas_negras)
Base de Reglas:Jirafa:SI Es(ungulado)
Tiene(cuello_largo)ENTONCES
INCLUIR: Es(jirafa)
Cebra:SI Es(ungulado)
Tiene(rayas_negras)ENTONCES
INCLUIR: Es(cebra)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.51
Ejemplo de sistema de produccion (II)
Ungulado_1:SI Es(mamıfero)
Tiene(pezu~nas)ENTONCES
INCLUIR: Es(ungulado)
Ungulado_2:SI Es(mamıfero)
Rumia()ENTONCES
INCLUIR: Es(ungulado)
Mamıfero_1:SI Tiene(pelos)ENTONCES
INCLUIR: Es(mamıfero)
Mamıfero_2:SI Da(leche)ENTONCES
INCLUIR: Es(mamıfero)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.52
Razonamiento hacia adelante
x Componentes:
u Base de hechos (memoria de trabajo). Dinamica
u Base de reglas. Estatica
u Motor de inferencia (produce los cambios en la memoria de trabajo)
x Elementos adicionales:u Algoritmo para calcular eficientemente las reglas cuyas condiciones se satisfacen en
cada momento (equiparacion de patrones)
u Metodo para decidir en cada momento que regla de las activadas debe actuar (re-
solucion de conflictos)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.53
Ciclo de ejecucion
x Construccion de la agenda: Conjunto de activaciones
u Activacion: regla para la que existen hechos que satisfacen sus condiciones (valores
de comodines)
x Seleccion de una regla cuya activacion se encuentra en la agenda
x Se llevan a cabo las acciones de la regla
x El ciclo se repite hasta que no existen mas activaciones en la agenda
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.54
Ciclo de ejecucion
Reglas
Equiparacion de patrones
Agenda
Hechos
Disparo
Resolucion de conflictos
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.55
Resolucion de conflictos
x Estrategias mas comunes:
u Una activacion solo se produce una vez
u La primera de la pila
u Aleatorio
u Mas especıfica (numero de condiciones)
u Menos utilizada
u Mejor (pesos)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.56
Tabla de seguimiento
I Base de Hechos E Agenda D
1 Tiene(pelos) 0 Mamıfero 1: 1 1
2 Tiene(pezu~nas) 0
3 Tiene(rayas negras) 0
4 Es(mamıfero) 1 Ungulado 1: 4,2 2
5 Es(ungulado) 2 Cebra: 5,3 3
6 Es(cebra) 3
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.57
Comodines: anonimos, simples y multiples
x Comodın simple: ?x, ?y, ?elemento, ?
x Comodın multiple: $?x, $?y, $?elemento, $?
Base de Hechos:1: Lista(Mar Ana Luis Pepe)2: Alumno(Mar)3: Alumno(Ana 2 3 9)4: Alumno(Luis)5: Alumno(Pepe 3)
Base de Reglas:Elimina:SI Alumno(?n ? $?)
Lista($?i ?n $?f)ENTONCES
ELIMINAR: Lista(?i ?n ?f)INCLUIR: Lista(?i ?f)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.58
Tabla de seguimiento
Base de Hechos E S Agenda D S
1: Lista(Mar Ana Luis Pepe) 0 1
2: Alumno(Mar) 0
3: Alumno(Ana 2 3 9) 0 Elimina: 3,1 (?n7→Ana ?i7→Mar ?f7→Luis Pepe) 1
4: Alumno(Luis) 0
5: Alumno(Pepe 3) 0 Elimina: 5,1 (?n7→Pepe ?i7→Mar Ana Luis ?f7→) 1
6: Lista(Mar Ana Luis) 1 2 Elimina: 3,6 (?n7→Ana ?i7→Mar ?f7→Luis) 2
7: Lista(Mar Luis) 2
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.59
Mundo de los bloques
Base de Hechos:1: Pila(a b c)2: Pila(d e f)3: Objetivo(c sobre e)
Base de Reglas:Mover_sobre_bloque:SI Objetivo(?bl1 sobre ?bl2)
Pila(?bl1 $?r1)Pila(?bl2 $?r2)
ENTONCESELIMINAR: Objetivo(?bl1 sobre ?bl2) Pila(?bl1 ?r1) Pila(?bl2 ?r2)INCLUIR: Pila(?r1) Pila(?bl1 ?bl2 ?r2)
Mover_al_suelo:SI Objetivo(?bl sobre suelo)
Pila(?bl $?r)ENTONCES
ELIMINAR: Objetivo(?bl sobre suelo) Pila(?bl ?r)INCLUIR: Pila(?r) Pila(?bl)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.60
Mundo de los bloques
Liberar_bloque:SI Objetivo(?bl sobre ?)
Pila(?cima $? ?bl $?)ENTONCES
INCLUIR: Objetivo(?cima sobre suelo)
Liberar_bloque_base:SI Objetivo(? sobre ?bl)
Pila(?cima $? ?bl $?)ENTONCES
INCLUIR: Objetivo(?cima sobre suelo)
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.61
Tabla de seguimiento
Base de Hechos E S Agenda D
1: Pila(a b c) 0 2
2: Pila(d e f) 0 6
3: Objetivo(c sobre e) 0 7 Liberar bloque base: 3,2 (?bl7→e ?cima7→d) 5
Liberar bloque: 3,1 (?bl7→c ?cima7→a) 1
4: Objetivo(a sobre suelo) 1 2 Mover al suelo: 4,1 (?bl7→a ?r7→b c) 2
5: Pila(b c) 2 4 Liberar bloque: 3,5 (?bl7→c ?cima7→b) 3
6: Pila(a) 2
7: Objetivo(b sobre suelo) 3 4 Mover al suelo: 7,5 (?bl7→b ?r7→c) 4
8: Pila(c) 4 7
9: Pila(b) 4
10: Objetivo(d sobre suelo) 5 6 Mover al suelo 10,2 (?bl7→d ?r7→e f) 6
11: Pila(e f) 6 7 Mover sobre bloque: 3,8,11 7
(?bl17→c ?bl27→e ?r17→ ?r27→f)
12: Pila(d)
13: Pila() 7
14: Pila(c e f) 7
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.62
Equiparacion de patrones
x Algoritmo de fuerza bruta
Por cada regla Ri hacerPor cada patron de hecho Pj en Ri hacer
Por cada hecho Hk en la memoria de trabajo hacerComprobar si Pj equipara con Hk
Si todos los patrones tienen equiparacionincluir en la agenda todas las posibles
activaciones de la regla Ri
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.63
El algoritmo RETE
x Optimiza la construccion de la agenda en cada vuelta del ciclo de eje-cucion.
u El disparo de una regla produce, generalmente, pocos cambios en la memoria de
trabajo.
u Un mismo patron de hecho suele utilizar en varias reglas.
x Construye y mantiene el grafo enraizado, dirigido y acıclico Rete:
u Nodos: Representan patrones de hechos (menos la raız)
u Caminos: Representan las condiciones de una regla (desde la raiz)
x Cada nodo contiene informacion acerca de los hechos que equiparan conlos patrones de los nodos desde la raız (incluido el mismo), junto conlas asociaciones necesarias de las distintas variables.
x Al incluir/eliminar un hecho de la memoria de trabajo se envıa la in-formacion desde la raız, se propaga hacia las hojas y se modifica lainformacion de los nodos de manera adecuada.
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.64
RETE
R1: INCLUIR: H1(2 1)SI H1(?x ?y) tal que ?y > 3 H1(2 4)
H2(?y ?z ?z) H2(4 3 3)ENTONCES ... H2(5 9 9)
activar R1
?y (2 el.) = ?y (1 el.)
?y (2 el.) > 3 ?z (2 el.) = ?z (3 el.)
Entrada
H1 H2
1: ?x = 2, ?y = 4 2: ?y = 4, ?z = 33: ?y = 5, ?z = 9
1,2: ?x = 2, ?y = 4, ?z = 3
1,2: ?x = 2, ?y = 4, ?z = 3
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.65
RETE
R2 INCLUIR: H3(3 1 8)SI H2(?y ?z ?z) H3(9)
H3(?z $?)ENTONCES ...
activar R1
?y (2 el.) > 3 ?z (2 el.) = ?z (3 el.)
H2 H3
activar R2
2,4: ?y = 4, ?z = 3.3,5: ?y = 5, ?z = 9.
2,4: ?y = 4, ?z = 3.3,5: ?y = 5, ?z = 9.
H1
1: ?x = 2, ?y = 4
1,2: ?x = 2, ?y = 4, ?z = 3
1,2: ?x = 2, ?y = 4, ?z = 3
?y (H1) = ?y (H2) ?z (H2) = ?z (H3)
2: ?y = 4, ?z = 33: ?y = 5, ?z = 9
4: ?z = 3.4: ?z = 9.
Entrada
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.66
Clips
x CLIPS ≡ C Language Integrated Production Systems
u http://www.ghg.net/clips/CLIPS.html
x Lenguaje basado en reglas de produccion.
x Desarrollado en el Johnson Space Center de la NASA.
x Relacionado con OPS5 y ART
x Caracterısticas:u Conocimiento: Reglas, objetos y procedimental
u Portabilidad: implementado en C
u Integracion y Extensibilidad: Con programas en C, Java, FORTRAN, ADA...
u Verificacion y Validacion
u Documentacion
u Bajo coste: software libre
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.67
Bibliografıa
x Russel, S. y Norvig, P. Artificial Intelligence: A Modern Approach(2nd edition) (Prentice-Hall, 2003)
x Giarrantano, J.C. y Riley, G. Expert Systems Principles and Program-ming (3 ed.) (PWS Pub. Co., 1998)
x Lucas, P. y Van Der Gaag, L. Pinciples of Expert systems (Addison–Wesley Publishers Co., 1991)
x Curso ”Logica Informatica” 2004–05,http://www.cs.us.es/cursos/li
x Curso ”Programacion Declarativa” 2005–06,http://www.cs.us.es/cursos/pd
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.68
Inteligencia Artificial II Curso 2005–2006
Tema 1 (anexo): SBC en Prolog
Dpto. de Ciencias de la Computacion e Inteligencia Artificial
Universidad de Sevilla
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.69
Un pequeno sistema basado en el conocimiento: sbc.pl (I)
% ============================================
% sbc.pl
% Un peque~no sistema basado en el conocimiento
% ============================================
%%%%%%%%%%% Representacion del conocimiento
% La representacion interna de una regla debe ser:
%
% #
% / \
% / \
% Id entonces
% / \
% / \
% si Afirmacion
% |
% Cond
% Cond puede ser una combinacion, usando ’o’ o ’y’, de hechos (la disyuncion con prioridad mayor).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.70
Un pequeno sistema basado en el conocimiento: sbc.pl (II)
% Ademas los hechos se deben representar internamente como:
%
% hecho
% / \
% / \
% Id Afirmacion
:- op(875, xfx, hecho).
:- op(875, xfx, #).
:- op(825, fx, si).
:- op(850, xfx, entonces).
:- op(800, xfy, o). % Asociatividad a la derecha
:- op(775, xfy, y). % Asociatividad a la derecha
%%%%%%%%%%%%%%%%%%%% Representacion de las pruebas
% P es cierto esta_afirmado_por H (H es un numero de hecho o usted).
% P es_consecuencia_de R porque Prueba.
:- op(850, xfx, es_consecuencia_de).
:- op(850, xfx, esta_afirmado_por).
:- op(800, xfx, porque).
:- op(750, xfx, es).
:- dynamic respuesta/2.
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.71
Un pequeno sistema basado en el conocimiento: sbc.pl (III)
%%%%%%%%%%%%% Motor de inferencia
se_deduce(P) :-
se_deduce(P,[],Prueba),
menu,
recoge_respuesta(Leida,[1,2,3]),
(Leida=1,escribe_prueba(Prueba);
Leida=2,navega(Prueba,0);
Leida=3).
se_deduce(P,_,P es cierto esta_afirmado_por F) :-
F hecho P.
se_deduce(P,T,P es cierto es_consecuencia_de R porque Prueba ) :-
R # si C entonces P,
se_deduce(C,[R # si C entonces P|T],Prueba).
se_deduce(P1 y P2,T,Prueba1 y Prueba2) :-
se_deduce(P1,T,Prueba1),
se_deduce(P2,T,Prueba2).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.72
Un pequeno sistema basado en el conocimiento: sbc.pl (IV)
se_deduce(P1 o _, T,Prueba1) :- se_deduce(P1,T,Prueba1).
se_deduce(_ o P2, T,Prueba2) :- se_deduce(P2,T,Prueba2).
se_deduce(P,_,P es cierto esta_afirmado_por usted) :-
preguntable(P), respuesta(P,R), % solo habra si o no.
!,R=si.
se_deduce(P,T,P es cierto esta_afirmado_por usted) :-
preguntable(P), pregunta(P,T,R), assert(respuesta(P,R)),
R=si.
%%%%%%%%%%%%% Menu final
menu :-
nl,nl,write_ln(’****** Se ha encontrado respuesta afirmativa:’),
write_ln(’------ Opciones:’),
write_ln(’------ 1) Ver la prueba completa y continuar.’),
write_ln(’------ 2) Navegar dentro de la prueba.’),
write_ln(’------ 3) Continuar. ’).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.73
Un pequeno sistema basado en el conocimiento: sbc.pl (V)
%%%%%%%%%%%% Auxiliares
recoge_respuesta(R,L) :-
write(’Posibles respuestas: ’),write(L),
write(’ (seguidas de un punto): ’),
read(R),member(R,L),!.
recoge_respuesta(R,L) :-
nl,write_ln(’Respuesta no valida.’),
recoge_respuesta(R,L).
escribe_lista([]).
escribe_lista([X|L]) :- write(X), escribe_lista(L).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.74
Un pequeno sistema basado en el conocimiento: sbc.pl (VI)
%%%%%%%%%%%% Escritura de la prueba
escribe_prueba(Prueba) :-
nl,write_ln(’****** Prueba encontrada:’),nl,
escribe_prueba_aux(0,Prueba).
escribe_prueba_aux(N,A es cierto es_consecuencia_de B porque Prueba):-
M is N+2,
escribe_prueba_aux(M,Prueba),tab(N),
escribe_lista([’luego, segun ’,B,’ se concluye que ’,A,’,’]),nl.
escribe_prueba_aux(N,A y B):-
escribe_prueba_aux(N,A),tab(N),write_ln(’y’),
escribe_prueba_aux(N,B).
escribe_prueba_aux(N,P es cierto esta_afirmado_por F):-
tab(N),escribe_lista([’por ’,F,’, sabemos que ’,P,’,’]),nl.
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.75
Un pequeno sistema basado en el conocimiento: sbc.pl (VII)
%%%%%%%%%%%%%% Preguntas al usuario. Preguntas porque
pregunta(P,T,Respuesta) :-
nl,escribe_lista([’¿Es cierto ’,P,’?’]),nl,
recoge_respuesta(Leido,[si,no,porque]),
gestiona_respuesta_porque(P,T,Respuesta,Leido).
gestiona_respuesta_porque(_,_,si,si).
gestiona_respuesta_porque(_,_,no,no).
gestiona_respuesta_porque(P,[R|Reglas],Respuesta,porque) :-
escribe_regla(R),nl,write(’Repito:’),
pregunta(P,Reglas,Respuesta).
gestiona_respuesta_porque(P,[],Respuesta,porque) :-
write_ln(’Porque esa fue su pregunta!!’),write(’Repito: ’),
pregunta(P,[],Respuesta).
escribe_regla(R # si C entonces P) :-
nl,write_ln(’=== Porque:’),
escribe_lista([’La regla ’,R,’ dice que probando:’]),nl,
write_ln(C),
% escribe_condicion(C), cuando se mejore el de abajo.
write_ln(’se tiene: ’),write_ln(P).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.76
Un pequeno sistema basado en el conocimiento: sbc.pl (VIII)
%%%%%%%%%%%%%% Navegacion por el arbol.
navega(P es cierto esta_afirmado_por usted,Nivel) :-
!, escribe_lista([P,’ esta afirmado por usted.’]),nl,
opciones_no_numericas(Nivel,Opciones),
recoge_respuesta(Opcion,Opciones),
gestiona_respuesta_navega(Opcion,Nivel,_,_).
navega(P es cierto esta_afirmado_por F,Nivel) :-
!,escribe_lista([P,’ esta afirmado por el hecho ’,F]),nl,
opciones_no_numericas(Nivel,Opciones),
recoge_respuesta(Opcion,Opciones),
gestiona_respuesta_navega(Opcion,Nivel,_,_).
navega(A es cierto es_consecuencia_de B porque Pruebas,Nivel) :-
!, escribe_lista([’Por ’,B,’, ’,A,’ es consecuencia de:’]),nl,
escribe_cuerpo(Pruebas,1,Max),
Max1 is Max - 1,
findall(N,between(1,Max1,N),L),
opciones_no_numericas(Nivel,M),
append(M,L,Opciones),
recoge_respuesta(Opcion,Opciones),
(A es cierto es_consecuencia_de B porque Pruebas) = Aux,
gestiona_respuesta_navega(Opcion,Nivel,Pruebas,Aux).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.77
Un pequeno sistema basado en el conocimiento: sbc.pl (IX)
gestiona_respuesta_navega(arriba,_,_,_):-!.
gestiona_respuesta_navega(seguir,_,_,_):-!,fail.
gestiona_respuesta_navega(N,Nivel,Pruebas,P) :-
n_esima_prueba(Pruebas,N,Pn), Nivel1 is Nivel+1,
navega(Pn,Nivel1), navega(P,Nivel).
opciones_no_numericas(0,[seguir]):-!.
opciones_no_numericas(_,[seguir,arriba]).
escribe_cuerpo(P1 y P2,N1,N3) :-
!, escribe_cuerpo(P1,N1,N2), escribe_cuerpo(P2,N2,N3).
escribe_cuerpo(P,N,N1) :-
tab(3), escribe_lista([N,’: ’]),
escribe_lo_probado(P),nl, N1 is N+1.
escribe_lo_probado(P es cierto esta_afirmado_por _):- write(P).
escribe_lo_probado(P es cierto es_consecuencia_de _) :- write(P).
n_esima_prueba((P1 y P2) y P3,N,P) :- !,n_esima_prueba(P1 y P2 y P3,N,P).
n_esima_prueba(P1 y _,1,P1):-!.
n_esima_prueba(_ y P2,N,P) :-!, N1 is N-1, n_esima_prueba(P2,N1,P).
n_esima_prueba(P,1,P).
IA-II 2005–2006 CcIa Representacion del conocimiento mediante reglas 1.78