Sei sulla pagina 1di 61

Evolucin del CLIPS

Elementos Basicos de Programacin


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

Para definir objetos:

defclass
definstances
defmessage-handler
defgeneric
defmethod

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

persona(pepe)
toledano(pepe)
espaol(x) :- toledano(x)
europeo(x) :- espaol(x)

Ejemplo
CLIPS> (reset)
CLIPS> (assert (persona pepe))
<fact-1>
CLIPS> (assert (toledano pepe))
<fact-2>
CLIPS> (defrule espaol
(persona ?x)
(toledano ?x)
=>
(assert (espaol ?x))
(printout t ?x " es espaol." crlf)
)
CLIPS> (defrule europeo
(persona ?x)
(espaol ?x)
=>
(assert (europeo ?x))
(printout t ?x " es europeo." crlf)
)
CLIPS> (run)

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.

(deffunction <nombre> "Comentario
(<?parametro>* [<$?parametro-wilcard>])
<accion>*)

Ejemplo :
(deffunction calHipotenusa (?m ?n)
(printout t El resultado es: crlf)
(sqrt (+ (* ?m ?m) (* ?n ?n)))
)

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

Potrebbero piacerti anche