Introducción
CLIPS: C Language Integrated Production System
Variación muy especializada de Lisp
Herramienta para desarrollo de sistemas expertos, creada en el Johnson Space Center (NASA) en 1986
Problemas usualmente resueltos por “expertos humanos” gracias a su importante base de conocimiento sobre el dominio.
Los expertos necesitan uno o varios mecanismos de razonamiento para aplicar su conocimiento a los problemas propuestos.
Introducción
Soporta programación lógica, y tanto programación imperativa como orientada a objeto (COOL)
Facilita diseñar programas dirigidos por datos:
En ellos los datos, o hechos, estimulan la ejecución del programa a través del motor de inferencia
Permite realizar el procesamiento de forma interactiva, mediante la ventana de comandos, o por lotes. Admite la depuración
Diseñado para facilitar integración con otros lenguajes:
Puede llamarse desde otros lenguajes: CLIPS ejecuta una función, retornando resultado y control.
CLIPS puede llamar a funciones externas, que devuelven la salida y control a CLIPS.
Jess (Java Expert System Shell), CLIPS reprogramado en Java con ligeras variaciones
Extensiones, p.e. para Lógica Borrosa (FuzzyCLIPS)
Introducción
Sistema de producción que incluye:
Mantenimiento de la verdad con encadenamiento hacia adelante
Adición dinámica de reglas y hechos
Diferentes estrategias de resolución de conflictos
Componentes básicos:
Base de hechos: Datos introducidos e inferidos
Base de conocimiento: Reglas, funciones, …
Mecanismo de inferencia: Controla la ejecución
CLIPS proporciona tres elementos básicos de programación:
Tipos primitivos de datos
Funciones para la manipulación de los datos
Constructores
Instalación
Para descargar la aplicación, acude a la página oficial CLIPS.
Disponible para varias plataformas. La versión para Windows dispone tanto de ejecutable en línea, como con ventanas. Haciendo clic sobre el icono de esta última (CLIPSWin) lanzarás la ventana que acompaña a este texto. Para salir teclea (exit) o acude a la barra de menú.
Elementos básicos: Órdenes
Una vez abierta la interfaz, veamos algunas órdenes o comandos básicos de operación.
Todo comando se escribe siempre entre paréntesis. Los comandos, se ejecutan habitualmente en top-level y no devuelven valor, al contrario que las funciones que sí retornan un valor:
(exit) Cierra la interfaz CLIPS.
(run) Lanza la ejecución del programa CLIPS actualmente cargado. Se le puede indicar el número máximo de reglas a lanzar.
(clear) Elimina todos los hechos y reglas almacenados en memoria, equivalente a cerrar y rearrancar CLIPS.
(reset) Elimina sólo los hechos, no las reglas, anulando la agenda y añadiendo los elementos definidos por defecto o iniciales.
(watch ) Permite realizar depuración del programa.
La barra de menú ofrece acceso a algunos comandos, así como la aparición de ventanas útiles para depuración (p.e. ventana de hechos Window->Facts Window).
Elementos básicos: Tipos de datos
Reales (float): 1.5, -0.7, 3.5e-10
Enteros (integer): 1, -1, +3, 65
Símbolos (symbols): Cualquier secuencia de caracteres que no siga el formato de un número. Distingue entre mayúsculas y minúsculas. Ej.: Febrero, febrero, fuego, 35B, fiebre
Cadenas (strings): Deben estar entre comillas
Direcciones externas (external-address): Estructura de datos externa devuelta por una función escrita en C o Ada
Direcciones de hechos (fact-address): Hechos referenciados por su posición o por un nombre
Nombres de instancias (instance-name)
Direcciones de instancias (instance-address)
Elementos básicos: Constructores
Permiten al programador añadir elementos tanto a la base de hechos como a la de conocimiento. Modifican el entorno CLIPS:
deffunction: Para definir funciones
defglobal: Para definir variables globales
deftemplate: Para definir plantillas
deffacts: Para definir hechos
defrule: Para definir reglas
defmodule: Para definir módulos
defclass: Para definir clases
definstances
defmessage-handler
defgeneric
defmethod
Hechos
CLIPS mantiene una lista de hechos y reglas, permitiendo éstas operar con los hechos almacenados en la lista de hechos, dado que los hechos son necesarios para disparar o activar las reglas.
Un hecho es una forma básica de representación de información, es una pieza de información o patrón. Puede tener un campo o varios de tipo numérico, simbólico, cadena, etc., p.e. (color azul) or (padre_de Juan Sara) (nombre “Juan Manuel”)
Los espacios separan distintos símbolos. Observa sin embargo que en una cadena no es lo mismo tener dos espacios en blanco consecutivos que sólo uno.
De similar manera, se debe tener en cuenta el uso de minúsculas y mayúsculas.
Hechos
Un valor o campo puede ser uni o multicampo:
Unicampo: Cualquier valor de los tipos de datos mencionados anteriormente
Multicampo: Secuencia de cero o más valores unicampo entre paréntesis. Ejemplos:
( )
(x)
(hola)
(relaciona "rojo" 23 1e10)
Señalar que no es lo mismo el valor unicampo hola que el valor multicampo (hola)
Hechos
Los hechos pueden añadirse y eliminarse de forma dinámica. Para añadir uno o varios hechos empleamos la orden assert. Cada hecho se identificará a continuación mediante un índice único:
CLIPS> (assert (tiempo nublado))
Para eliminar un hecho (o varios), conociendo su identificador o índice utilizamos (retract ), por ejemplo (retract 1) elimina el hecho con identificador 1. Podemos eliminarlos todos introduciendo (retract *).
La orden (clear) elimina todos los hechos pero también todas las reglas, éstas las trataremos más adelante. El comando (reset) elimina todos los hechos de la lista y posteriormente añade los iniciales, a priori sólo (initial-fact).
Hechos
Tecleando (facts) nos permite ver la lista completa de hechos actual, apareciendo cada hecho junto a su índice o identificador único. Para nuestro caso
CLIPS> (facts)
f-0 (initial-fact)
f-1 (tiempo nublado)
For a total of 2 facts
Para listar los hechos a partir de un identificador usamos (facts ).
Para mostrar un rango concreto de hechos podemos teclear los índices límite (facts ).
Hechos
Comentábamos que un hecho puede ser eliminado de la base de hechos utilizando el comando (retract ), indicando el índice (* para eliminarlos todos) del hecho que se desea eliminar. Observa en el ejemplo que los índices no se reutilizan tras una eliminación:
CLIPS> (reset)
CLIPS> (assert (color azul) (color rojo))
CLIPS> (facts)
f-0 (initial-fact)
f-1 (color azul)
f-2 (color rojo)
For a total of 3 facts.
CLIPS> (retract 1)
CLIPS> (facts)
f-0 (initial-fact)
f-2 (color rojo)
For a total of 2 facts.
Hechos
La ventana de hechos que se activa por medio del menú Window->Facts Window es otra posibilidad muy útil que permite observar los movimientos en la base de conocimiento:
Hechos
Ejercicios:
Inserta el hecho (color verde) utilizando assert
¿Qué ocurre si ahora se ejecuta la orden reset?
Inserta cuatro hechos más.
Muestra los hechos con índice >=3
Muestra los hechos del 2 al 4
Abre la ventana de hechos
Añade un nuevo hecho
Elimina el hecho 1
Elimina todos los hechos
Hechos
Por legibilidad es habitual introducir un hecho (o como veremos luego reglas, etc.) en varias líneas. Debes recordar acabar siempre tecleando ENTER
CLIPS> (clear)
CLIPS> (assert (lista-compra
papas
cebolla
ajos
pescado))
CLIPS> (facts)
f-0 (lista-compra papas cebolla ajos pescado)
For a total of 1 fact.
Hechos
Como herramienta para depuración, la orden (watch facts) muestra los hechos cada vez que se insertan o eliminan en la base de conocimiento.
CLIPS> (watch facts)
CLIPS> (assert (dia miercoles))
==> f-2 (dia miercoles)
La orden (unwatch facts) desactiva la depuración de la base de hechos. Otros elementos con posibilidad de ser observados:
(watch rules): Muestra las reglas disparadas
(watch activations): Muestra las reglas activadas, los hechos que las han activado, y las reglas que quedan desactivadas.
(watch methods)
(watch deffunctions)
(watch compilations)
(watch slots)
(watch globals)
(watch all)
Página siguiente |