Professional Documents
Culture Documents
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/
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
(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)
Objetos (instances)
Similares a frames con estructura Pertenecientes a una clase declarada con defclass
IA0809 (CCIA) CLIPS Noviembre-2008 4 / 10
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, ...
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") )
[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>
Uso
lado derecho: correspondencia de patrones compleja lado izquierdo: acceso a sus valores
IA0809 (CCIA)
CLIPS
Noviembre-2008
10 / 10
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
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
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
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
Uso de factores de certidumbre asoicados a reglas y hechos Simulacin de razonamiento hacia atrs
IA0809 (CCIA)
CLIPS
Noviembre-2008
20 / 10