You are on page 1of 20

Introduccin a CLIPS

Inteligencia Articial 5o Informtica IA curso 2008-2009


CCIA

Noviembre 2008

IA0809 (CCIA)

CLIPS

Noviembre-2008

1 / 10

Introduccin a CLIPS
CLIPS: C Language Integrated Production Systema Entorno para el desarrollo de sistemas expertos
Desarrollado en C con licencia libre Web: http://clipsrules.sourceforge.net/

Dene lenguaje para denicin de hechos(frames) y reglas


Integra elementos del paradigma funcional y orientado a objetos

Uso desde intrprete o integrado en programas C Derivados:


JESS: implementacin Java Web: http://www.jessrules.com/ FuzzyCLIPS: extensin con soporte para lgica difusa Web: http://www.iit.nrc.ca/IR_public/fuzzy/

IA0809 (CCIA)

CLIPS

Noviembre-2008

2 / 10

Comandos
Inicio: $ clips Finalizacin: (exit) (clear): elimina los hechos de la memoria activa (reset): inicia/reinicia el intrprete
elimina hechos y reglas activadas restaura la situacin inicial (hechos iniciales)

(load "fich.clp"): carga un chero (save "fich.clp"): guarda reglas y hechos de sesin actual (run) : inicia encadenamiento hacia adelante
naliza cuando no existan reglas que aplicar

(run <n>): inicia encadenamiento hacia adelante


naliza cuando haya ejecuta n reglas

(facts): muestra los hechos de la memoria activa (instances): muestra las instancias de la memoria activa (agenda): muestra las reglas activadas (en orden) (watch facts|rules|...): modo de depuracin
muestra lista de hechos|reglas|.. cada vez que se modican
IA0809 (CCIA) CLIPS Noviembre-2008 3 / 10

Hechos
Frames simplicadas (no hay niveles de indentacin) Formadas por conjuntos de slots (ranuras)
Pares atributo-valor un valor simple lista de valores

Tres opciones
Frames annimas (ordered facts)
Formato libre: nombre + lista plana de valores Usados para representar relaciones/propiedades simples Ejemplo: (cerca Vigo Pontevedra)

Frames con estructura (non-ordered facts)


La lista de slots admitidos se declara con deftemplate (asignatura "descripcin de IA" (nombre "inteligencia artificial") (curso 5) (creditos 9) (profesor "..."))

Objetos (instances)
Similares a frames con estructura Pertenecientes a una clase declarada con defclass
IA0809 (CCIA) CLIPS Noviembre-2008 4 / 10

Comandos manejo de hechos


Aadir a memoria activa: (assert <hecho>)
CLIPS > (assert (persona (nombre "juan prez prez") (edad 25) (padres "lucas" "ana")))

Eliminar de memoria activa: (retract <ref. a hecho>)


CLIPS > (retract 1) CLIPS > (retract ?res) [elimina el hecho no 1] [elimina el hecho apuntado por variable ?res]

Modicar campos: (modify <ref. hecho>


CLIPS > (modify 1

<nuevo slot> ...)

(nombre "juan luis prez prez"))

Copiar: (duplicate <ref. hecho> <nuevo slot> ...)


CLIPS > (duplicate 1 (nombre "antonio prez prez") (edad 24))

IA0809 (CCIA)

CLIPS

Noviembre-2008

5 / 10

Plantillas de hechos
Denen la estructura de las frames no ordenadas (non-ordered facts) Asigna nombre al tipo de frame Listado de ranuras (slots) indicando sus caractersticas (facets)
clase de slot: simple, multivaluado tipo de su contenido: STRING, SYMBOL, INTEGER, .. rango de valores valor por defecto, etc, ...

Nota: El orden de los slots en un hecho no es relevante Esquema


(deftemplate <nombre frame> (slot <nombre>) (slot <nombre> (type <tipo>) (default <valor>) ...) (multislot <nombre> (type <tipo>) (default <valor>) ...) ... )

Ejemplo
(deftemplate persona (slot nombre (type STRING)) (slot edad (type INTEGER) (range 0 120)) (multislot padres (type STRING) (cardinality 0 2)))
IA0809 (CCIA) CLIPS Noviembre-2008 6 / 10

Hechos iniciales
Por defecto, al inicio de la ejecucin o despus del comando (clear), siempre existir el hecho inicial (initial-fact) Cada vez que se ejecuta el comando (reset)) se incluyen en la memoria activa los hechos denidos con el constructor deffacts y las instancias (objetos) denidas con denstances
(deffacts <nombre-deffacts> <hecho 1> ... <hecho n> )

Ejemplo:
(deffacts personas-iniciales (persona (nombre "juan") (edad 26) (padres "luis" "ana")) (persona (nombre "ana") (edad 59)) (persona (nombre "luis") (padres "pedro" "eva") )

Nota: secuencia tpica de comandos


CLIPS > (reset) CLIPS > (run)
IA0809 (CCIA)

[inserta hechos iniciales => se activan reglas] [inicia la ejecucin de las reglas]
CLIPS Noviembre-2008 7 / 10

Reglas (defrule)
Lado izquierdo (patrones) Lado derecho (acciones) Sintaxis:
(defrule <nombre regla> (declare (salience (patron 1) ... (patron n) => (accion 1) ... (accion m) ) <comentario (opc.)> <prioridad>)) [opcional]

condiciones sobre hechos/instancias pueden incluir variables aadir/modicar/borrar hechos/instancias interaccin con usuario (leer/escribir) uso de variables denidas en lado izq. accin (halt): detiene inferencias

De entre las reglas que cumplan todas sus precondiciones en la memoria activa actual , el motor de inferencias seleccionar una o varias a ejecutar (y su orden).
IA0809 (CCIA) CLIPS Noviembre-2008 8 / 10

(defrule hermanos (persona (nombre ?n1) (padres ?p $?)) (persona (nombre ?n2) (padres ?p $?)) => (assert (hermanos (hijo1 ?n1) (hijo2 ?n2))) (printout t "hermanos " ?n1 ?n2 " hijos de " ?p crlf) ) (defrule activar-aspersor (sensor (tipo temperatura) (ubicacion ?id-habitacion) (activado si)) ?hab <- (habitacion (id ?id-habitacion) (aspersor apagado)) (sensor (tipo presencia) (ubicacion ?id-habitacion) (activado)) => (assert (alarma (tipo fuego) (ubicacion ?id-habitacion)) (assert (accion (tipo desalojo) (ubicacion ?id-habitacion)) (modify ?hab (aspersor encendido)) )
IA0809 (CCIA) CLIPS Noviembre-2008 9 / 10

Variables
Sintaxis: variables simples: ?<nombre> variables multivaluadas: $?<nombre>

Nota:Variables annimas (comodines): ? (1 valor) $? (n valores)

Normalmente se asignan (toman valor) en el lado izquierdo


(condiciones) Puede asignrseles valor explcitamente con el comando (bind <variable> <expresion>)

Uso

lado derecho: correspondencia de patrones compleja lado izquierdo: acceso a sus valores

Pueden referirse al valor de un slot


(persona (edad ?edad))

Pueden mantener una referencia a un hecho/objeto (operador <-)


?hecho <-(persona (nombre "juan") (edad ?edad))

IA0809 (CCIA)

CLIPS

Noviembre-2008

10 / 10

Condiciones sobre slots y variables


Restricciones sobre slots negacin (~): (persona (edad ~25)) conjuncin (&): (persona (edad ~25 & ~26))
Util para extraer e valor de una variable a la vez que se aplica la restriccin (edad ?edad & 25)

disyuncin (|): (persona (edad 25 | 26)) Restricciones sobre variables: comando (test <operador> <argumentos>) Generalmente en lado izquierdo (tambin posible en lado derecho) Operadores: and, or, not, <, >, =, ... Pueden usarse funciones denidas por el usuario (deffunc .... ) Usa notacion preja + parntesis para expresiones complejas
(persona (edad ? edad)) (test (and (>= ?edad 25) (<= ?edad 65)))
IA0809 (CCIA)

/* edad en 25 y 65 */
CLIPS Noviembre-2008 11 / 10

Patrones complejos
Por defecto deben vericarse todos los patrones para que una regla se active AND implcito Pueden usarse otros operadores para agrupar los patrones del lado izquierdo (or <patrones>): al menos uno de los patrones debe satisfacerse en la memoria activa actual
la regla sea activar una vez para cada patrn que se satisfaga

(and <patrones>): todos os patrones debe satisfacerse en la memoria activa actual (not <patron>): el patrn no debe satisfacerse en la memoria activa actual (exist <patrones>): uno o ms patrones deben satisfacerse, pero la regla se activar una nica vez (forall <patron> <patrones>): exige que el conjunto de hechos que satisfagan el primer patrn deban satisfacer los dems (logical <patron>): establece un vnculo lgico entre el IA0809 (del CCIA ) Noviembre-2008 12 / 10 patrn lado derecho y losCLIPS hechos que se aadan en las

Proceso de inferencia
Emparejar hechos/instancias con reglas Reglas activadas se mantienen en la agenda Una agenda por cada mdulo que componga el sistema Funciona como pila: prxima regla a ejecutar en la cima Posibilidad de usar prioridades (salience) Ante empates en agenda ejecutar antes reglas mayor salience
refraccin: slo se seleccionan para ejecucin reglas que no fueran activadas en el pasado por el conjunto de hechos/instancias actual

Pueden indicarse distintas estrategias de resolucin de conictos


Deciden en caso de empates entre reglas de igual prioridad Comando (set-stretegy <estrategia>) Profundidad (depth): estrategia por defecto, nuevas activacionespor encima Anchura (breadth): activaciones nuevas quedan por debajo Simplicidad (simplicity): preferencia a activaciones de reglas menos especcas ( no comparaciones en lado izq.) Complejidad (complexity): preferencia a activaciones de reglas ms especcas Lex y Mea: preferencia por las activaciones nuevas de reglas ms especcas Aletoria (random)
IA0809 (CCIA) CLIPS Noviembre-2008 13 / 10

Orientacin a Objetos
COOL: Clips Object-Oriented Language Amplicacin de CLIPS para dar soporte a caractersticas de la POO (herencia, encapsulacin,...) Clases predenidas:

Clases de usuario heredan de USER INITIAL-OBJECT usado para instancias inciales (comando (clear))

IA0809 (CCIA)

CLIPS

Noviembre-2008

14 / 10

Denicin de clases
Operador deffclass
(defclass nombre [comentario] (is-a <nombre superclase>) (role concrete | abstract) (pattern-match reactive | non-reactive) <definicin slots> <definicin handlers> )

[opcional] [opcional]

En cada clase se especica Su superclase (is-a) [es posible herencia mltiple] Si es abstracta o concreta (puede tener instancias) (role) Si los cambios en sus slots pueden disparar los patrones de las reglas (pattern-match reactive) o no (pattern-match non-reactive) Lista de slots con sus restricciones
limitar el acceso al slot: (visibility public|private), (access read-write|read-only|initializa-only) indica si crear handlers get y set para ese slot: (create-accesor ?NONE|read|write|read-write)
IA0809 (CCIA) CLIPS Noviembre-2008 15 / 10

(defclass ser_vivo (is-a USER) (role abstract) (slot nombre (type STRING)) (defclass vegetal (is-a ser_vivo) (role abstract) ) (defclass animal (is-a ser_vivo) (role abstract) (slot edad))

(defclass gato (is-a animal) (role concrete) (slot raza (type STRING)) (slot color (type SYMBOL))) (defclass perro (is-a animal) (role concrete) (slot raza (type STRING)) (slot color (type SYMBOL)))

(defclass hombre (is-a animal) (defclass mamifero (role concrete) (is-a animal) (slot pais (type SYMBOL)) (role abstract) (slot DNI (type SYMBOL))) (slot num_patas (type INTEGER))

IA0809 (CCIA)

CLIPS

Noviembre-2008

16 / 10

Denicin y uso de instancias


Creacin: (make-instance [<instancia>] of <nombre clase> <definicion slots>)
(make-instance alumno1 of hombre (nombre "juan") (edad 26)) (make-instance of hombre (nombre "luis") (edad 56))

Modicacin: (modify-instance <instancia> <redefinicion slots>)


(modify-instance alumno1 (nombre "juan antonio"))

Copia: (duplicate-instance <instancia> [to <nueva instancia>] <redefinicion slots>)


(duplicate-instance alumno1 to alumno2 (nombre "pedro")) (duplicate-instance alumno2 to alumno3)

Borrado: (make-instance <ref. instancia>)


(unmake-instance alumno1) (unmake-instance ?referencia)

Otra opcin: usar handler delete ((send [instancia]) delete)


(send [alumno1] delete)
IA0809 (CCIA) CLIPS Noviembre-2008 17 / 10

Denicin y uso de instancias


Declaracin instancias iniciales: (denstances) Instancias a crear al inicio de la ejecucin (comando (reset)) Siempre existe objeto initial-object (de clase INITIAL-OBJECT)
(definstances personas (juan of hombre (nombre "juan") (luis of hombre (nombre "luis") (pablo of hombre (nombre "pablo"))

Denicin de handlers: Acceso a variables y ejecucin de handlers (mtodos)


([instancia] send <nombre handler> <paramatros>)

(defmessage-handler <clase> <handler> (<parametros>) <lista instru

En slots donde se dena modicador create-accessor se crean get-<nombre slot> dos handlers set-<nombre slot>
([juan] send set-edad 26) ([pablo] send imprimir) ([juan] send get-nombre)
IA0809 (CCIA) CLIPS Noviembre-2008 18 / 10

Uso de objetos en reglas


Se pueden crear precondiciones en el lado izquierdo de las reglas que hagan referencia objetos o al valor de sus slots usando la palabra clave object
(object <lista 8 restricciones>) < (is-a <nombre clase>) (name <restriccion sobre nombre>) <restriccion> = : (<nombre slot> <restriccion sobre slot>)

Ejemplo
(defrule fuego-misma-planta (object (is-a sensor-humo) (habitacion ?id_habitacion) (activo SI)) (object (is-a habitacion) (id ?id_habitacion) (piso ?piso) (aspersor encendido)) ?h1 <- (object (is-a habitacion) (piso ?piso)) => (modify-instance ?h1 (aspersor encendido)) (bind ?nombre-habitacion [?h1] get-nombre) (printout "Encendido aspersor en la habitacion " ?nombre-habitacion " del piso " ?piso crlf)) )
IA0809 (CCIA) CLIPS Noviembre-2008 19 / 10

Otras posibilidades

Denicin de funciones: (deffunc ....) Divisin en mdulos: (defmodule ...))


exportacin e importaciones de elementos: plantillas, hechos, reglas, clases, ...

Uso de factores de certidumbre asoicados a reglas y hechos Simulacin de razonamiento hacia atrs

IA0809 (CCIA)

CLIPS

Noviembre-2008

20 / 10

You might also like