Clips

Introducción

Un Sistema experto o Sistema basado en conocimiento es un sistema de computación que emula el proceso de razonamiento humano en un campo de conocimiento concreto. Está formado por una base de conocimiento (las reglas del experto codificadas), un motor de inferencia (emula el proceso de razonamiento) y una memoria de trabajo (donde el sistema experto guarda las entradas, resultados intermedios y las conclusiones) [1]. Uno de los sistemas expertos más conocidos es CLIPS [2] (C Language Integrated Production System). CLIPS surgió a mediados de 1980 y comenzó siendo utilizado por la NASA. El presente artículo tiene como objetivo brindar un tutorial que explique brevemente los comandos básicos de CLIPS.

Comandos Básicos de CLIPS

CLIPS funciona a través de comandos:

(exit)

Sale de CLIPS

(clear)

Elimina datos y programas de la memoria.

(reset)

Elimina la información dinámica de la memoria.

(run)

Empieza a ejecutar un programa CLIPS.

(assert (animal perro))

Este comando crea un Hecho (Fact).

(facts)

Este comando lista los hechos generados.

(retract 0)

Elimina un hecho. Para poder hacerlo es necesario conocer su índice.

(defrule pato

(animal-es pato)

=>

(assert (sabe-nadar))

(printout t "Sabe nadar" crlf))

Los hechos por sí solos carecen de sentido, por lo que es necesario crear una regla. Para esto se utiliza el comando defrule. En este caso la regla indica: Si es pato, entonces sabe nadar.

(rules)

Este comando lista las reglas generadas.

(defrule regla_animal

(animal ?)

=>

(printout t "Se encontró un animal" crlf))

Esta regla utiliza un comodín. La misma se activa cuando en la condición se cumpla que se encuentra la palabra animal seguida de algún texto.

(defrule regla_animal (animal ?name)=>(printout t ?name " encontrado" crlf))

Esta regla utiliza una variable. En la variable &name se almacena el nombre del animal. A diferencia del caso anterior indica cual fue el animal encontrado.

(defrule regla_abrigarse (or (tiempo llueve) (tiempo frio))=> (printout t "me abrigo" crlf))

Esta regla representa un ejemplo de la operación lógica or.

(deftemplate persona (slot nombre)(slot cabello) (slot ojos))

(defrule busca_ojos_verdes (persona (nombre ?nombre) (ojos verdes))=>(printout t ?nombre " tiene ojos verdes" crlf))

(deffacts gente (persona (nombre alberto) (ojos verdes) (cabello negro))

(persona (nombre alberto) (ojos verdes) (cabello negro)))

Este es un ejemplo de Hechos complejos. Define un template persona con tres atributos: nombre, color de ojos y color de cabello. La regla muestra aquellas personas que tienen ojos verdes informando su nombre.

(defrule regla_mamifero(mamifero)=>(assert(animal)) (printout t "Es mamifero" crlf))

(defrule regla_animal (animal)=>(assert(es_mortal)) (printout t "Es Mortal" crlf))

(defrule es_mortal (es_mortal)=>(assert (tiene)) (printout t ("Tiene una vida limitada" crlf))

(assert (mamifero))

Ejemplo de Transitividad del Condicional. Básicamente la regla responde a la siguiente construcción lógica:

p->q->r=p->r

Referencias