Documente Academic
Documente Profesional
Documente Cultură
(laboratorio)
CLIPS
Primavera 2009
profesor: Luigi Ceccaroni
Por qu CLIPS?
Qu relacin hay entres los altibajos de la IA a finales de los 80s y principio de los 90s, y el tener que aprender un nuevo lenguaje en cuarto de carrera? Qu importancia tiene para m el colapso del mercado de las mquinas Lisp del 1987?
Failure to adapt
The fall of the Lisp machine market and the failure of the fifth generation computers were cases of expensive advanced products being overtaken by simpler and cheaper alternatives. This fits the definition of a low-end disruptive technology, with the Lisp machine makers being marginalized.
10
Failure to adapt
Expert systems were carried over to the new desktop computers by, for instance, CLIPS, so the fall of the Lisp machine market and the fall of expert systems are strictly speaking two separate events. Still, the failure to adapt to such a change in the outside computing milieu is cited as one reason for the 80's AI winter.
11
El sistema CLIPS
CLIPS is a public domain software tool for building expert systems. The name is an acronym for "C Language Integrated Production System. The first versions of CLIPS were developed starting in 1985 at NASAJohnson Space Center. The original name of the project was NASA's AI Language (NAIL).
El sistema CLIPS
CLIPS is probably the most widely used expert system tool because it is fast, efficient and free. Although it is now in the public domain, it is still updated and supported by the original author, Gary Riley. CLIPS incorporates a complete objectoriented language COOL for writing expert systems. Though it is written in C, its interface more closely resembles that of the programming language LISP. Extensions can be written in C, and CLIPS can be called from C.
El sistema CLIPS
CLIPS es un entorno para desarrollar sistemas expertos. Define un lenguaje que permite la representacin de:
conocimiento declarativo (marcos) conocimiento procedimental (reglas de produccin)
El lenguaje de CLIPS
Se trata de un lenguaje con notacin prefija. Los tipos de datos predefinidos que interesan son:
real entero cadena smbolo apuntador a hechos nombre de instancia apuntador a instancia
Los tipos habituales poseen los operadores comunes. El lenguaje de CLIPS ana tres paradigmas de programacin:
lenguaje de reglas lenguaje funcional lenguaje orientado a objetos
Hechos
Los dos elementos que permiten representar problemas utilizando reglas de produccin son los hechos y las reglas. Los hechos en CLIPS pueden ser de dos tipos:
ordered facts deftemplate facts
Los ordered facts tienen formato libre, por lo tanto no tienen una estructura predefinida, siguen el esquema general: (relacin p1 p2 ... pn)
relacin ha de ser un smbolo; el resto de parmetros puede ser de cualquier tipo, por ejemplo: (padre Juan Pedro) (num-hijos Juan 2)
Hechos
Los deftemplate facts tienen una estructura predefinida; pueden asimilarse a representaciones al estilo de las ontologas. En estos hechos se define una serie de campos (slots) que enmarcan su estructura. Cada campo puede tener una serie de restricciones como:
tipo cardinalidad un valor por defecto que puede ser:
una constante un funcin para calcularlo
Hechos
Sintaxis:
(deftemplate nombre-template "comentario (slot nombre-slot1) (slot nombre-slot2))
Por ejemplo:
(deftemplate persona persona humana / hombre (slot nombre (type STRING)) (slot edad (type INTEGER) (default 0)))
Hechos
La creacin de hechos se realiza mediante la sentencia assert (uno solo) o deffacts (un conjunto), por ejemplo:
(assert (padre Pepe Juan)) (assert (persona (nombre "pedro") (edad 25))) (deffacts mis-hechos (casa roja) (pelota verde) (persona (nombre "luis) (edad 33)))
Hechos
(facts) permite saber que hechos hay definidos. (clear) borra todos los hechos definidos. (retract <ndice-hecho>) elimina el hecho identificado por el ndice dado. (get-deftemplate-list) retorna la lista de deftemplates definidos.
Reglas
Las reglas en CLIPS estn formadas por:
Una parte izquierda (LHS) que define las condiciones a cumplir Una parte derecha (RHS) que define las acciones a realizar
Sintaxis:
(defrule nombre-regla "comentario" (condicin-1) (condicin-2) ... => (accin-1) (accin-2) ...)
Variables
Para poder establecer patrones en las condiciones de las reglas hacen falta variables Las variables en CLIPS se denotan poniendo un interrogante delante del nombre (?variable) Existen variables annimas (no importa su valor) para un valor ? o para mltiples valores $? Durante la ejecucin de las reglas se buscan los valores que instancien las variables y permitan cumplir las condiciones Las variables de las reglas son locales, si queremos definir variables globales debemos usar la construccin defglobal (las variables globales se denotan ?*variable*)
Notacin
square brackets [...]
contents are optional: (example [test])
pointed brackets (less than / greater than signs) < ... >
replace contents by an instance of that type (example <char>)
star *
replace with zero or more instances of the type <char>*
plus +
replace with one or more instances of the type <char>+ (is equivalent to <char> <char>* )
vertical bar |
choice among a set of items: true | false
Los patrones indican qu tipo de hechos deben instanciar las reglas y se establecen a travs de restricciones sobre variables o valores constantes. Estas restricciones se pueden combinar mediante conectivas lgicas: ~ (no) & (y) 24 | (o)
Ejemplos de LHS
Personas de nombre juan o pedro: (persona (nombre juan|pedro)) Personas con nombres diferentes: (persona (nombre ?x)) (persona (nombre ?y&~?x)) Nadie se llama pedro: (not (persona (nombre pedro))) Todo el mundo es mayor de edad: (forall (persona (nombre ?n) (edad ?x)) (test (> 25 ?x 18)))
Esta sentencia se puede incluir en la parte derecha de una regla para poder cambiar explcitamente de mdulo. Se puede hacer que la ejecucin se enfoque en el mdulo de la ltima regla ejecutada declarando la propiedad autofocus en una regla, por ejemplo: (defrule JUAN::mi-regla (persona (nombre juan)) => ... (declare (auto-focus TRUE))
29
El lenguaje de programacin
CLIPS incluye un lenguaje de programacin que permite definir nuevas funciones o programar las acciones a realizar en la parte derecha de las reglas. Toda sentencia o estructura de control es una funcin que recibe unos parmetros y retorna un resultado (paradigma funcional).
31
Sentencias
Estas son las sentencias y estructuras de control mas utilizadas:
(bind <var> <valor>): Asignacin a una variable; retorna el valor asignado. (if <exp> then <accin>* [else <accin*>]): Sentencia alternativa; retorna el valor de la ultima accin evaluada. (while <exp> do <accin>*): Bucle condicional; retorna falso, excepto si hay una sentencia de retorno que rompa el bucle. (loop-for-count (<var> <val-i> <val-f>) do <accin>*): Bucle sobre un rango de valores; retorna falso, 32 excepto si hay una sentencia de retorno.
Sentencias
Estas son las sentencias y estructuras de control mas utilizadas:
(progn <accin>*): Ejecuta un conjunto de sentencias secuencialmente; retorna el valor de la ltima. (return <expr>): Rompe la ejecucin de la estructura de control que la contiene retornando el valor de la expresin. (break): Rompe la ejecucin de una estructura de control. (switch <expr> (case (<comp>) then <accin>*)* [(default <accion>*)]): Estructura alternativa caso; cada caso hace una comparacin con el valor evaluado; retorna la ltima expresin evaluada o falso si ninguna sentencia caso se cumple. 33
Funciones
La construccin deffunction permite definir nuevas funciones
(deffunction <nombre> "Comentario" (<?parmetro>* [<$?parmetro-W>]) <accin>*)
parmetro-W incluye en una lista el resto de parmetros opcionales. La funcin retorna la ltima expresin evaluada.
34
37
Existen diferentes tipos de message handlers. Es suficiente trabajar con los primary.
40
Los message handlers se pueden redefinir en cada clase. Las subclases pueden ejecutar los message handlers de sus superclases.
Si hay ms de uno con el mismo nombre, por defecto se ejecuta el de la clase ms especfica. Si se quiere ejecutar los de las superclases se ha de usar la sentencia call-next-handler.
42
La clase se ha de haber declarado como utilizable en la LHS de las reglas. La modificacin de un slot de una instancia vuelve a permitir que se pueda volver a 43 instanciar una regla con ella.
CLIPS: la aplicacin
44
46
49