Está en la página 1de 56

CLIPS

C Language Integrated Production System

Qu es?
CLIPS es una herramienta que provee un entorno de desarrollo para la produccin y ejecucin de sistemas expertos.

Basado en Sistemas de Produccin

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

Nuevos clculos, nuevas acciones, preguntas al usuario


Nuevos sub-objetivos El proceso de deduccin acaba cuando: se encuentra la conclusin (el objetivo) buscado xito

no queda ninguna regla aplicable xito? / fracaso?

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.

Sistemas Basados En El Conocimiento

Sistemas Basados En El Conocimiento

Memoria de Trabajo (hechos)

Motor de Inferencias AGENDA


Base de conocimientos (reglas)

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

(load): carga un archivo en el programa

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

Plantilla Para Hechos (templates)


Permiten asignar un nombre a cada campo. El orden de los slots no tiene importancia

(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.

Modificar Ranura De Un Hecho


(modify 0 (edad 37)) 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))

For a total of 2 facts.

Crear Un Hecho Con Base En Otro:

(duplicate 1 (nombre Lina Mira))


<Fact-3>

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)

(color-de-cabello negro)) For a total of 2 facts.

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

Declaracin Mltiple De Hechos


(deffacts gente algunas personas

(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

LHS => RHS

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

(defrule nombre comentario opcional (patron-1) . . . . (patron-n) => (accion-1) . . . . (accion-m) )


El nombre debe ser nico.

Ejemplo de reglas
Sean estas dos plantillas Ejemplo de regla

(deftemplate peligro (slot tipo)) (deftemplate respuesta (slot accion))

(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

(defrule R-abuelo (papa ?x ?y ) (papa ?y ?z ) => (assert (abuelo ?x ?z )))

(papa Agustn Pedro ) (papa Pedro Hernando )

?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> juan es rubio

Un Ejemplo Con 2 Reglas


CLIPS> (assert (perro rintintin)) <Fact-0> CLIPS> (assert (perro lassie)) <Fact-1> CLIPS> (assert (perro laika)) <Fact-2> CLIPS> (assert (gato felix)) <Fact-3> CLIPS> (assert (gato garfield)) <Fact-4> <CLIPS>

Un Ejemplo Con 2 Reglas


CLIPS>(defrule ladran "" (perro ?x) => (assert (ladra ?x)) (printout t "ladra " ?x crlf)) CLIPS>(defrule maullan "" (gato ?x) => (assert (maulla ?x)) (printout t "maulla " ?x crlf))

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.

A la variable se asigna pues la lista multicampo en este caso.


El signo $ no es parte del nombre de la variable. El $ es como una funcin cuyo argumento es una variable monocampo y que retorna una variable multicampo

Variables multicampo
assert (escritor Gabriel Garca Mrquez)) (defrule R1 (escritor $?nombres ) => (printout t ?nombres crlf ) )

(run)

CLIPS>(Gabriel Garca Mrquez)

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

restricciones a una variable. Ejemplo, el patrn:


(metal ?m&~titanio&~oro) har concordancia con cualquier hecho metal en el cual el metal

no sea titanio ni oro, y el valor de ?m ser asignado al valor que concuerde.

Funciones Aritmticas
Operadores aritmticos en CLIPS:

+ - * / mod En CLIPS se usa una notacin prefija para las expresiones


aritmticas la evaluacin se realiza de izquierda a derecha

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

CLIPS> (and (> 4 3) (> 4 5)) FALSE

(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

Clipswin Integracin con NetBeans

También podría gustarte