Programación en el Sistema
Clips
Prof. Jowel Cabrera Padilla
CLIPS
• Es un entorno para desarrollar sistemas expertos
• Tiene un lenguaje que permite la representación
de conocimiento declarativo y procedimental
• Su lenguaje permite representar reglas de
producción y frames (objetos)
• El motor de inferencias usa el razonamiento hacia
adelante
• El motor de inferencias esta implementado sobre
un intérprete del lenguaje
CLIPS
• Componentes de CLIPS:
– Lenguaje basado en reglas que:
• Permite definir una lista de hechos
• Permite crear un conjunto de reglas
• Proporciona un motor de inferencia de encadenamiento hacia
delante que obtiene una solución aplicando las reglas a los
hechos iniciales.
– Lenguaje basado en objetos (COOL)
Se puede descargar su entorno de programación versión 6.31
(clips_631_windows_64_bit_installer.msi) de:
https://sourceforge.net/projects/clipsrules/files/CLIPS/6.31/
CLIPS
CLIPS
• Todos los comandos se escriben entre paréntesis.
• Algunos comandos pueden ejecutarse desde los menús
– (exit) salir de CLIPS
– (clear) borra de CLIPS todos los hechos, reglas y definiciones.
Equivalente a cerrar CLIPS y abrirlo de nuevo
– (reset) pone el sistema en su estado inicial. (Borra todos los
hechos; coloca un hecho inicial (initial_fact) así como todos los
que el usuario defina por defecto. Debe de efectuarse antes de
ejecutar cualquier programa
– (run) ejecuta el programa cargado en CLIPS
– (load “nombrearchivo.clp”) Carga un programa CLIPS a partir
del archivo nombrearchivo.clp
CLIPS
• Hechos y Reglas
• Hecho
– Es un elemento de información elemental
– Se almacena en la llamada lista de hechos.
– Cada hecho en la lista de hechos tiene un identificador que
indica su índice en la lista
– Hay dos tipos de hechos:
• Ordenados
• no ordenados.
• Regla
– Sirven para representar el conocimiento del experto
– En general, una regla se expresa de la forma SI las
condiciones son ciertas ENTONCES haz alguna acción.
CLIPS
• Hechos ordenados
– Son los formados por varios símbolos entre paréntesis separados por
espacios.
– Se pueden utilizar para representar:
• Un valor: (lunes)
– “hoy es lunes”
• Una pareja atributo-valor: (color verde) –
– “el color es verde”
• Una tripleta atributo-objeto-valor: (hijo_de Luis Daniel)
– “Luis es hijo de Daniel”
– En los hechos ordenados la posición es importante. No es lo mismo
• (hijo_de Luis Daniel) ; Luis es hijo de Daniel
• (hijo_de Daniel Luis) ; Daniel es hijo de Luis
– Los comentarios en CLIPS se escriben con punto y coma
CLIPS
• Operaciones con Hechos
• Agregar un hecho
–Los hechos se agregan en CLIPS con el comando (assert)
–Ejemplo:
CLIPS> (assert (color verde))
<Fact-0>
–CLIPS responde a la agregación de un hecho con <Fact-xx>
donde xx es el índice numérico asignado a ese hecho
–Se pueden agregar varios hechos simultáneamente
haciendo por ejemplo:
(assert (sabor dulce)(sabor salado)(sabor amargo) )
CLIPS
• Operaciones con Hechos
• Examinar los hechos
– Para examinar todos los hechos en memoria
se utiliza el comando
(facts)
– Ejemplo:
CLIPS> (facts)
f-0 (color verde)
For a total of 1 fact
CLIPS
• Operaciones con Hechos
– Eliminar un hecho
• Los hechos se borran en CLIPS con el comando (retract)
• Ejemplo:
CLIPS> (retract 0)
• Nótese que para borrar un hecho es necesario conocer su índice
• Puede eliminarse todos los hechos mediante (retract *)
– Cuestiones prácticas
• Cuando se pretenden insertar varios hechos es mejor crear una
ventana separada (con File, New) y salvar el resultado como archivo
de tipo “batch”.
• Para cargar el archivo se utiliza la orden:
(batch “nombrearchivo.bat”)
CLIPS
• Definición de hechos persistentes
– Se puede especificar una lista de hechos
que no se pierden al reiniciar CLIPS con el
comando (reset) para ello se utiliza el
constructor (deffacts)
– Ejemplo:
CLIPS
• Definición de hechos persistentes
–Para listar todos los deffacts se utiliza (list-deffacts) y para
visualizar un deffact específico (ppdeffacts nombre)
donde nombre el nombre del deffact
–Para eliminar un deffact se utiliza (undeffacts nombre)
donde nombre el nombre del deffact
• Seguimiento de los hechos en la memoria
activa
–Para comprobar las inserciones y eliminaciones de hechos
de la memoria activa se utiliza el comando (watch facts).
CLIPS
• Reglas
– En general, una regla se expresa de la forma:
• SI las condiciones son ciertas ENTONCES haz alguna acción.
– Una regla se compone de antecedente ( o parte izquierda de la regla) y
consecuente (o parte derecha).
• Antecedente: es el conjunto de condiciones que deben cumplirse para que
la regla se active.
• Consecuente: es el conjunto de acciones a realizar cuando se activa la
regla.
– Ejemplo:
CLIPS
• Examinar las reglas
– Para examinar todos las reglas en memoria se utiliza el comando
(rules)
– Para visualizar una regla específica se utiliza (ppdefrule nombre)
donde nombre es el nombre de la regla
• La Agenda
– Es el conjunto de reglas que pueden activarse (se cumplen sus
antecedentes)
– Ejemplo:
CLIPS
• Variables
– Una variable almacena información dinámica, esto es, los valores que toma
pueden cambiar (a diferencia de un hecho que siempre es estático).
– Permiten la escritura de reglas más generales y complejas.
• Nombre de una variable
– Se compone del símbolo ? y de uno o más caracteres.
– Ejemplos:
?nombre
?color
• Uso de las variables
– Uno de los usos más comunes de las variables es el de tomar un valor en el
antecedente de una regla y usarlo en el consecuente.
– El proceso de tomar valores en el antecedente se llama emparejamiento de
patrones
– Las reglas se activan para todos los valores de las variables que cumplen el
antecedente
CLIPS
• Ejemplo simple del uso de variables y reglas
CLIPS
• Ejemplos complejos del uso de variables y
reglas
– Cuando hay varias condiciones en los antecedentes deben
cumplirse todas las condiciones para poder aplicar la regla
CLIPS
• Ejemplos complejos del uso de variables y reglas
– Cuando hay varias apariciones de la misma variable en el
antecedente, para activar la regla la variable debe tomar un valor
único que haga cumplir todos los hechos.
CLIPS
• Eliminación de Hechos con Reglas y Variables
– Recordamos:
• Para eliminar un hecho se necesita conocer su índice en la lista de hechos
• Una vez conocido el indice se hace (retract indice)
– Es posible conocer el índice de un hecho y asignarlo a una variable
con <-
– Ejemplos:
CLIPS
• Comodines
Complementan las variables y permiten la escritura
de reglas más generales y complejas
• Comodín ? :Toma el valor de un campo dentro de un hecho
• Comodín $? Toma el valor de cero o varios campos en un
hecho
CLIPS
• Comodines
• Ejemplo
– Emparejamientos:
– Resultado
CLIPS
• Comodines y Variables
– Los comodines pueden combinarse con variables para almacenar
los resultados
• Ejemplo
– Emparejamientos:
– Resultado
CLIPS
• Operadores Matemáticos y Lógicos
– Los operadores y funciones matemáticas permiten realizar
los cálculos necesarios en CLIPS
– Se representan con notación “prefija”
• Ejemplo:
– 2+3 se escribe como (+ 2 3)
– 2*(3+4) se escribe como (* 2 (+ 3 4))
– Operaciones estándar
• – + (suma), - (resta), *(producto), / (división), div (división entera), max
(máximo), min (mínimo), abs (valor absoluto)
– Otras operaciones
• sqrt (raíz cuadrada), ** potencial, exp (exponencial), log (logaritmo
neperiano), sin (seno), cos (coseno).
CLIPS
• Operadores Matemáticos y Lógicos
• En el consecuente de una regla una operación se calcula
automáticamente.
– Ejemplo
CLIPS
• Operadores Matemáticos y Lógicos
• En el antecedente de una regla las operaciones matemáticas sólo se
calculan cuando siguen el símbolo =
– Ejemplo
CLIPS
• Operadores Matemáticos y Lógicos
• La función bind (fijar)
– Permite darle o asignarle un valor a una variable en el consecuente
de una regla
– Resulta útil cuando el mismo valor va a usarse más de una vez
– Ejemplo:
CLIPS
• Operadores Lógicos y de Comparación
– Se utilizan generalmente en el antecedente de una regla
para comprobar si determinadas condiciones son ciertas
• Operadores principales:
– Lógicos
• and (y), or (o), not (no)
– Ejemplo:
CLIPS
• Operadores Lógicos y de Comparación
• Operadores principales:
– Comparación
• eq (igual), neq (no igual), =(igual numérico), !=( no igual
numérico), > (mayor), >= (mayor o igual), < (menor), <= (menor o
igual)
• Para realizar comparaciones en el antecedente de una regla debe
utilizarse el elemento condicional test
• Ejemplo:
CLIPS
• Hechos no ordenados
• Hasta ahora se han utilizado los hechos ordenados.
– Generalmente se han empleado hechos del tipo (atributo
valor) o (atributo objeto valor)
– El orden de los campos dentro del hecho es importante.
• En aplicaciones complejas esta representación tiene
problemas
– ¿Como representar objetos con varios atributos?: Juan
tiene 20 años, pesa 80 kg, mide 188 cm y su presión es de
130 / 80 y está enfermo
CLIPS
• Hechos no ordenados
– Opción 1
• (nombre juan) (edad juan 20) (peso juan 80) (altura
juan 188) (presion juan 130 80) (enfermo juan si)
– El número de hechos es muy grande
– Opción 2
• (juan 20 80 188 130 80 si)
– Programas difíciles de leer, escribir y entender.
• Con los hechos no ordenados cada campo recibe un
nombre, lo único que se debe hacer es recordar el
nombre del campo
CLIPS
• Plantillas (templates) y casillas (slots)
– Sirven para trabajar con objetos que tienen varios
atributos
– Se crean utilizando el constructor deftemplate que
especifica la forma que toman los hechos
• Ejemplo:
CLIPS
• Plantillas (templates) y casillas (slots)
– Los hechos se siguen introduciendo con assert
pero ahora no importa el orden ni es necesario
especificar todos los atributos
– Ejemplos:
CLIPS
• Hechos no ordenados y reglas
– Cuando se utiliza un hecho no ordenado en una
regla solo es necesario especificar los atributos
que se quieren emparejar.
– Ejemplo:
CLIPS
• Hechos no ordenados y reglas
– Cuando se utilizan multicasillas es necesario
utilizar el comodín $?
– Ejemplo:
CLIPS
• Tipos y valores por defecto
– El constructor deftemplate permite restringir los
valores de los atributos utilizando (type).
– Los tipos más usados son:
• SYMBOL: un símbolo
• STRING: un texto, que debe estar entre comillas
• INTEGER: un número entero
• FLOAT: un número real
CLIPS
• Tipos y valores por defecto
– También se pueden utilizar valores por defecto con (default)
especificando sus valores o utilizando los valores por defecto de
CLIPS con ?DERIVE (asigna cadena vacia)
– Ejemplo:
CLIPS
• Modificación de casillas
– Además de la utilización de retract y assert para la
modificación de hechos no ordenados se puede emplear
una forma sencilla para la modificación de casillas con el
comando modify
– Ejemplo:
CLIPS
• Hechos no ordenados por defecto
– Se utiliza deffacts (igual que para los hechos ordenados)
– Ejemplo:
CLIPS
• Entrada y Salida
– Imprimir información
• Se utiliza: (printout dispositivo elementos_a_imprimir)
– El valor de dispositivo para el monitor es t
– Los elementos a imprimir se separan por espacios.
– Para separar lineas se pone crlf
– Ejemplo:
CLIPS
• Entrada y Salida
– Leer información
• Se utiliza: (read dispositivo)
• Si el dispositivo es el teclado, la lectura se hace con
(read)
• Ejemplo:
CLIPS
• Edición de programas
– Los programas se editan en el editor con que cuenta
el entorno de CLIPS.
– También se puede editar en cualquier otro editor
– Para ingresar la editor ir al menú FILE → New y aparecerá
la ventana del editor.
CLIPS
• Edición de programas
– Ingresar el código y luego guardar con la opción del
menú FILE-→Save.
– Darle un nombre con extensión .CLP y guardar.
CLIPS
• Ejecución del Programa
– Para ejecutar el programa realizar lo siguiente:
Darle un nombre con extensión .CLP y guardar.
Cargar el programa: (load “nombrePrograma.clp”)
Luego el comando: (reset)
Por último: (run)