PDF de programación - Tema 1: Programación basada en reglas con CLIPS

Imágen de pdf Tema 1: Programación basada en reglas con CLIPS

Tema 1: Programación basada en reglas con CLIPSgráfica de visualizaciones

Publicado el 6 de Agosto del 2017
613 visualizaciones desde el 6 de Agosto del 2017
188,1 KB
96 paginas
Creado hace 20a (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
  • Links de descarga
http://lwp-l.com/pdf6145

Comentarios de: Tema 1: Programación basada en reglas con CLIPS (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad