Publicado el 6 de Agosto del 2017
721 visualizaciones desde el 6 de Agosto del 2017
188,1 KB
96 paginas
Creado hace 21a (28/10/2003)
Inteligencia Artificial 2
Curso 2002–2003
Tema 1: Programación basada
en reglas con CLIPS
José A. Alonso Jiménez
Francisco J. Martín Mateos
José L. Ruiz Reina
Dpto. de Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.1
<Condiciones> => <Acciones>
Programación basada en reglas
x Modelo de regla:
x Condiciones
u Existencia de cierta información
u Ausencia de cierta información
u Relaciones entre datos
x Acciones
u Incluir nueva información
u Eliminar información
u Presentar información en pantalla
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.2
HECHOSREGLAS(<simbolo> <datos>*)
Definición de hechos y reglas
x Estructura de un hecho
x Ejemplos:
u (conjunto a b 1 2 3)
u (1 2 3 4) no es un hecho válido
x Acción: Añadir hechos
x Estructura de una regla (I):
(assert <hecho>*)
(defrule <nombre>
<condicion>*
=>
<accion>*)
<condicion> := <hecho>
x Ejemplo:
(defrule mamifero-1
(tiene-pelos)
=>
(assert (es-mamifero)))
x Hechos iniciales:
(deffacts <nombre>
<hecho>*)
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.3
(load <archivo>)
Interacción con el sistema
x Cargar el contenido de un archivo:
x Trazas:
u Hechos añadidos y eliminados:
u Activaciones y desactivaciones de reglas:
u Utilización de reglas:
(watch activations)
(watch facts)
(watch rules)
x Inicialización:
x Ejecución:
(reset)
(run)
x Limpiar la base de conocimiento:
(clear)
x Ayuda del sistema:
(help)
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.4
Definición de hechos y reglas
x BC animales.clp
(deffacts hechos-iniciales
(tiene-pelos)
(tiene-pezugnas)
(tiene-rayas-negras))
(defrule mamifero-1
(tiene-pelos)
=>
(assert (es-mamifero)))
(defrule mamifero-2
(da-leche)
=>
(assert (es-mamifero)))
(defrule ungulado-1
(es-mamifero)
(tiene-pezugnas)
=>
(assert (es-ungulado)))
(defrule ungulado-2
(es-mamifero)
(rumia)
=>
(assert (es-ungulado)))
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.5
Definición de hechos y reglas
(defrule jirafa
(es-ungulado)
(tiene-cuello-largo)
=>
(assert (es-jirafa)))
(defrule cebra
(es-ungulado)
(tiene-rayas-negras)
=>
(assert (es-cebra)))
x Tabla de seguimiento:
E Agenda
Hechos
0
f0 (initial-fact)
0 mamifero-1: f1
f1 (tiene-pelos)
0
f2 (tiene-pezugnas)
f3 (tiene-rayas-negras) 0
f4 (es-mamifero)
f5 (es-ungulado)
f6 (es-cebra)
1 ungulado-1: f4,f2 2
2 cebra: f5,f3
3
D
1
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.6
Definición de hechos y reglas
x Sesión
(initial-fact)
(tiene-pelos)
CLIPS> (load "animales.clp")
$******
TRUE
CLIPS> (watch facts)
CLIPS> (watch rules)
CLIPS> (watch activations)
CLIPS> (reset)
==> f-0
==> f-1
==> Activation 0
==> f-2
==> f-3
CLIPS> (run)
FIRE
==> f-4
==> Activation 0
FIRE
==> f-5
==> Activation 0
FIRE
==> f-6
1 mamifero-1: f-1
(es-mamifero)
3 cebra: f-5,f-3
(es-cebra)
2 ungulado-1: f-4,f-2
(es-ungulado)
mamifero-1: f-1
(tiene-pezugnas)
(tiene-rayas-negras)
ungulado-1: f-4,f-2
cebra: f-5,f-3
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.7
Plantillas, variables y restriciones
x Estructura de una plantilla (I):
(deftemplate <nombre>
<campo>*)
<campo> := (slot <nombre-campo>)
x Ejemplos:
(deftemplate persona
(slot nombre)
(slot ojos))
x Variables: ?x, ?y, ?gv32
u Toman un valor simple
x Restricciones (I): Condiciones sobre las varia-
bles que se comprueban en el momento de veri-
ficar las condiciones de una regla
(dato ?x&~a)
u Negativas:
u Disyuntivas:
u Conjuntivas:
(dato ?x&a|b)
(dato ?x&~a&~b)
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.8
Plantillas, variables y restricciones
x Acción: Presentar información en pantalla
x BC busca-personas.clp
(printout t <dato>*)
(deftemplate persona
(slot nombre)
(slot ojos))
(deffacts personas
(persona (nombre Ana)
(persona (nombre Juan)
(persona (nombre Luis)
(persona (nombre Blanca) (ojos azules)))
(ojos verdes))
(ojos negros))
(ojos negros))
(defrule busca-personas
(persona (nombre ?nombre1)
(ojos ?ojos1&azules|verdes))
(persona (nombre ?nombre2&~?nombre1)
(ojos negros))
=>
(printout t ?nombre1
" tiene los ojos " ?ojos1 crlf)
(printout t ?nombre2
" tiene los ojos negros" crlf)
(printout t "------------------------" crlf))
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.9
D
4
3
2
1
3
f
,
4
f
:
s
a
n
o
s
r
e
p
-
a
c
s
u
b
)
)
s
e
l
u
z
a
s
o
j
o
(
2
f
,
1
f
:
s
a
n
o
s
r
e
p
-
a
c
s
u
b
3
f
,
1
f
:
s
a
n
o
s
r
e
p
-
a
c
s
u
b
2
f
,
4
f
:
s
a
n
o
s
r
e
p
-
a
c
s
u
b
a
d
n
e
g
A
E
0
0
0
0
0
)
)
s
o
r
g
e
n
s
o
j
o
(
)
)
s
o
r
g
e
n
s
o
j
o
(
)
)
s
e
d
r
e
v
s
o
j
o
(
)
n
a
u
J
e
r
b
m
o
n
(
a
n
o
s
r
e
p
(
2
f
)
a
n
A
e
r
b
m
o
n
(
a
n
o
s
r
e
p
(
)
t
c
a
f
-
l
a
i
t
i
n
i
(
0
f
1
f
)
s
i
u
L
e
r
b
m
o
n
(
a
n
o
s
r
e
p
(
3
f
)
a
c
n
a
l
B
e
r
b
m
o
n
(
a
n
o
s
r
e
p
(
4
f
s
o
h
c
e
H
s
e
n
o
i
c
c
i
r
t
s
e
r
y
s
e
l
b
a
i
r
a
v
,
s
a
l
l
i
t
n
a
l
P
:
o
t
n
e
i
m
u
g
e
s
i
e
d
a
l
b
a
T
x
0
1
.
1
S
P
I
L
C
n
o
c
s
a
l
g
e
r
n
e
a
d
a
s
a
b
n
ó
i
c
a
m
a
r
g
o
r
P
a
I
c
C
3
0
–
2
0
0
2
2
A
I
Plantillas, variables y restricciones
x Sesión
CLIPS> (clear)
CLIPS> (load "busca-personas.clp")
%$*
TRUE
CLIPS> (reset)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (persona (nombre Ana) (ojos verdes))
f-2 (persona (nombre Juan) (ojos negros))
f-3 (persona (nombre Luis) (ojos negros))
f-4 (persona (nombre Blanca) (ojos azules))
For a total of 5 facts.
CLIPS> (agenda)
0
0
0
0
For a total of 4 activations.
CLIPS> (run)
Blanca tiene los ojos azules
Luis tiene los ojos negros
------------------------
Blanca tiene los ojos azules
Juan tiene los ojos negros
------------------------
Ana tiene los ojos verdes
Luis tiene los ojos negros
------------------------
Ana tiene los ojos verdes
Juan tiene los ojos negros
------------------------
busca-personas: f-4,f-3
busca-personas: f-4,f-2
busca-personas: f-1,f-3
busca-personas: f-1,f-2
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.11
Variables múltiples y eliminaciones
x Variables: $?x, $?y, $?gv32
u Toman un valor múltiple
x Estructura de una regla (II):
(defrule <nombre>
<condicion>*
=>
<accion>*)
<condicion> := <hecho> |
(not <hecho>) |
<variable-simple> <- <hecho>
x Acción: Eliminar hechos:
(retract <identificador-hecho>*)
<identificador-hecho> := <variable-simple>
x Variables mudas: Toman un valor que no es
u Simple: ?
u Múltiple: $?
necesario recordar
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.12
Variables múltiples y eliminaciones
x Unión de conjuntos
u BC union.clp
(deffacts datos-iniciales
(conjunto-1 a b)
(conjunto-2 b c))
(defrule calcula-union
=>
(assert (union)))
(defrule union-base
?union <- (union $?u)
?conjunto-1 <- (conjunto-1 $?e-1)
?conjunto-2 <- (conjunto-2)
=>
(retract ?conjunto-1 ?conjunto-2 ?union)
(assert (union ?e-1 ?u))
(assert (escribe-solucion)))
(defrule escribe-solucion
(escribe-solucion)
(union $?u)
=>
(printout t "La union es " ?u crlf))
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.13
Variables múltiples y eliminaciones
(defrule union-con-primero-compartido
(union $?)
?conjunto-2 <- (conjunto-2 ?e $?r-2)
(conjunto-1 $? ?e $?)
=>
(retract ?conjunto-2)
(assert (conjunto-2 ?r-2)))
(defrule union-con-primero-no-compartido
?union <- (union $?u)
?conjunto-2 <- (conjunto-2 ?e $?r-2)
(not (conjunto-1 $? ?e $?))
=>
(retract ?conjunto-2 ?union)
(assert (conjunto-2 ?r-2)
(union ?u ?e)))
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.14
D
1
2
3
4
5
,
4
f
,
3
f
:
c
-
o
n
-
p
-
n
o
c
-
n
o
i
n
u
1
f
,
2
f
,
3
f
:
c
-
p
-
n
o
c
-
n
o
i
n
u
5
f
,
1
f
,
6
f
:
e
s
a
b
-
n
o
i
n
u
7
f
,
8
f
:
n
o
i
c
u
l
o
s
-
e
b
i
r
c
s
e
e
0
f
:
n
o
i
n
u
-
a
l
u
c
l
a
c
4
2
3
3
4
4
0
0
0
1
2
3
4
4
)
t
c
a
f
-
l
a
i
t
i
n
i
(
)
b
)
c
a
b
1
-
j
n
o
c
(
2
-
j
n
o
c
(
)
c
2
-
j
n
o
c
(
)
c
n
o
i
n
u
(
)
2
-
j
n
o
c
(
)
n
o
i
n
u
(
)
n
o
i
c
u
l
o
s
-
e
b
i
r
c
s
e
(
)
c
b
a
n
o
i
n
u
(
0
f
1
f
2
f
3
f
4
f
5
f
6
f
7
f
8
f
a
d
n
e
g
A
S
E
s
o
h
c
e
H
s
e
n
o
i
c
a
n
m
i
i
l
e
y
s
e
l
p
i
t
l
ú
m
s
e
l
b
a
i
r
a
V
:
o
t
n
e
i
m
u
g
e
s
i
e
d
a
l
b
a
T
x
5
1
.
1
S
P
I
L
C
n
o
c
s
a
l
g
e
r
n
e
a
d
a
s
a
b
n
ó
i
c
a
m
a
r
g
o
r
P
a
I
c
C
3
0
–
2
0
0
2
2
A
I
Variables múltiples y eliminaciones
u Sesión
1 calcula-union: f-0
(union)
(conjunto-2 b c)
(conjunto-2 c)
2 union-con-primero-compartido: f-3,f-2,f-1
3 union-con-primero-no-compartido: f-3,f-4,
(initial-fact)
(conjunto-1 a b)
(conjunto-2 b c)
CLIPS> (load "union.clp")
$*****
TRUE
CLIPS> (watch facts)
CLIPS> (watch rules)
CLIPS> (reset)
==> f-0
==> f-1
==> f-2
CLIPS> (run)
FIRE
==> f-3
FIRE
<== f-2
==> f-4
FIRE
<== f-4
<== f-3
==> f-5
==> f-6
FIRE
<== f-1
<== f-5
<== f-6
==> f-7
==> f-8
FIRE
La union es (a b c)
(conjunto-2 c)
(union)
(conjunto-2)
(union c)
(conjunto-1 a b)
(conjunto-2)
(union c)
(union a b c)
(escribe-solucion)
4 union-base: f-6,f-1,f-5
5 escribe-solucion: f-8,f-7
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.16
Variables múltiples y eliminaciones
x Estructura de una plantilla (II):
(deftemplate <nombre>
<campo>*)
<campo> := (slot <nombre-campo>) |
(multislot <nombre-campo>)
x Estructura de una regla (III):
(defrule <nombre>
<condicion>*
=>
<accion>*)
<condicion> := <hecho> |
(not <hecho>) |
<variable-simple> <- <hecho> |
(test <llamada-a-una-funcion>)
x Funciones matemáticas:
u Básicas: +, -, *, /
u Comparaciones: =, !=, <, <=, >, >=
u Exponenciales: **, sqrt, exp, log
u Trigonométricas: sin, cos, tan
IA2 2002–03
CcIa
Programación basada en reglas con CLIPS
1.17
Variables múltiples y eliminaciones
x Busca triágulos rectángulos
u BC busca-triangulos-rect.clp
(deftemplate triangulo
(slot nombre)
(multislot lados))
(deffacts
Comentarios de: Tema 1: Programación basada en reglas con CLIPS (0)
No hay comentarios