Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qu es?
CLIPS es una herramienta que provee un entorno de desarrollo para la produccin y ejecucin de sistemas expertos.
Sistemas de Produccin
Las representacin mediante formalismos lgicos puede verse de forma procedimental Describimos cuales son los pasos para resolver un problema como una cadena de deducciones La representacin se basa en dos elementos: Hechos: Proposiciones o Predicados Reglas: Formulas condicionales donde el consecuente habitualmente est formado por un predicado atmico o una accin Analoga con bsqueda en espacio de estados Hechos = Estado del problema Reglas = Operadores de bsqueda
Sistemas de Produccin
Ejecucin de la regla
Modicacin de la base de hechos
Caractersticas
En desarrollo desde 1985 De dominio pblico.
Portable: Se puede portar a cualquier sistema con compilador ANSI C o C++. Integrable: C, Java, FORTRAN, ADA
CLIPS Soporta:
Programacin declarativa: Reglas (con encadenamiento hacia adelante) Programacin procedimental Programacin orientada a objetos Derivados e interfaces con otros lenguajes, como: JESS: Java. FuzzyCLIPS: razonamiento difuso. CLIPSMM: C++. PHLIPS: extensin para PHP. PyCLIPS: interfaz libre para Python.
Interfaz
Estructura
El shell (parte de CLIPS que realiza inferencias o razonamiento) provee los elementos bsicos de un SE:
Memoria global de datos (memoria de trabajo, MT) Base de conocimiento (knowledge base)
Motor de inferencia (inference engine)
Programa dirigido por datos (Data Driven) Se hace match entre objetos y hechos
Agenda
CLIPS coloca en la Agenda las reglas cuyos patrones antecedente concuerdan con hechos. Estas reglas se ejecutarn al teclear (run) El contenido de la Agenda se puede inspeccionar con el comando (agenda).
Comandos
(clear): Restaura el estado inicial de CLIPS: borra todos los hechos y todas las reglas, reinicia a cero el identificador de hechos. (run): Ejecuta el programa. Este termina cuando ya no hay activaciones en la agenda
(printout ventana t Hola mundo ! crlf): imprime en
HECHOS
Elementos bsicos de conocimiento Los hechos (facts) en CLIPS constan de: Un nombre del hecho (Ej: relacin) Una o ms ranuras (slots) Antes de crear hechos, para cada tipo de hecho puede definirse una plantilla con la lista de ranuras vlidas para ese tipo de hecho. A cada hecho CLIPS asigna automticamente un identicador nico
(deftemplate persona es una persona (slot nombre) (slot edad) (slot estatura) (slot color-de-cabello))
Asertacin De Un Hecho
(assert (persona (nombre Juan Mora") (edad 35) (estatura 168) (color-de-cabello negro)))
<Fact-0>
Asertacin de un Hecho
(assert (persona (nombre Pedro Pombo") (edad 46) (estatura 172) (color-de-cabello negro)))
<Fact-1>
Comando (facts)
f-0 (persona (nombre "Juan Mora") (edad 35) (estatura 168) (color-de-cabello negro)) f-1 (persona (nombre "Pedro Pombo") (edad 46) (estatura 172) (color-de-cabello negro)) For a total of 2 facts.
Comando (duplicate )
f-1 (persona (nombre "Pedro Pombo") (edad 46) (estatura 172) (color-de-cabello negro)) f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168) (color-de-cabello negro))
f-3 (persona (nombre "Lina Mira") (edad 46) (estatura 172) (color-de-cabello negro))
For a total of 3 facts.
Comando (retract)
f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168)
(color-de-cabello negro))
f-3 (persona (nombre "Lina Mira") (edad 46) (estatura 172)
Eliminacin Mltiple
(retract 0 2 5) Elimina 3 reglas (retract * )
Elimina todas las reglas
Slots Mltiples
(deftemplate individuo ejemplo multislot (multislot nombre) (slot edad) (slot estatura) (slot color-de-cabello))
Slots Mltiples
(individuo (nombre Juan Mora Duarte) (edad 35) (estatura 168) (color-de-cabello negro)))
(persona (nombre "Marta Paez") (edad 33) (estatura 170) (color-de-cabello rubio))
(persona (nombre "Diego Molina") (edad 25) (estatura 168) (color-de-cabello negro))
(persona (nombre "Luz Prez Daza") (edad 19) (estatura 166) (color-de-cabello negro)) )
Comando (reset)
1. Se borran los hechos que hay en la lista de hechos (no se borran reglas) 2. Los hechos definidos en deffacts se crean en la lista de hechos 3. Se crea el hecho adicional (initial-fact) con identificador f-0 Este hecho inicial se usa tpicamente para iniciar la ejecucin del programa.
Hechos sin Template (assert (jefe Hector Luis)) (assert (jefe Diego Hector)) (assert (tallas 12 32 34 40))
36
Comando watch
Sintxis: (watch <item-observado>) (watch facts) (watch activations) (watch rules) (watch statistics) Se desactivan con: (unwatch <item-observado>)
REGLAS
Reglas
Una regla consta de un antecedente (LHS) y de un consecuente (RHS). El antecedente son las condiciones que se deben satisfacer para aplicar la regla. LHS => RHS Para satisfacer el antecedente los hechos deben estar en la MT.
Reglas
Se definen para activarse cuando se de un hecho especfico. Formato: <pre-condicin> => <post-condicin> Pueden generar nuevos hechos.
Reglas
Ejemplo de reglas
Sean estas dos plantillas Ejemplo de regla
(defrule peligro-presion regla ejemplo (peligro (tipo presionexcesiva)) => (assert (respuesta (action abrir-valvula))))
Variables
Permiten generalizar las reglas Comienzan por signo de interrogacin. Ejemplos: ?precio ?nn ?color Al comparar Se busca concordancia entre un patrn que tenga variables y un hecho las variables se enlazan a los valores correspondientes dentro del hecho
Variables En Reglas
Regla Hechos
?x Agustn ?y Pedro
(abuelo Agustn Hernando )
Comodines (wildcards)
A veces en la comparacin de patrones y hechos existen campos en un hecho cuyos valores nos interesan pero deben tenerse en cuenta para que haya concordancia. Sea el hecho: (nombre Jos Luis Ramrez) El patrn: (nombre ? ? Ramrez) hace concordancia con ese hecho y todos los que tengan 2 nombres y Ramrez.
Comodines (wildcards)
El patrn: (nombre ? $? ramirez) hace concordancia con hechos como: (nombre jose luis ramirez)
(nombre hugo ramirez) (nombre luis pablo maria ramirez) $? comodn para cero o ms campos
Ejecutando
(deftemplate persona (slot nombre) (slot edad) (slot estatura) (slot color-de-cabello)) (assert (persona (nombre juan) (edad 30) (estatura 173) (colorde-cabello rubio))) (assert (persona (nombre pedro) (edad 20) (estatura 166) (colorde-cabello negro)))
Ejecutando
(defrule hallar-rubios (persona (nombre ?nn) (color-de-cabello rubio)) => (printout t ?nn " es rubio" crlf)) (run)
CLIPS> (facts) f-0 (perro rintintin) f-1 (perro lassie) f-2 (perro laika) f-3 (gato felix) f-4 (gato garfield) For a total of 5 facts. CLIPS>
CLIPS> (run) maulla garfield maulla felix ladra laika ladra lassie ladra rintintin CLIPS>
CLIPS> (facts) f-0 (perro rintintin) f-1 (perro lassie) f-2 (perro laika) f-3 (gato felix) f-4 (gato garfield) f-5 (maulla garfield) f-6 (maulla felix) f-7 (ladra laika) f-8 (ladra lassie) f-9 (ladra rintintin) For a total of 10 facts. CLIPS>
Variables Multicampo
Si anteponemos $ a una variable en un patrn, esa variable har concordancia (matching) con una lista de cero o ms smbolos en un hecho, en CLIPS esta lista es un valor multicampo.
Variables multicampo
assert (escritor Gabriel Garca Mrquez)) (defrule R1 (escritor $?nombres ) => (printout t ?nombres crlf ) )
(run)
Restricciones En Variables
El patrn: (metal oro | plata | titanio )
hace concordancia con los hechos: (metal oro) (metal titanio) (metal plata)
Restricciones En Variables
El patrn: (metal ~oro )
hace concordancia con cualquier smbolo excepto oro (metal titanio) (metal plata)
Restricciones En Variables
Se puede usar el operador & para poner una combinacin de
Funciones Aritmticas
Operadores aritmticos en CLIPS:
CLIPS> (+ 2 3 4) 9
Funciones Lgicas
Las funciones lgicas de devuelven verdadero (smbolo TRUE) o falso (smbolo FALSE): = <> > < >= <= and or eq neq integerp oddp
(deffunction <nombre> "comentario opcional" (?arg1 ?arg2 ... ?argM [$?argN]) <accion1> <accion2> ... <accion(K-1)> <accionK> )
CLIPS> ( deffunction hipotenusa (?a ?b) (sqrt (+ ( * ?a ?a) (* ?b ?b) ) ) ) CLIPS> ( hipotenusa 4 6 ) CLIPS> 7.21110255092798
Otros Comandos
Listar contenido (declaraciones) de defrules, deftemplates y deffacts: (ppdefrule <nombre>) (ppdeftemplate <nombre>) (ppdeffacts <nombre>)
Otros Comandos
Borrar defrules, deftemplates y deffacts: (undefrule <nombre>) (undeftemplate <nombre>)
(undeffacts <nombre>)
Otros Comandos
Listar nombres de defrules, deftemplates y deffacts: (list-defrules) (list-deftemplates) (list-deffacts)
Ejemplos