Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tema 2
Sistemas Basados en Reglas
Sistemas Basados en el Conocimiento
Grado en Ingeniera Informtica
Descripcin
CLIPS
Ejemplos
Referencias
CLIPS:
Sistemas expertos: principios y programacin (3 ed.).
J. Giarratano, G. Riley, G. Editorial. Thompson Ed. 2001.
CLIPS Reference Manual (CLIPS 6.1). http://clipsrules.sourceforge.net/
JESS in Action: Rule-based systems in Java. Friedman-Hill, E. Manning. 2003.
3
<BH,BR,MI>
BASE DE HECHOS
MOTOR DE INFERENCIA
(Memoria de trabajo)
Representa conocimientos sobre el
problema:datos, hechos establecidos
y metas a alcanzar
BASE DE REGLAS
Representa conocimientos sobre la solucin
del problema en forma de producciones
Base de Hechos
Hechos:
Base de Hechos
Partes de la BH:
permanente: hechos invariantes
describen caractersticas que siempre se dan en el problema
Ejemplo: (bloque A) (bloque B) (clear T)
Modificacin de la BH:
aadir hechos a la BH
borrar hechos de la BH
Base de Reglas
Regla:
Representa una parte del conocimiento sobre la solucin del problema
Sintaxis: SI <Premisas> ENTONCES <Acciones>
Antecedente, LHS
Consecuente, RHS
SI (hombre Socrates)
ENTONCES aadir(mortal Socrates)
Semntica:
Si todas las premisas se encuentran en la BH, se pueden ejecutar todas las acciones
sobre la BH
Ej.: Si (hombre Socrates) se encuentra en la BH, se puede aadir (mortal Socrates) a
la BH
Base de Reglas
Reglas con variables:
premisas y acciones pueden contener constantes (p.e. A,
ladra, on) o variables (p.e. ?x)
Ejemplos:
Regla R2: SI (hombre ?x) ENTONCES aadir(mortal ?x)
Regla R3: SI (padre ?x ?y) (padre ?y ?z)
ENTONCES aadir(ancestro ?x ?z)
Semntica:
Una variable puede ligarse con cualquier constante de un hecho en la
misma posicin
Una variable ha de ligarse al mismo valor en toda la regla
Ntese:
slo las reglas pueden contener variables, no los hechos
cualquier variable del consecuente ha de ligarse anteriormente en el
antecedente
8
Motor de inferencia
Mecanismo automtico que permite contestar consultas a partir de una BC
basada en reglas
Dos posibles estrategias de inferencia para BC basadas en reglas
Encadenamiento hacia delante (ingls: forward chaining)
Soluciones
intermedias
BH inicial
Consulta
(BH final)
BR
Encadenamiento hacia atrs (ingls: backward chaining)
Objetivo
(Consulta)
Subobjetivos
BR
BH inicial
9
Soluciones
Motor de Inferencia
Mecanismo de encadenamiento hacia delante:
a partir de la BH1 se procura deducir una BHn en la que se cumple la consulta
disparando sucesivamente las reglas Ri de la BR
cada disparo de una regla caracteriza un ciclo de razonamiento CCk
BH1
R1
R2
...
Rm
CC1
BH2
Ri
...
Rj
CC2
CC n-1
10
BHn-1
BHn
Rk
Ciclo de Inferencia
Paso 1:
Deteccin de reglas aplicables
(determinacin del conjunto conflicto)
Paso 2:
Seleccin de una regla aplicable
(resolucin del conjunto conflicto)
Paso 3:
Aplicacin de una regla y
actualizacin de la BH
(disparo de la regla)
11
Seleccin del conjunto de reglas candidatas para dispararse, las que son
compatibles con la BH (instancias de reglas aplicables o activadas)
BH
(enfermedad Pepe pulmn) (enfermedad ?persona corazn)
(enfermedad Juan corazn)
(enfermedad Mara corazn)
(enfermedad Juan corazn), ?persona=Juan
(edad Pepe 18)
(enfermedad Mara corazn), ?persona=Mara
Conjunto conflicto:
todas las (instancias de) reglas que son aplicables en el presente ciclo
BASE DE REGLAS
Regla R1:
SI (animal ?A)
(esqueleto ?A si)
ENT aadir (vertebrado ?A)
Motor de inferencia
Regla R2:
SI
(animal ?A)
(esqueleto ?A no)
ENT aadir (invertebrado ?A)
Ciclo1
R1,?A=Tucky
R1,?A=Pioln
(animal Tucky)
(animal Pioln)
(esqueleto Pioln si)
(esqueleto Tucky si)
(ladra Tucky)
(vertebrado Tucky)
Regla R3:
SI
(vertebrado ?A)
(ladra ?A)
ENT aadir (perro ?A)
15
(animal Tucky)
(animal Pioln)
(esqueleto Pioln si)
(esqueleto Tucky si)
(ladra Tucky)
(vertebrado Tucky)
BASE DE REGLAS
Regla R1:
SI (animal ?A)
(esqueleto ?A si)
ENT aadir (vertebrado ?A)
Motor de inferencia
Ciclo2
Regla R2:
SI
(animal ?A)
(esqueleto ?A no)
ENT aadir (invertebrado ?A)
R1,?A=Tucky
R1,?A=Pioln
R3, ?A=Tucky
(animal Tucky)
(animal Pioln)
(esqueleto Pioln si)
(esqueleto Tucky si)
(ladra Tucky)
(vertebrado Tucky)
(vertebrado Pioln)
Regla R3:
SI
(vertebrado ?A)
(ladra ?A)
ENT aadir (perro ?A)
16
(animal Tucky)
(animal Pioln)
(esqueleto Pioln si)
(esqueleto Tucky si)
(ladra Tucky)
(vertebrado Tucky)
(vertebrado Pioln)
BASE DE REGLAS
Regla R1:
SI (animal ?A)
(esqueleto ?A si)
ENT aadir (vertebrado ?A)
Motor de inferencia
Ciclo3
Regla R2:
SI
(animal ?A)
(esqueleto ?A no)
ENT aadir (invertebrado ?A)
R1,?A=Tucky
R1,?A=Pioln
R3, ?A=Tucky
(animal Tucky)
(animal Pioln)
(esqueleto Pioln si)
(esqueleto Tucky si)
(ladra Tucky)
(vertebrado Tucky)
(vertebrado Pioln)
(perro Tucky)
Regla R3:
SI
(vertebrado ?A)
(ladra ?A)
ENT aadir (perro ?A)
17
Red RETE
Cambios en el CC
18
19
RETE: Ejemplo
es 1 una a?
es 1 una c?
es 3 una d?
es 2 una b?
es 4 una e?
es 4 una f?
Nodo de unin si
3 izda = 2 dcha
Nodo de unin si
3 izda = 2 dcha
Informar de
cambios en R7
Informar de
cambios en R8
20
Rj: SI condicion1
condicion2...
ENTONCES acciones2
22
QU HACER?
Introducir sealizadores que provoquen la ejecucin de Rj
No olvidar borrar los sealizadores al ejecutar la regla Rj
24
Regla R1:
SI (envio ?e ?origen ?destino)
(dia-entrega ?e hoy)
(coste ?e ?coste)
ENTONCES
aadir(coste ?e ?coste+10)
Motor de inferencia
Ciclo1
?e=E1
?origen=Madrid
?destino=Barcelona
?coste=7
(dia-entrega E1 hoy)
(coste E1 7)
(dia-entrega E1 hoy)
(coste E1 7)
(coste E1 17)
Regla R1:
SI (envio ?e ?origen ?destino)
(dia-entrega ?e hoy)
(coste ?e ?coste)
ENTONCES
borrar (coste ?e ?coste)
aadir (coste ?e ?coste+10)
Motor de inferencia
Ciclo1
?e=E1
?origen=Madrid
?destino=Barcelona
?coste=7
(dia-entrega E1 hoy)
(coste E1 7)
BH
Inconvenientes
Conocimiento procedimental y heurstico
Dificultad para verificar la consistencia de la BC
27
Descripcin
CLIPS
Ejemplos
...
28
Qu es CLIPS
CLIPS (C Language Integrated Production System):
herramienta para desarrollar sistemas inteligentes basadas en reglas
desarrollada en C/ANSI por Software Technology Branch, NASA/Lyndon B.
Johnson Space Center desde 1986
implementacin eficiente del encadenamiento hacia delante
Facilidades adicionales
Extensiones:
30
Ejemplos:
(hola)
(alumnos Pepe Juan Luis)
(nombre "Juan")
(edad 14)
(pi 3.1415)
31
33
Sirven para
Identificar de forma nica y simplificada cada hecho
Saber el tiempo que lleva un hecho en la memoria de trabajo
35
Aade initial-fact
Aade el conocimiento inicial definido con deffacts
Aade las variables globales con su valor inicial
Fija como mdulo principal el mdulo MAIN
36
CLIPS> (retract 1)
CLIPS> (facts)
<Fact-2>
CLIPS> (facts)
f-0 (initial-fact)
<Fact-1>
f-2 hola
CLIPS> (facts)
f-0 (initial-fact)
CLIPS> (clear)
f-1 hola
CLIPS> (facts)
CLIPS>
37
38
Ejemplo
(defrule marca-del-600
(defrule <nombre_regla>
"Marca del modelo 600"
[<documentacion opcional>]
(modelo 600)
[<caracteristicas op.>]
=>
(premisa 1)
(assert (marca-es SEAT))
(premisa 2)
)
...
(premisa N)
Semntica
=>
Si se cumplen todas las premisas
(accion 1)
Se ejecutan todas las acciones
(accion 2)
...
(accion M)
)
39
Restricciones
restricciones como premisas (tipo test)
restricciones de variables (conectivas)
40
41
(defrule R1
(A B)
=> (assert (C D))
MT
f-1
f-2
(A B)
(C D)
1 equiparacin
Conjunto Conflicto={R1(f-1)}
La ejecucin de la regla introduce en la MT a (CD)
(defrule R1
(clase1 (nombre1 A))
=> (assert (C D))
MT
f-1(clase1
(nombre1 A))
f-2(C D)
1 equiparacin
Conjunto Conflicto={R1(f-1)}
42
(defrule encontrar-dato
(dato ? azul rojo $?)=>)
(defrule encontrar-dato
(dato $? amarillo $?)=>)
43
BR
(defrule R1
(A $? B)
=>...
MT
f-1
f-2
f-3
(A B)
(A 3 B)
(A C E B B)
Conjunto Conflicto:
{R1(f-1),R1(f-2),R1(f-3)}
45
BR
(defrule R1
(animal ?x)
(piel pelo ?x)
=>
(assert (especie mamifero ?x))
MT
f-1
f-2
f-3
f-4
f-5
(animal Tucky)
(piel pelo Dolly)
(piel pelo Tucky)
(animal Dolly)
(animal Dumbo)
47
Eq1: ?x=C
Eq2: ?x=B
?x=A no equipara porque en la MT est (B A)
48
49
(defrule no-rojo-ni-verde-test
(color ?x)
(test (neq ?x rojo verde))
=>)
(defrule datos-distintos
(dato ?x ?y&~?x)
=>)
(defrule datos-distintos-test
(dato ?x ?y)
(test (neq ?x ?y))
=>)
51
Ejemplos:
(defrule mas-una
(dato ?x ?y&=(+ ?x 1))
=>)
(defrule mas-una-test
(dato ?x ?y)
(test (= ?y (+ ?x 1)))
=>)
(defrule segundo-elemento
(lista $?l)
(valor ?x&=(nth$ 2 $?l))
=>)
(defrule segundo-elemento-test
(lista $?l)
(valor ?x)
(test (eq ?x (nth$ 2 $?l)))
=>)
52
Ejemplos:
(defrule valor-numerico
(valor ?x&:(numberp ?x))
=>)
(defrule valor-numerico-test
(valor ?x)
(test (numberp ?x))
=>)
(defrule dos-o-mas
(lista $?y&:(> (length$ ?y) 2))
=>)
(defrule dos-o-mas-test
(lista $?y)
(test (> (length$ ?y) 2))
=>)
53
)
54
numberp
floatp
integerp
lexmep
stringp
symbolp
evenp
oddp
multifieldp
eq
neq
=, <>, >, >=, <, <=
or, not, and
create$
nth$
member$
subsetp
delete$
explode$
implode$
subseq$
replace$
insert$
first$
rest$
55
+, -, *, /, div
max, min
abs
float
integer
56
Breadth Strategy
Una activacin ms reciente se sita por debajo de las activaciones con
igual o mayor antigedad
Complexity Strategy
Las nuevas activaciones se sitan por encima de las activaciones con
igual o menor especificidad
Simplicity Strategy
Las nuevas activaciones se sitan por encima de las activaciones con
igual o mayor especificidad
58
Ejemplo:
Especificidad=5
(defrule ejemplo
(item ?x ?y ?x)
(test (and (numberp ?x) (> ?x (+10 ?y)) (< ?x 100))) =>)
59
MEA Strategy
parecido a LEX, pero mirando slo el primer patrn que equipara en la
regla (si es el mismo se usa LEX)
Ejemplo: R1
Random Strategy
A cada activacin se le asigna un nmero aleatorio para determinar su
orden en la agenda.
60
Descripcin
CLIPS
Ejemplos
61
Diseo de BCs
Proceso:
Definir el modelo:
conceptualizar el mundo: qu es importante?
p.e.: bloques, mesas, posicin vertical relativa de los bloques
Definir la ontologa:
Escoger vocabulario
p.e.: block1, clear, on, encima...
Hacer consultas
62
1
2
xor1
xor2
and2
or1
and1
Circuito C
63
caractersticas irrelevantes
rutas de las lneas, posicin de las puertas, tamao de las puertas etc.
Definir la ontologa:
Puertas: patrn no ordenado puerta
Identificacin puerta: slot id-puerta
Tipo de puertas: slot tipo
Terminales: slots id-entrada-1, id-entrada-2, id-salida
AND OR XOR))
e1))
e2))
s1)) )
(deftemplate circuito
"Circuito con multiples entradas y salidas"
(slot
id-circuito)
(multislot id-entradas)
(multislot id-salidas ) )
(deftemplate estado-terminal
"Senyal en terminales de una puerta o circuito"
(slot id-elemento)
(slot id-terminal)
(slot senyal (allowed-symbols TRUE FALSE)) )
65
70
(defrule conexion
"La conexion es conmutativa"
(conexion ?p1 ?t1 ?p2 ?t2)
=>
(assert (conexion ?p2 ?t2 ?p1 ?t1)) )
71
72
73
Realizar Consultas
Senyal: TRUE
Senyal: TRUE
Senyal: FALSE
Respuesta:
Circuito: C
Circuito: C
Senyal: FALSE
Senyal: TRUE
Salida: 11
Entrada: e2
74
Ejercicio
Suponga que se ha cargado la anterior Base de Conocimiento en CLIPS, y
que se ha configurado para que aplique la estrategia breadth (amplitud).
Suponga tambin que todos los hechos sobre conexiones se encuentran ya
en la MT, y que se han ledo ya los seales en los terminales de entradas,
dando lugar a estos hechos
(estado-terminal
(estado-terminal
(estado-terminal
(estado-terminal
(estado-terminal
(estado-terminal
(id-elemento
(id-elemento
(id-elemento
(id-elemento
(id-elemento
(id-elemento
A2)
X2)
X1)
A1)
X1)
A1)
(id-terminal
(id-terminal
(id-terminal
(id-terminal
(id-terminal
(id-terminal
e1)
e2)
e2)
e2)
e1)
e1)
(senyal
(senyal
(senyal
(senyal
(senyal
(senyal
TRUE)
TRUE)
FALSE)
FALSE)
TRUE)
TRUE)
Modelar acciones
Para modelar la funcin expandir:
un estado se caracteriza por un hecho en la memoria de trabajo
reglas modelan acciones:
el antecedente representa las precondiciones
el consecuente modela el resultado de la accin
al disparar todas las reglas activadas por un estado, se obtienen los estados
sucesores
Implementacin 1 (destructiva):
la regla borra el estado que la activaba, y slo deja el estado actual en la
memoria
Problema:
no queda traza de los estados visitados
al no mantener los estados hermanos en la MT, no se puede dar marcha atrs
76
Modelar acciones
Implementacin 2:
se mantienen todos los estados en la memoria (rbol de bsqueda)
las reglas aplicables en cada momento se encuentran en la agenda
(conjunto conflicto)
completo con estrategia breadth (amplitud)
Ejemplo:
dos jarras, con una capacidad de 3 litros (llamada Tres), y 4 litros (llamada Cuatro).
inicialmente Tres y Cuatro estn vacas, y se intenta que haya 2l de agua en Cuatro
cualquiera de ellas puede llenarse con el agua de un grifo G.
el contenido tanto de Tres como de Cuatro puede vaciarse en una pila P.
es posible echar todo el agua de una jarra a la otra., pero no se dispone de
dispositivos de medicin adicionales.
77
Modelar acciones
Llenar jarras del grifo
(defrule llenar-cuatro-del-grifo
?nodo <- (situacion
(litros-en-cuatro ?cuatro)
(litros-en-tres ?tres) )
(test (< ?cuatro 4))
=>
(assert (situacion (padre ?nodo)
(litros-en-cuatro 4)
(litros-en-tres ?tres))) )
(defrule llenar-tres-del-grifo
?nodo <- (situacion
(litros-en-tres ?tres) )
(test (< ?tres 3))
=>
(duplicate ?nodo (padre ?nodo)
(litros-en-tres 3)) )
78
Modelar acciones
Vaciar jarras en la pila
(defrule vaciar-cuatro-en-pila
?nodo <- (situacion
(litros-en-cuatro ?cuatro) )
(test (> ?cuatro 0))
=>
(duplicate ?nodo (padre ?nodo)
(litros-en-cuatro 0)) )
(defrule vaciar-tres-en-pila
?nodo <- (situacion
(litros-en-tres ?tres) )
(test (> ?tres 0))
=>
(duplicate ?nodo (padre ?nodo)
(litros-en-tres 0)) )
79
Modelar acciones
Llenar una jarra de la otra
(defrule llenar-cuatro-desde-tres
?nodo <- (situacion
(litros-en-cuatro ?cuatro)
(litros-en-tres ?tres) )
(test (> (+ ?cuatro ?tres) 4))
(test (< ?cuatro 4))
=>
(assert (situacion (padre ?nodo)
(litros-en-cuatro 4)
(litros-en-tres (- ?tres (- 4 ?cuatro))))) )
80
Modelar acciones
Llenar una jarra de la otra
(defrule llenar-tres-desde-cuatro
?nodo <- (situacion
(litros-en-cuatro ?cuatro)
(litros-en-tres ?tres) )
(test (> (+ ?cuatro ?tres) 3))
(test (< ?tres 3))
=>
(bind ?nuevo-cuatro (- ?cuatro (- 3 ?tres)))
(assert (situacion (padre ?nodo)
(litros-en-cuatro ?nuevo-cuatro)
(litros-en-tres 3))) )
81
Modelar acciones
Vaciar una jarra en la otra:
(defrule vaciar-tres-en-cuatro
?nodo <- (situacion
(litros-en-cuatro ?cuatro)
(litros-en-tres ?tres) )
(test (<= (+ ?cuatro ?tres) 4))
(test (> ?tres 0))
=> (assert (situacion (padre ?nodo)
(litros-en-cuatro (+ ?tres ?cuatro))
(litros-en-tres 0)) ) )
(defrule vaciar-cuatro-en-tres
?nodo <- (situacion
(litros-en-cuatro ?cuatro)
(litros-en-tres ?tres) )
(test (<= (+ ?cuatro ?tres) 3))
(test (> ?cuatro 0))
=> (assert (situacion (padre ?nodo)
(litros-en-cuatro 0)
(litros-en-tres (+ ?tres ?cuatro)) ) ) )
82
Ejercicio
83
Modelar cambio
Cmo representar acciones en el mundo de los bloques ?
C
A B
B
C A
C A B
A
B
C
Problema:
estados parcialmente caracterizados
slo algunas propiedades del estado son relevantes
no se puede definir de antemano un deftemplate para estados
Solucin:
hechos ordenados: asignar un nombre a cada estado, y aadirlo como
argumento a cada propiedad
p.e.: (on C A S0), (on A T S0), (on B T S0), (clear C S0),
(clear B S0),(clear T S0)
84
Solucin:
describir qu propiedades no cambian con una accin
Reglas de marco:
reglas que indican qu propiedades no cambian
aqu: una reglas de marco para cada par propiedad/accin
86
87
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
C
A
B
Agenda:
0 efecto-move: f-4,f-5,f-3
88
move(C,A,T)
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
f-6
f-7
f-8
f-9
(on C T gen1)
(clear A gen1)
(clear T gen1)
(move S0 gen1 C A T)
Agenda:
0 marco-move-1: f-9,f-4
0 marco-move-2: f-9,f-1
0 marco-move-2: f-9,f-2
89
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
Agenda:
0 marco-move-2: f-9,f-1
0 marco-move-2: f-9,f-2
0 efecto-move: f-10,f-7,f-6
90
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
Agenda:
0 marco-move-2: f-9,f-2
0 efecto-move: f-10,f-7,f-6
91
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
Agenda:
0 efecto-move: f-10,f-7,f-6
0 efecto-move: f-7,f-10,f-12
0 efecto-move: f-7,f-8,f-12
...
92
move(C,T,A) en gen1
move(A,B,C) en gen1
move(A,B,T) en gen1
(initial-fact)
(on B T S0)
(on A B S0)
(on C A S0)
(clear C S0)
(clear T S0)
Agenda:
0
0
0
0
0
0
efecto-move: f-7,f-10,f-12
efecto-move: f-7,f-8,f-12
marco-move-1: f-15,f-8
marco-move-1: f-15,f-10
marco-move-2: f-15,f-11
marco-move-2: f-15,f-12
93
move(A,B,C) en gen1
move(A,B,T) en gen1
clear(T) persiste en gen1
clear(C) persiste en gen1
on(B,T) persiste en gen1
on(A,B) persiste en gen1
...