0 calificaciones0% encontró este documento útil (0 votos)
53 vistas61 páginas
Este documento describe la evolución y características del lenguaje de programación CLIPS. CLIPS fue creado en 1984 por la NASA para permitir el desarrollo de sistemas expertos y ha evolucionado para incluir capacidades orientadas a objetos. CLIPS permite representar conocimiento a través de reglas, hechos, funciones y constructores, y ejecutar programas mediante un motor de inferencias.
Este documento describe la evolución y características del lenguaje de programación CLIPS. CLIPS fue creado en 1984 por la NASA para permitir el desarrollo de sistemas expertos y ha evolucionado para incluir capacidades orientadas a objetos. CLIPS permite representar conocimiento a través de reglas, hechos, funciones y constructores, y ejecutar programas mediante un motor de inferencias.
Este documento describe la evolución y características del lenguaje de programación CLIPS. CLIPS fue creado en 1984 por la NASA para permitir el desarrollo de sistemas expertos y ha evolucionado para incluir capacidades orientadas a objetos. CLIPS permite representar conocimiento a través de reglas, hechos, funciones y constructores, y ejecutar programas mediante un motor de inferencias.
Funciones Constructores Prof: Dr. David Mauricio Inteligencia Artificial CLIPS Acrnimo de C Language Integrated Production System (Sistema de Produccin Integrado en Lenguaje C) es: Un lenguaje de programacin Una herramienta
Herramienta que promueve un ambiente de desarrollo para la produccin y ejecucin de sistemas expertos.
Permite integracin con C, Ada o lenguajes procedurales.
Distingue entre maysculas y minsculas (case-sensitive).
Qu es CLIPS?
Creado en 1984 por Software Technology Branch(STB), desarrollado en NASA/Lyndon B. Johnson Space Center. En las primeras versiones slo tena capacidad para representar reglas y hechos. C se utiliz como lenguaje de implementacin (debido a la poca disponibilidad de compiladores de LISP y problemas de integracin entre cdigo LISP y aplicaciones non- LISP ) Versin inicial: interpretador de reglas de produccin. Actualmente: COOL = CLIPS Object-Oriented Language Evolucin de CLIPS
CLIPS es un entorno de programacin diseado para escribir aplicaciones llamadas Sistemas Expertos. Un sistema experto es un programa que esta especialmente dirigido a modelar la experiencia y/o el conocimiento humano.
CLIPS representa un entorno completo para el desarrollo de sistemas expertos: Incluye un editor de programas u herramientas de depuracin.
Define un lenguaje que permite la representacin de:
conocimiento procedimental (reglas de produccin)
Su base es un motor de inferencias con razonamiento hacia adelante.
El motor de inferencias esta implementado sobre un interprete del lenguaje
El Sistema CLIPS El lenguaje CLIPS deriva su sintaxis del lenguaje LISP
Se trata de un lenguaje parentizado con notacin prefija
Los tipos de datos predefinidos que nos interesarn son: reales, enteros, strings, smbolos, apuntador a hechos, nombre de instancia y 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
El Lenguaje CLIPS Interpretador de alto nivel Interpretador de reglas de produccin Lenguaje de programacin orientado a objetos Lenguaje procedural parecido a LISP Corre en plataformas diversas (portabilidad) por ejemplo diferentes versiones de UNIX, Linux, Windows. Software bien documentado y de dominio pblico
Ventajas: Diseado para facilitar integracin con otros lenguajes Puede llamarse desde otros lenguajes: CLIPS ejecuta una funcin y retorna el resultado y el control CLIPS puede llamar a funciones externas, que devuelven la salida y el control a CLIPS Caractersticas: Componentes Bsicos: Base de Hechos: Lista de datos introducidos e inferidos Base de Conocimiento: Reglas, funciones, ... Mecanismo de Inferencias: Controla la ejecucin
Con el prompt Con archivos de texto (archivos por lotes) Formas de Trabajo:
Las palabras claves y las funciones propias de CLIPS van en minsculas
Distingue maysculas y minsculas. Ej.: jUAN, Juan, JUAN
Notacin Los Sistemas Expertos con CLIPS, pueden ser ejecutados en 3 maneras: Interactivamente usando interactivamente una interfase simple y orientada al texto con la Interfase del Prompt para los comandos. Interactivamente usando una interfase Ventana/menu/mouse en ciertas maquinas.
La interfase generica del CLIPS es una interfase simple, interactiva, orientada al texto, con el Prompt de comandos para una alta portabilidad.
El uso estandar es crear o editar una base de conocimiento usando cualquier editor de texto estandar, guardar la base de conocimiento como uno o mas archivos detexto, salir del editor y ejecutar Clips, entonces carga la base de conocimiento dentro de CLIPS.
Interactuando con CLIPS: El principal mtodo para interactuar con Clips en un ambiente no empotrado, es atraves del Prompt de comandos del CLIPS.
Cuando el CLIPS prompt es impreso, un comando puede ser ingresado para evaluacin. Los Comandos pueden ser llamados a una Funcin, Constructores, Variables locales o Globales ; o Constantes. Comando de nivel Alto:
En la representacin basada en reglas se considera que el Conocimiento esta constituido fundamentalmente por Hechos y Reglas
La Base de Conocimiento (Reglas y Hechos) La Memoria de Trabajo (Hechos) son manejados por otro mdulo separado, el llamado Motor de Inferencia
El intrprete o motor de inferencia CLIPS, manipular 2 componentes: (en sta manipulacin es precisamente en lo que consiste la ejecucin de un programa a partir de su definicin)
1. La Lista de Hechos o memoria de trabajo: Es una lista que contiene todos los hechos o datos conocidos o disponibles para el programa. El contenido de la lista de hechos cambia normalmente a medida que se ejecuta un programa.
2. La Agenda : Es una lista con todas las reglas activadas del programa. Una regla se activa cuando hay una correspondecia entre su parte izquierda (antecedente o condicin) y el contenido de la lista de Hechos. Siempre que hay mas de una regla activada en la Agenda se utiliza un mecanismo de Resolucin de Conflictos para decidir cual de ellas ser la que finalmente se ejecute o Dispare. Ejecucin de un programa Ciclo de Evaluacin de CLIPS Inicializacin: Se aaden la lista de hechos iniciales. Se aaden a la agenda las reglas activadas por los hechos iniciales.
Evaluacin: Se desencadena un proceso cclico consistente en los siguientes pasos: Se selecciona la primera regla de la agenda. Se dispara la regla, es decir se ejecutan las acciones de su parte derecha. Se recalcula el contenido de la agenda ( conjunto de reglas activadas) en funcin del nuevo estado de la lista de hechos.
Funcionamiento Bsico Entorno CLIPS La rdenes bsicas para la ejecucin de un programa en clips es: (exit) .- Sale de CLIPS (clear) .- Elimina todas las definiciones de programa ( tipos de hechos, reglas, etc.) tal como si salisemos y entrsemos en CLIPS (reset) .-Elimina la informacin dinmica de la memoria y resetea la agenda. (run) .- Indica el ciclo de evaluacin del programa se detiene cuando la agenda quede vaca. Comienza la ejecucin de un programa CLIPS. (step) .- Realiza un nico ciclo de evaluacin.
Comandos Bsicos de CLIPS (facts).- Despliega la lista de los hechos que estn actualmente definidos. (rules) .-Despliega la lista de las reglas que estn actualmente definidas (agenda).- Muestra las reglas instanciadas. Para cada instancia muestra la prioridad de la regla, el nombre de la regla y los hechos reconocidos por la regla.
Tipos de datos: Representan informacin.
Funciones: Manipular los datos.
Constructores: Aadir conocimiento a la Base de Conocimiento. Elementos Bsicos de Programacin Entero (INTEGER) Reales (FLOAT) Smbolo (SYMBOL) Cadena (STRING) Direccin externa (EXTERNAL-ADDRESS) Direccin de hecho (FACT-ADDRESS) Nombre de instancia Direccin de instancia (INSTANCE- ADDRESS) Tipos de datos primitivos Informacin Numrica Informacin Simblica Nmero entero: 2341234 91 +831 -2 Nmero en punto flotante: Reales 837e7 121.43 +2e10 -3.14 Ejemplos de Tipos de datos Smbolos: Hola DNI23444 @@== 988AB Cadenas: Una cadena Cadena con una \ doble comilla m and n Ejemplos de Tipos de datos Direccin externa: Es una direccin de memoria de una estructura de datos externa que devuelve una funcin escrita en C o ADA. <pointer-xxxxxxx>
Direccin de Hecho: Los hechos son referenciados por un indice o direccion. <Fact-xxx>
Instancia : Es un objeto que es una instanciacin o ejemplo especifico de una clase. [cadena] [123]
Direccin de instancia: Direccin de almacenamiento de una instancia de un objeto. <Instance-XXX>
Campo : (cualquier lugar que puede tomar un valor) Tipos de campos: Dependiendo del Valor que pueden tomar: Monocampo: Tipos datos primitivos. Multicampo: Varios valores uni-campo. Constante. Es un valor de campo unico sin variacin directamente expresado como una serie de caracteres. Variable. Tipos de datos: otros conceptos Es una zona de memoria que se utiliza para almacenar valores.
Se usan con los constructores de CLIPS (defrule, deffunction, defmethod y defmessage-handler)
Variables Locales y Globales Variable Tipos Locales: Solo se utilizan en la definicin del constructor en donde se encuentran. Pueden ser: Monocampo ?casa ?gato Multicampo $?Anthony Cabrera
Globales: Son variables que pueden ser utilizadas en todo el mbito CLIPS
(defglobal ?*nombre* = Miguel ) Variables Funciones Definidas por el sistema Codificadas en CLIPS
Definidas por el usuario Codificas en otro lenguaje (C, ADA, )
Deffunction, Defgeneric y Defmethod
Tipos: rdenes: Ejecutan una accin. Funciones: Devuelven un valor.
Comandos bsicos Bind : Asignar Valor (bind ?se (+ 3 4)) Ingresar Datos (bind ?resp (read)) Imprimir Datos (printout t El resultado ser: crlf) sqrt (Raz Cuadrada) eq (Comparar Smbolos)
Permite al programador aadir elementos a la base de hechos y a la base de conocimiento (funciones, reglas, hechos, clases). Modifican entorno CLIPS (no devuelven valor):
deffunction: Para definir funciones defglobal: Para definir variables globales deftemplate: Para definir plantillas deffacts: Para definir hechos defrule: Para definir reglas defmodule: Para definir mdulos
Constructores Ejemplo Calcular el mayor de 2 nmeros
(deffunction mayorMenor (?a ?b) (if(> ?a ?b) then (printout t "El mayor es = " ?a crlf) else (printout t "El mayor es = " ?b crlf)) ) EJECUTANDO CON SISTEMA CLIPS
Ingresando las sentencias al Programa CLIPS crearemos una funcion usando variables locales ?a y ?b EJECUTANDO CON SISTEMA CLIPS Ingresando los valores EJECUTANDO CON SISTEMA CLIPS El resultado del numero mayor ABSTRACCION DE DATO Aqu hay 3 formatos esenciales para representar la informacin en CLIPS :
Hechos HECHOS ORDENADOS HECHOS NO ORDENADOS Objetos Variables Globales HECHOS Los hechos son una forma bsica de alto nivel para representar informacin en sistemas clips. Son desplazados en la actual lista de hechos llamada fact- list Algunos comandos de los hechos son: Assert Para agregar a la lista de hechos Retract Para remover de la lista de hechos Modify Para modificar un hecho Duplicate-Para duplicar un hecho Fact-index y Fact-address Para usar estos comandos , se requiere que especifiquemos un hecho, esto puede realizarse mediante un fact -index o un fact-address. Cuando un hecho es aadido o modificado , se le asigna un nico indice de numero entero llamado fact-index. Los ndices de hechos empiezan con cero y son incrementados por uno por cada nuevo o hecho cambiado. Cuando un comando reset o clear es aadido, los indices de hechos se reanudan con el valor cero. Un hecho tambin puede ser especificado por el uso del fact-address. El fact-address puede ser obtenido de capturar el valor de retorno de los comandos quienes retornan direeciones de hechos como (assert, modify, dupplicate) o obligando un valor de direccion de hecho o un hecho cual coincide con un patrn en la LHS de una regla(Cap 5 ) Un identificador de hecho es una notacion de taquigrafa para mostrar un hecho, esto consiste en el carcter f, seguido de un guin , seguido de un fact-index de un hecho Por ejemplo: f-10 hace referencia al hecho que tiene un fact-index 10 Hechos Ordenados Consiste en un simbolo seguido por una secuencia de ceros o mas campos , separados por espacios o delimitados por un parntesis de apertura ( en la izquierda y un parntesis de cierre a la derecha ). El primer campo de un hecho ordenado especifica a una relacin que aplic al campo restante . Por ejemplo (father-of jack bill) afirma que bill es el padre de jack. Algunos ejemplos de hechos ordenados son mostrados.
Hay simbolos que son reservados y no deben ser usados en el primer campo, tanto como a los hechos ordenados como para los hechos no ordenados.Estos simbolos son: test, and, or, not , declare, logical, object, exist and forall. Estos solo pueden ser usados cuando se utilizan como un nombre de deftemplate. Tambien pueden ser usados como nombres de slots pero esto no es recomendado. Hechos no ordenados En los hechos no ordenados, el usurario debe tener la habilidad de abstraer la estructura de un hecho por nombres de asignacin en cada campo del hecho. El constructor deftemplate(cap 3) es usado para crear una plantilla que puede ser usada para accesar los campos por nombre. El constructor deftemplate es analogo a un registro o definicion de estructura en lenguajes de programacion como Pascal y C Deftemplate-hechos no ordenados El deftemplate permite al nombre de una plantilla ser definido a lo largo con ceros o mas definiciones de nombres de campo o SLOTS. A Diferencia de los hechos ordenados , los deftemplate pueden ser limitados por los tipos ,valor o un rango numerico ,ademas los valores por defecto pueden ser especificados por un SLOT.
Un SLOT consiste en un parentesis de apertura ( seguido por el nombre del SLOT , ceros o mas campos y el parentesis de cierre. Debemos tener en cuenta que los SLOTS no pueden ser usados en los hechos ordenados y que los campos posicionados no pueden ser usados en un hecho deftemplate. Ejemplos deftemplate (client (name Juan Mendez) (id x24366)) (pint-mass (x-velocity 100) (y-velocity -200)) (class (teacher Maria Salas) (#-students 30)(Room 37A))
Ten en cuenta que los SLOTS en un deftemplate no son importante, por ejemplo en los siguentes hechos son todos identicos.
(class (teacher Maria Salas) (#-students 30)(Room 37A)) (class (#-students 30) (teacher Maria Salas) (Room 37A)) (class (#-students 30)(Room 37A) (teacher Maria Salas) )
Hechos Iniciales(Initial facts) El constructor deffacts permite un conjunto de conocimiento inicial o a priori para ser especificado como una coleccin de hechos. Cuando el ambiente de CLIPS se reestablece (usando el comando RESET) cada hecho especificado sin un constructor deffacts en la base de conocimiento de CLIPS es aadido a la lista de hechos OBJETOS Un objeto en CLIPS es definido para ser un simbolo, string, un punto flotante , o un numero de valor entero , un valor multicampo ,una direccion externa o una instancia de una clase definida por el usuario. Los objetos son descritos en 2 partes basicas: Propiedades Comportamiento Una clase es una plantilla con propiedades comunes y comportamiento de objetos que son instancias de estas clases .Algunos ejemplos de objetos y sus clases son:
Objetos(Representacion Impresa) Rolls-Royce Rolls-Royce 8.0 CLASE Simbolo String float Los objetos en CLIPS estan divididos en dos importantes categorias: Tipos primitivos Instancias de clase definidas por el usuario Estos los tipos de objetos difieren en la forma de cmo ellos son referenciados, creados y eliminados asi como sus propiedades son especificadas Tipos Primitivos Los objetos de tipo primitivo son referenciados simplemente para dar sus valores y ellos son creados y eliminados implcitamente por CLIPS como ellos son necesitados. Los objetos de tipo primitivo no tienen nombres o SLOTS y sus clases son predefinida por CLIPS. El comportamiento de los objetos de tipo primitivo es como el de una instancia de clase definida por el usuario pero en cual tu puedes definir controladores de mensaje(message- handlers) y adjuntarlos a las clases de tipo primitivo.
Es anticipado que los tipos primitivos no sern usados en un contexto de programacin orientada a objetos(OPP), la razn principal es que las clases son proporcionados para ellos es para uso de funciones genricas.
Las funciones genricas usan las clases de sus argumentos para determinar cual mtodo ejecutar Instancia de Clase definida por el Usuario Una instancia de una clase definida por el usuario es referenciada por nombre o direccin y ellos son creados y eliminados explcitamente va mensajes y funciones especiales . Las propiedades de una instancia de una clase definida por el usuario son expresadas por un conjunto de slots ,cuales los objetos lo obtienen de su clase. Previamente definido, los SLOTS son nombrados en un nico campo o multicampos . El comportamiento de un objeto es especificado en trminos de cdigo de procedimiento llamado controladores de mensaje(message handlers) quienes son adjuntados al objeto de clase . Todas las instancias de la clase definida por el usuario tienen la misma coleccin de SLOTS pero cada instancia puede tener diferentes valores para estos SLOTS. Pero 2 instancias que tienen la misma coleccin de SLOTS no necesariamente pertenecen a la misma clase. Dos diferentes clases pueden tener colecciones idnticas de SLOTS La principal diferencia entre Objetos SLOTS y plantillas de hecho(no ordenado) es la noticion de herencia , la herencia permite las propiedades y comportamiento de una clase para ser descrita en trminos de otras clases. COOL soporta mltiples herencias : una clase puede heredar directamente los slots y los controladores de mensaje. Esto no es a menudo significativo heredar de uno de las clases de tipo primitivo como el multicampo o nmero. Esto es porque estas clases no pueden tener SLOTS y usualmente no tienen CONTROLADORES DE MENSAJES. Objetos iniciales y Variables Globales El defglobal permite un conjunto de a priori o conocimiento inicial a ser especificado como una coleccin de instancias de clase definida por el usuario. Cuando el ambiente de CLIPS es restablecida, cada instancia especificada sin un constructor definstances en la base de conocimiento de CLIPS es aadido a la lista de instancias.
Variables Globales
El defglobal permite a las variables ser definidas cuales son globales en todo el mbito de aplicacin del ambiente de CLIPS esto es porque una variable global puede ser accesado desde cualquier lugar del ambiente de CLIPS y retiene su valor independientemente de otros constructores. Por el contrario , algunos constructores como el defrule y el deffunction permiten variables locales para ser definidos sin la definicin del constructor. Estas variables locales pueden ser referenciados sin el constructor pero no tienen significado fuera del constructor-. Una variable global de CLPS es similar alas variables globales encontradas en procedimientos de lenguajkes de programacion como LSP, C y ADA, a diferencia de C y ADA, las variables globales de CLIPS son debilmente tipeados . (defglobal ?*ceviche* = 5)
CLIPS> (deffunction pedido(?c) (if (> ?*ceviche* ?c) then (printout t "Dentro de unos momentos estara listo su pedido" crlf) (bind ?*ceviche* (- ?*ceviche* ?c)) else (if (< ?*ceviche* ?c) then (printout t "Lo sentimos, no podemos abastecer su pedido" crtf) else (printout t " ahorita le servimos.." crlf) (bind ?*ceviche* (- ?*ceviche* ?c))))) Representacion heuristica Representacion procedural Representacin Heurstica: Reglas El modo de representar conocimiento heurstico en CLIPS es mediante reglas. Una regla se compone de antecedente (o parte izquierda de la regla) y consecuente (o parte derecha de la regla).
El antecedente de la regla es el conjunto de condiciones que deben satisfacerse para que la regla se active.
La condicin de una regla se satisface cuando los hechos o instancias especificadas en el antecedente son ciertas para los hechos conocidos. Un tipo de condicin es lo que se conoce como un patrn.
Los patrones son un conjunto de restricciones que se utilizan para determinar que hechos u objetos satisfacen la condicin especificada en el patrn.
El proceso de contrastar los hechos y objetos con los patrones se conocen como reconocimiento de patrones.
El mecanismo por el que una regla se activa, porque sus antecedentes se satisfacen, se conoce como motor de inferencia. Representacin Heurstica: Reglas Las reglas se insertan en Clips mediante el comando 'Defrule', indicando primero los hechos de entrada, es decir las precondiciones, para que la regla se dispare (todas deben cumplirse), un smbolo '=>', y a continuacin, todas las acciones asociadas a esa regla.
CLIPS> (defrule gripe (malestar_general) (fiebre) (tos) => (assert (gripe)) (printout t "Tienes gripe." crlf) ) Insercin de Reglas "Pepe es una persona" "Pepe vive en Toledo" "Toda persona que viva en Toledo es espaola" "Toda persona que viva en Espaa es Europea
CLIPS permite conocimiento procedural como se hace en lenguajes convencionales (C o Pascal).
Las funciones generales y el constructor deffunctions permite al usuario definir componentes ejecutables que o bien desarrollan un conjunto de actividades tiles o retornan un valor.
Tenemos las siguientes piezas procesales: >> Deffunctions. >> Funciones genricas. >> Controladores de mensajes. >> Defmodules.
Representacin Procedural El constructor deffunction permite definir una nueva funcin en CLIPS. El valor que devuelve es el valor de la ultima expresin evaluada en deffunction.
Deffunctions : Las funciones genricas permiten definir nuevo cdigo procedural directamente en CLIPS. Por ejemplo :el operador + suele utilizarse para sumar nmeros. Dicho operador puede sobrecargarse para que pueda utilizarse para strings. Ejemplo : CLIPS>(clear) CLIPS> (defmethod + ((?a STRING) (?b STRING)) (str-cat ?a ?b)) CLIPS> (+ Ho la) Hola
Funciones genricas : El manejo de mensajes permiten al usuario definir el comportamiento de los objetos mediante la especificacin de su respuesta a los mensajes.
Estos manejadores se definen mediante la sentencia defmessage-handler, su sintaxis es idntica a la de las funciones.
(defmessage-handler <clase> nombre <tipo-h> (<param>*) <expr>*) Controladores de mensajes : Cada modulo se construye mediante el comando defmodule. Cada constructor que se defina pude colocarse en un modulo. El programador puede controlar explcitamente que constructores en un modulo pueden ser visibles a otros mdulos. Ejemplo : (defmodule A) (defmodule B) (defrule selecciona (dato 3) => ) (defrule A::compra (venta 6) =>)
Defmodules : COOL son las inciales de CLIPS Object-Oriented Language.
Es un lenguaje que incluye tanto elementos de abstraccin de datos como representacin del conocimiento y, como indica su nombre ,esta basado en la programacin orientada a objetos (POO).
Orientacin a objetos en CLIPS Un sistema basado en POO se caracteriza por las siguientes propiedades:
Abstraccin: Permite representar conceptos complejos mediante representaciones intuitivas con un alto nivel de abstraccin.
Encapsulamiento: Todos los detalles de implementacin de un objeto estn enmascarados (encapsulados) para el usuario, pero puede acceder a ellos mediante una interface externa. COOL Herencia: Una clases pueden copiar (heredar) las propiedades y comportamientos de otra clase.
Polimorfismo: Diferentes objetos responde al mismo mensaje en funcin de su naturaleza.
Ligadura dinmica: En tiempo de ejecucin se puede posponer la seleccin de que manejadores-de-mensajes se utilizaran cuando el objeto recibe un mensaje. COOL