+ All Categories
Home > Documents > CLIPS v6.1 Resumen - galahad.plg.inf.uc3m.esgalahad.plg.inf.uc3m.es/~iat/practicas/clips.pdf ·...

CLIPS v6.1 Resumen - galahad.plg.inf.uc3m.esgalahad.plg.inf.uc3m.es/~iat/practicas/clips.pdf ·...

Date post: 21-Oct-2018
Category:
Upload: buitruc
View: 213 times
Download: 0 times
Share this document with a friend
34
1 CLIPS v6.1 Resumen Raquel Fuentetaja Piz´ an Susana Fern´ andez Arregui [email protected] [email protected] Universidad Carlos III de Madrid Departamento de Inform´ atica http://galahad.plg.inf.uc3m.es/docweb/
Transcript

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/

2

CLIPS v6.1Resumen

1. Introduccion2. Hechos

3. Reglas

4. Funciones

5. Marcos

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

7

CLIPS v6.1Resumen

1. Introduccion

2. Hechos3. Reglas

4. Funciones

5. Marcos

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.

15

CLIPS v6.1Resumen

1. Introduccion

2. Hechos

3. Reglas4. Funciones

5. Marcos

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.

25

CLIPS v6.1Resumen

1. Introduccion

2. Hechos

3. Reglas

4. Funciones5. Marcos

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

29

CLIPS v6.1Resumen

1. Introduccion

2. Hechos

3. Reglas

4. Funciones

5. Marcos

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))))


Recommended