CLIPS v6.1 Resumen - OCW

Anuncio
1
CLIPS v6.1
Resumen
Raquel Fuentetaja Pizán
raquel.fuentetaja@uc3m.es
Susana Fernández Arregui
susana.fernandez@uc3m.es
Universidad Carlos III de Madrid
Departamento de Informática
http://galahad.plg.inf.uc3m.es/∼docweb/
2
CLIPS v6.1
Resumen
1.
2.
3.
4.
5.
Introducción
Hechos
Reglas
Funciones
Marcos
Introducción
Clips
• CLIPS: C Language Integrated Production System
• Programado en C
• Comunicación con otros lenguajes: C y Ada
• Similitudes con LISP y C
• Desarrollado por Software Technology Branch (STB) NASA desde 1986
• Combina elementos de los paradigmas de lenguajes declarativos,
funcionales y orientados a objetos
3
Introducción
Intérprete de comandos
• $ clips
• $ clips -f nombrefichero, nombrefichero fichero con comandos CLIPS
• Recomendación: Utilizar emacs o xemacs, hacer dos buffers en uno tener
el fichero .clp y en el otro abrir un shell con clips
• Cuando aparece el prompt CLIP S > introducir comandos para evaluar
• Distingue entre mayúsculas y minúsculas
• Clips tiene muchos comandos implementados: (load nombrefichero),
(reset), (run), (clear) . . .
4
Introducción
Expresiones
• La sintaxis de las expresiones es prefija
• Una expresión es una serie de campos delimitados por paréntesis
• Ejemplo: (+ 1 (* 2 3))
• En modo interactivo CLIPS evalúa las expresiones:
CLIP S > (+ 1 2 (* 3 4 ))
15
CLIP S >
• Algunas funciones y operadores matemáticos disponibles:
+ - / * mod div sqrt round integer
5
Introducción
Tipos de datos
• NUMBER
- INTEGER
- FLOAT
• STRING. Ejemplo: ”Esto es un string”
- Para incluir comillas en una cadena hay que usar \”
- Para incluir \ en una cadena hay que usar \\
• SYMBOL. Ejemplo: luis, luis-gil,
• EXTERNAL-ADDRESS
• FACT-ADDRESS
• INSTANCE-NAME
• INSTANCE-ADDRESS
6
7
CLIPS v6.1
Resumen
1.
2.
3.
4.
5.
Introducción
Hechos
Reglas
Funciones
Marcos
Hechos
Facts
• Elementos básicos de conocimiento
• Pueden tener un campo o varios. El primer campo suele representar una
relación entre los restantes:
(hola)
(alumnos Juan Pedro Luis)
(edad 14)
(color silla verde)
• Campos sin valor: nil. Ej. (color silla nil)
• Ordenados y no ordenados (plantillas o templates)
• A cada hecho CLIPS asigna automáticamente un identificador único
(fact-index). Por ejemplo f-10
8
Hechos
Comandos sobre hechos
• (facts) : Para ver el contenido de la base de hechos (fact-list)
• (assert hecho) : Para añadir hechos a la base de hechos
• (retract indice-hecho) : Para eliminar hechos de la base de hechos
• (reset) : Elimina todos los hechos de la memoria de trabajo, elimina las
activaciones de la agenda y restaura las condiciones iniciales:
- Añade initial-fact e initial-object
- Añade los hechos y ejemplares iniciales, definidos con deffacts y
definstances
- Añade las variables globales con su valor inicial
• (clear) : Elimina todos los hechos y construcciones de la memoria de
trabajo
9
Hechos
Hechos iniciales
• deffacts: Para definir los hechos iniciales
Los hechos iniciales se añaden a la base al hacer (reset)
- CLIP S > (deffacts padres ”padres iniciales”
(padre-de Luis Antonio)
(padre-de Luis Maria)
(padre-de Antonio Juan))
- CLIP S > (reset)
- CLIP S > (facts)
f-0 (initial-fact)
f-1 (padre-de Luis Antonio)
f-2 (padre-de Luis Maria)
f-3 (padre-de Antonio Juan)
10
Hechos
Plantillas o templates
• Permiten asignar un nombre a cada campo. El orden de los slots no
tiene importancia
• Se declaran con deftemplate
(deftemplate <nombre-plantilla> [<comentario>]
<descripcion-de-slot1>
...
<descripcion-de-slotN>)
• Los slots se definen por un nombre y sus atributos (facetas).
Por defecto CLIPS les asigna un valor.
(deftemplate robot
(slot bandeja
(type SYMBOL)
(allowed-values LLENA VACIA)
(default VACIA))
)
• Pueden almacenar un único valor slot o varios multislot
11
Hechos
Atributos o facetas
• Los atributos de un slot pueden ser de dos tipos
- De restricción
? type tipo : determina el tipo de datos del slot
? allowed-values valores: limita al conjunto de valores los que se
pueden asignar
? range rango : limita los valores posibles al rango indicado
- De valor
? default valor: valor por omisión al slot
? Se puede forzar al usuario a que indique un valor (?NONE)
? Se puede indicar que sea CLIPS quien determine el valor por omisión
de un slot en función de las restricciones aplicadas siguiendo una
serie de reglas con el atributo ?DERIVE
• Además de assert y retract se pueden modificar con modify
(modify direccion-hecho (nombre-atributo nuevo-valor)* )
12
Hechos
Ejemplo
(deftemplate fichado
(slot nombre
(type STRING)
(default ?NONE))
(slot edad
(type INTEGER)
(range 1 100)
(default ?NONE))
(slot condicion
(type SYMBOL)
(allowed-values inocente sospechoso imputado condenado antecedentes)
(default inocente))
(slot clase
(type SYMBOL)
(allowed-values media baja alta)
(default ?DERIVE)) )
13
14
Hechos
Ejemplo
• Insertar hechos diferentes de tipo fichado:
(assert (fichado
(assert (fichado
(assert (fichado
(assert (fichado
FALSE
(nombre
(nombre
(nombre
(nombre
“Carlos”) (edad 28) (condicion sospechoso)))
“Pepe”) (edad 18) (clase alta)))
“Juan”)))
“Juan”)))
• CLIPS>(facts)
f-0 (initial-fact)
f-1 (fichado (nombre “Carlos”) (edad 28) (condicion sospechoso) (clase media))
f-2 (fichado (nombre “Pepe”) (edad 18) (condicion inocente) (clase alta))
f-3 (fichado (nombre “Juan”) (edad 1) (condicion inocente) (clase media))
For a total of 4 facts
• CLIPS>(assert (fichado))
[TMPLTRHS1] Slot nombre requires a value because of its (default ?NONE) attribute.
15
CLIPS v6.1
Resumen
1.
2.
3.
4.
5.
Introducción
Hechos
Reglas
Funciones
Marcos
Reglas
Sintaxis
• (defrule <nombre-regla> [<documentacion-opcional>]
[(declare (salience <numero>))]
<premisa-o-elemento-de-condicion>*
⇒
<accion>*
• Ejemplo: (defrule ascendencia ”detecta los antepasados obvios”
(padre-de Luis Pedro)
⇒
(assert (antepasado-de Luis Pedro)))
• Si no hay elementos de condición se usa initial-fact:
(defrule regla-inicial
⇒
(assert (antepasado-de Luis Pedro)))
16
Reglas
Variables
• El uso de variables ?<nombre-variable>, ?$<nombre-variable> hace las
reglas más generales
(defrule ascendencia ”detecta los antepasados obvios”
(declare (salience 2))
(padre-de ?x ?y)
⇒
(assert (antepasado-de ?x ?y))
)
(defrule genera-escenas
(declare (salience 20))
(lista $?l)
⇒
(assert (un-hecho-de-la-lista (nth$ 1 $?l)))
)
17
18
Reglas
Elementos de condición (LHS)
• Patrones: Consulta a la fact-list preguntando por la existencia de hechos
determinados
(dato 1 azul rojo)
(persona (nombre ?N) (amigos $?A) (edad 30))
• Direcciones de hechos: Almacenar direcciones de hechos en variables
?P←(persona (nombre ?N) (amigos $?A) (edad 30))
• Test: Comprobar el cumplimiento de alguna condición
(test (>= (abs (- ?y ?x)) 3))
• Not: Preguntar por la NO existencia de determinados hechos en la
fact-list
(not (dato rojo ?x ?x))
Reglas
Acciones o efectos (RHS)
• assert: Para incorporar un hecho en la fact-list
(assert dato 1 azul rojo))
• retract: Para eliminar un hecho de la fact-list
(defrule eliminar-estado-valvula
?f1 ←(estado (valvula ?X))
⇒
(retract ?f1) )
• modify: Para modificar un hecho de la fact-list. Equivalente a hacer un
retract y un assert. Sólo para plantillas
(defrule cambiar-estado-valvula
?f1 ← (estado (valvula abierta))
⇒
(modify ?f1 (valvula cerrada)))
19
Reglas
Acciones
• Parada: Para parar la ejecución del sistema: (halt)
• bind: Asignación de valor a variables (bind ?X (* ?Y 2))
• Funciones de entrada/salida: open, close, printout, read, readline
• Otras funciones
20
Reglas
Comandos para reglas
• Al definir reglas ya existentes, la primera regla se borra
• (list-defrules): Para ver las reglas definidas
• (ppdefrule <nombre-de-regla>): Para ver la definición de una regla
• (undefrule <nombre-de-regla>): Para eliminar una regla
• (undefrule *): Para eliminar todas las reglas
21
Reglas
Ejecución de reglas
• Las activaciones de reglas se mantienen en la agenda
• La colocación de una regla en la agenda se realiza según su prioridad y
la estrategia de resolución de conflictos definida
• (agenda): Para ver el contenido de la agenda
• (run): Para ejecutar las reglas seguidas
• (run <veces>): Para ejecutar <veces> reglas
• (matches <nombre-regla>): Para ver que hechos se equiparan con los
patrones de una regla
22
Reglas
Depuración de programas
• (watch <item>) : Observación de la evolución de los componentes del
sistema
all compilations statistic messages deffunctions rules facts
activations
• (unwatch <item>): Para desactivar el modo de observación
• (dribble-on/off <nombre-fichero>): Para grabar en un fichero la
evolución del diálogo usuario-CLIPS
• set-break y remove-break: Para poner y quitar un breakpoint en la regla
que se les pasa como argumento
• (run <numero-de-reglas-a-disparar>): Ejecutar paso a paso
• (matches <nombre-regla>): Para ver que hechos se equiparan con los
patrones de una regla
23
Reglas
Estrategias de resolución de conflictos
• Se seleccionan con el comando: (set-strategy <estrategia>)
• depth: (Profundidad). Las nuevas activaciones se sitúan por encima de
las de igual prioridad. Es la estrategia por omisión
• breadth: (Amplitud). Las nuevas activaciones se sitúan por debajo de
las de igual prioridad
• simplicity: Las nuevas activaciones se sitúan por encima de las
activaciones con igual o mayor especificidad
• complexity: Las nuevas activaciones se sitúan por encima de las
activaciones con igual o menor especificidad
• random: Aleatoria. A cada activación se le asigna un número aleatorio
para determinar su orden en la agenda.
24
25
CLIPS v6.1
Resumen
1.
2.
3.
4.
5.
Introducción
Hechos
Reglas
Funciones
Marcos
Funciones
Funciones de Entrada/Salida
• Abrir un fichero: open
(open nombre-fichero nombre-canal-asignado modo-acceso)
• Cerrar un fichero: close
(close nombre-canal)
• Modos de acceso:
”r” sólo lectura
”w” sólo escritura
”r+” lectura y escritura
”a” escritura al final de fichero (append)
• Canales predefinidos: stdin, stdount, werror
• Leer de un canal: read. Devuelve el primer sı́mbolo que encuentre
(read <nombre-canal>)
26
Funciones
Escritura
• Por pantalla: (printout t “texto literal” ?v1 “ más texto” ?v2 crlf)
• En fichero:
(defglobal ?*file* = “ “ )
(defrule estado-inicial
(declare (salience 3000))
⇒
(unwatch all)
(set-strategy random)
(open “cuento.txt” ?*file* “a”)
(printout ?*file* “EMPIEZA EL CUENTO” crlf))
27
Funciones
Funciones de comparación y lógicas
• Las siguientes funciones comparan sus argumentos y devuelven un valor
lógico TRUE o FALSE
? eq TRUE si los valores de las expresiones argumento son iguales en
valor y tipo
? neq TRUE si alguno de los valores de las expresiones argumento es
distinto
• Las funciones =, <>, <, >, <=, >= presuponen argumentos numéricos
• Las funciones lógicas usan argumentos lógicos y devuelven un valor
lógico
? and TRUE si todos los valores de las expresiones argumento son
TRUE
? or TRUE si alguno de los valores de las expresiones argumento es
TRUE
? not TRUE si el valor de la expresión argumento es TRUE
28
29
CLIPS v6.1
Resumen
1.
2.
3.
4.
5.
Introducción
Hechos
Reglas
Funciones
Marcos
Marcos
Definición
• Se declaran con defclass:
(defclass <nombre-plantilla> (is-a <clase-padre>)
<propiedades de la clase>
<descripcion-de-slot1>
...
<descripcion-de-slotN>)
• Slot igual que en las plantillas. Algunos atributos propios
? (create-accesor read-write). Para poder modificarlo
? (source composite). Hereda todas las facetas del mismo slot que el
padre. Redefinir slots
• Propiedades de la clase: (role abstract/concrete),
(pattern-match non-reactive/reactive)
• CLIPS tiene 17 clases definidas. Todas abstractas (no se pueden crear
instancias directas) menos INITIAL-OBJECT
30
Marcos
Ejemplo1
;; Definicion de la clases SECUENCIA
(defclass SECUENCIA (is-a INITIAL-OBJECT)
(slot id
(type INTEGER)
(create-accessor read-write))
(slot gliterario
(type SYMBOL)
(default CUENTO)
(create-accessor read-write))
(multislot lista
(type SYMBOL)
(create-accessor read-write)))
(definstances secuencias
([sec1] of SECUENCIA (id 1) (gliterario cuento)
(lista INTRODUCCION PROBLEMA MANDATO ALEJAMIENTO)))
31
Marcos
Ejemplo2
;; Definición de la clase abstracta (no se pueden generar instancias de ella) ESCENA
(defclass ESCENA (is-a INITIAL-OBJECT)
(role abstract)
(pattern-match non-reactive)
(slot orden
(create-accessor read-write)
(range 1 10)
(type INTEGER)))
;; Definición de las claeses hijas de ESCENA
(defclass INTRODUCCION (is-a ESCENA)
(role concrete)
(pattern-match reactive)
(slot primitiva
(create-accessor read-write)
(type SYMBOL))
(slot orden
(source-composite)
(default 8)))
32
Marcos
Comandos
• make-instance: añade una instancia a la base de hechos
(make-instance of INTRODUCCION (primitiva ESTAR))
• unmake-instance: quita la instancia de la base de hechos
(unmake-instance ?ins)
• modify-instance: borra y crea instancias de la base de hechos
(modify-instance ?ins (orden 7))
• instances: muestra las instancias de la base de hechos
[gen1] of INTRODUCCION
• (send [gen1] print): para ver valor de los slots
33
Marcos
Reglas
(defrule genera-escenas
?control ← (control (paso 1) (secuencia ?id)
(total-escenas ?tot&∼0)
(escena ?es&:(<= ?es ?tot)))
?secuencia ← (object (is-a SECUENCIA) (lista $?lista) (id ?id))
⇒
(bind ?clase (nth$ ?es $?lista))
(printout t ”Escena ”?es çlase, ”?clase crlf)
(make-instance of ?clase (orden ?es))
(modify-instance ?secuencia (id 0))
(unmake-instance ?secuencia)
(modify ?control (escena (+ 1 ?es))))
34
Descargar