Upload
buitruc
View
215
Download
0
Embed Size (px)
Citation preview
1
CLIPS v6.1Resumen
Raquel Fuentetaja Pizan Susana Fernandez [email protected] [email protected]
Universidad Carlos III de MadridDepartamento de Informatica
http://galahad.plg.inf.uc3m.es/∼docweb/
3Introduccion
Clips
• CLIPS: C Language Integrated Production System
• Programado en C
• Comunicacion 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
4Introduccion
Interprete de comandos
• $ clips
• $ clips -f nombrefichero, nombrefichero fichero con comandos CLIPS
• Recomendacion: Utilizar emacs o xemacs, hacer dos buffers en uno tenerel fichero .clp y en el otro abrir un shell con clips
• Cuando aparece el prompt CLIPS > introducir comandos para evaluar
• Distingue entre mayusculas y minusculas
• Clips tiene muchos comandos implementados: (load nombrefichero),(reset), (run), (clear) . . .
5Introduccion
Expresiones
• La sintaxis de las expresiones es prefija
• Una expresion es una serie de campos delimitados por parentesis
• Ejemplo: (+ 1 (* 2 3))
• En modo interactivo CLIPS evalua las expresiones:CLIPS > (+ 1 2 (* 3 4 ))15CLIPS >
• Algunas funciones y operadores matematicos disponibles:+ - / * mod div sqrt round integer
6Introduccion
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
8Hechos
Facts
• Elementos basicos de conocimiento
• Pueden tener un campo o varios. El primer campo suele representar unarelacion 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 automaticamente un identificador unico(fact-index). Por ejemplo f-10
9Hechos
Comandos sobre hechos
• (facts) : Para ver el contenido de la base de hechos (fact-list)
• (assert hecho) : Para anadir 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 lasactivaciones de la agenda y restaura las condiciones iniciales:
- Anade initial-fact e initial-object
- Anade los hechos y ejemplares iniciales, definidos con deffacts ydefinstances
- Anade las variables globales con su valor inicial
• (clear) : Elimina todos los hechos y construcciones de la memoria detrabajo
10Hechos
Hechos iniciales
• deffacts: Para definir los hechos inicialesLos hechos iniciales se anaden a la base al hacer (reset)
- CLIPS > (deffacts padres ”padres iniciales”
(padre-de Luis Antonio)
(padre-de Luis Maria)
(padre-de Antonio Juan))
- CLIPS > (reset)
- CLIPS > (facts)
f-0 (initial-fact)
f-1 (padre-de Luis Antonio)
f-2 (padre-de Luis Maria)
f-3 (padre-de Antonio Juan)
11Hechos
Plantillas o templates
• Permiten asignar un nombre a cada campo. El orden de los slots notiene 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 unico valor slot o varios multislot
12Hechos
Atributos o facetas
• Los atributos de un slot pueden ser de dos tipos
- De restriccion
? type tipo : determina el tipo de datos del slot
? allowed-values valores: limita al conjunto de valores los que sepueden asignar
? range rango : limita los valores posibles al rango indicado
- De valor
? default valor: valor por omision al slot
? Se puede forzar al usuario a que indique un valor (?NONE)
? Se puede indicar que sea CLIPS quien determine el valor por omisionde un slot en funcion de las restricciones aplicadas siguiendo unaserie de reglas con el atributo ?DERIVE
• Ademas de assert y retract se pueden modificar con modify(modify direccion-hecho (nombre-atributo nuevo-valor)* )
13Hechos
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)) )
14Hechos
Ejemplo
• Insertar hechos diferentes de tipo fichado:(assert (fichado (nombre “Carlos”) (edad 28) (condicion sospechoso)))
(assert (fichado (nombre “Pepe”) (edad 18) (clase alta)))
(assert (fichado (nombre “Juan”)))
(assert (fichado (nombre “Juan”)))
FALSE
• 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.
16Reglas
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 condicion se usa initial-fact:(defrule regla-inicial
⇒(assert (antepasado-de Luis Pedro)))
17Reglas
Variables
• El uso de variables ?<nombre-variable>, ?$<nombre-variable> hace lasreglas mas 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)))
)
18Reglas
Elementos de condicion (LHS)
• Patrones: Consulta a la fact-list preguntando por la existencia de hechosdeterminados
(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 condicion(test (>= (abs (- ?y ?x)) 3))
• Not: Preguntar por la NO existencia de determinados hechos en lafact-list
(not (dato rojo ?x ?x))
19Reglas
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 unretract y un assert. Solo para plantillas(defrule cambiar-estado-valvula
?f1← (estado (valvula abierta))
⇒(modify ?f1 (valvula cerrada)))
20Reglas
Acciones
• Parada: Para parar la ejecucion del sistema: (halt)
• bind: Asignacion de valor a variables (bind ?X (* ?Y 2))
• Funciones de entrada/salida: open, close, printout, read, readline
• Otras funciones
21Reglas
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 definicion de una regla
• (undefrule <nombre-de-regla>): Para eliminar una regla
• (undefrule *): Para eliminar todas las reglas
22Reglas
Ejecucion de reglas
• Las activaciones de reglas se mantienen en la agenda
• La colocacion de una regla en la agenda se realiza segun su prioridad yla estrategia de resolucion 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 lospatrones de una regla
23Reglas
Depuracion de programas
• (watch <item>) : Observacion de la evolucion de los componentes delsistemaall compilations statistic messages deffunctions rules factsactivations
• (unwatch <item>): Para desactivar el modo de observacion
• (dribble-on/off <nombre-fichero>): Para grabar en un fichero laevolucion del dialogo usuario-CLIPS
• set-break y remove-break: Para poner y quitar un breakpoint en la reglaque 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 lospatrones de una regla
24Reglas
Estrategias de resolucion de conflictos
• Se seleccionan con el comando: (set-strategy <estrategia>)
• depth: (Profundidad). Las nuevas activaciones se situan por encima delas de igual prioridad. Es la estrategia por omision
• breadth: (Amplitud). Las nuevas activaciones se situan por debajo delas de igual prioridad
• simplicity: Las nuevas activaciones se situan por encima de lasactivaciones con igual o mayor especificidad
• complexity: Las nuevas activaciones se situan por encima de lasactivaciones con igual o menor especificidad
• random: Aleatoria. A cada activacion se le asigna un numero aleatoriopara determinar su orden en la agenda.
26Funciones
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” solo lectura
”w” solo 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>)
27Funciones
Escritura
• Por pantalla: (printout t “texto literal” ?v1 “ mas 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))
28Funciones
Funciones de comparacion y logicas
• Las siguientes funciones comparan sus argumentos y devuelven un valorlogico TRUE o FALSE
? eq TRUE si los valores de las expresiones argumento son iguales envalor y tipo
? neq TRUE si alguno de los valores de las expresiones argumento esdistinto
• Las funciones =, <>,<,>,<=, >= presuponen argumentos numericos
• Las funciones logicas usan argumentos logicos y devuelven un valorlogico
? and TRUE si todos los valores de las expresiones argumento sonTRUE
? or TRUE si alguno de los valores de las expresiones argumento esTRUE
? not TRUE si el valor de la expresion argumento es TRUE
30Marcos
Definicion
• 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 elpadre. Redefinir slots
• Propiedades de la clase: (role abstract/concrete),(pattern-match non-reactive/reactive)
• CLIPS tiene 17 clases definidas. Todas abstractas (no se pueden crearinstancias directas) menos INITIAL-OBJECT
31Marcos
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)))
32Marcos
Ejemplo2
;; Definicion 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)))
;; Definicion 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)))
33Marcos
Comandos
• make-instance: anade 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
34Marcos
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 clase, ”?clase crlf)(make-instance of ?clase (orden ?es))(modify-instance ?secuencia (id 0))(unmake-instance ?secuencia)(modify ?control (escena (+ 1 ?es))))