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 |