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: [Link]
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: [Link] FuzzyCLIPS: extensin con soporte para lgica difusa Web: [Link]
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 "[Link]"): carga un chero (save "[Link]"): 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