Subido por Sergio Tejedor

Sistemas Expertos Introducción a CLIPS (Parte 1)

Anuncio
1ª parte
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 El lenguaje de sistema experto que se utilizará es
CLIPS, que soporta tres tipos de paradigmas de
programación: basado en reglas, orientado a objetos y
por procedimiento.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Componentes básicos de un
sistema experto basado en reglas
 Lista de hechos: contiene los datos de los que se derivan
las inferencias
 Base de conocimiento: comprende todas las reglas
 Mecanismo de inferencia: controla la ejecución global
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
HECHOS
 Con el fin de resolver problemas, un programa de
CLIPS debe tener datos e información con la que
pueda razonar, a cada “fragmento” de información se le
llama hecho.
 Los hechos constan de un nombre de relación (un
campo simbólico) seguido por cero o más ranuras
(slots) y sus valores asociados.
 El siguiente ejemplo es un hecho
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
(persona
(nombre Juan)
(edad 20)
(color-ojos azul)
(color-pelo cafe) )
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 Todo el hecho, además de cada ranura, está delimitado
por un paréntesis izquierdo de apertura y uno derecho
de cierre.
 El símbolo persona es el nombre de relación del hecho
y éste contiene cuatro ranuras “slots” nombre, edad,
color-ojos y color-pelo.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
La construcción plantillas de
definición
 Antes de que puedan crearse los hechos, CLIPS debe
tener información sobre la lista de ranuras válidas para
un nombre de relación determinado.
 Los grupos de hechos que comparten el mismo
nombre de relación y contiene información común
pueden describirse utilizando la construcción
plantillas de definición o deftemplates
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 La construcción plantillas de definición es análoga a
una estructura de registro en un lenguaje como Pascal.
 El formato general de una plantilla de definición es:
(deftemplate<nombre-relación> [<comentario-opcional>]
<definición-ranura>*)
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 Utilizando esta sintaxis, el hecho persona puede
describirse con la siguiente deftemplate:
(deftemplate persona “Una deftemplate de ejemplo”
(slot nombre)
(slot edad)
(slot color-ojos)
(slot color-pelo) )
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en CLIPS
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
2ª parte
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Hechos ordenados
 A los hechos con un nombre de relación que tienen
una plantilla de definición correspondiente se les
llama «hechos de plantilla de definición». A los hechos
con un nombre de relación que no la tiene se les llama
«hechos ordenados».
 Estos tienen implícita una sola ranura de varios
campos que se utiliza para almacenar todos los valores
que se encuentran después del nombre de relación.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 Cada vez que CLIPS encuentra un hecho ordenado,
crea automáticamente una plantilla de definición
implícita para este hecho (opuesto a cuando hacemos
una plantilla explícita).
 Como un hecho ordenado sólo tiene una ranura, no se
requiere el nombre de ésta para definirlo, por ejemplo,
una lista de números podría estar representada por el
siguiente hecho:
(número-lista 7 9 3 4 20)
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
 Por lo general los hechos de plantilla de definición
deben usarse cada vez que sea posible, por que los
nombres de ranura hacen que los hechos sean más
legibles y que resulte más fácil trabajar con ellos.
 Solo hay dos casos done los hechos ordenados resultan
útiles: primero, los hechos que sólo incluyen un
nombre de relación son útiles como marcas. En
segundo lugar, para hechos que contienen una sola
ranura, el nombre de ésta suele ser sinónimo del
nombre de relación.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Comando WATCH, construcción DEFFACTS
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
watch
 El comando watch es útil para depurar programas. La
sintaxis de este comando es:
 (watch <elemento-observado>)
 Donde <elemento-observado> es uno de los hechos,
reglas, actuaciones, estadísticas recopiladas, enfoque o
todo.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
watch
 Estos elementos pueden observarse en cualquier
combinación para proporcionar la cantidad apropiada
de información de la depuración.
 El comando watch puede utilizarse más de una vez
para observar más de una función de la ejecución de
CLIPS con la palabra “all” puede utilizarse para
habilitar todas sus funciones.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
watch
 Si se están observando los hechos, CLIPS imprimirá
automáticamente un mensaje que indica que se ha
hecho una actualización de la lista de hechos cada vez
que alguno se afirma o se retira.
 El siguiente diálogo de comandos ilustra el uso de este
comando de depuración (retomando los ejemplos del
tutorial anterior).
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
watch
 La secuencia de caracteres <== indica que se está
retirando el hecho previo, y ==> indica que se está
afirmando el nuevo.
 Los efectos de un comando watch pueden desactivarse
utilizando el comando correspondiente unwatch, cuya
sintaxis es:
(unwatch <elemento-observado>)
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
La construcción DEFFACTS
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
DEFFACTS
 A menudo es conveniente tener la capacidad de
afirmar automáticamente un conjunto de hechos en
lugar de escribir las mismas afirmaciones desde el
nivel superior, sobre todo en hechos que se saben
verdaderos antes de ejecutar un programa.
 La ejecución de casos de prueba para depurar un
programa es un ejemplo en el que es útil afirmar
automáticamente un grupo de hechos.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
DEFFACTS
 Los grupos de hechos que representan el conocimiento
inicial pueden definirse utilizando la construcción
deffacts.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
DEFFACTS
 Después de la palabra “deffacts”, se encuentra el
nombre necesario para esta construcción .
 En el caso del ejemplo, el nombre elegido fue
“persona”; después del nombre sigue un comentario
adicional entre comillas.
 Después del nombre o comentario siguen los hechos
que habrán de afirmarse en la lista de hechos.
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
RESET
 Los hechos de una instrucción de deffacts se afirman
utilizando el comando “reset” de CLIPS, que elimina
todos los hechos de la lista de hechos y luego afirma
los hechos de la instrucción de deffacts existente.
 La sintaxis es:
(reset)
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en la consola CLIPS
 Proyección de video complementario en youtube
Mtl. Lourdes Cahuich - http://yo-te-ayudo.com
Componentes de una regla
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 Con el fin de realizar trabajo útil, un sistema experto
debe tener reglas y hechos.
 Ahora que se han analizado las afirmaciones y
retractaciones de los hechos, es posible ver cómo
funcionan las reglas.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 Las reglas pueden escribirse directamente en CLIPS o
cargarse desde un archivo de reglas creado por un
editor.
 Los ejemplos en este tutorial serán ingresados desde la
línea de comandos de la consola CLIPS.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 Por ejemplo, consideremos los tipos de hechos y reglas
que pueden utilizarse para vigilar y responder a un
rango de urgencias posibles como un incendio o una
inundación.
 A continuación se muestra el pseudocódigo para una
de las posibles reglas del sistema experto de vigilancia
de una planta industrial.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
SI la urgencia es un incendio
ENTONCES la respuesta es activar
el sistema anti incendios
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 Después de convertir el pseudo código en una regla,
deben definirse las plantillas de definición para los
tipos de hechos a los que hace referencia la regla.
 Una urgencia puede representarse mediante la
siguiente deftemplate:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
(deftemplate urgencia (slot tipo) )
 En donde el campo “tipo” del hecho “urgencia”
contendría símbolos como fuego, inundación e
interrupción de energía.
 De igual manera, la respuesta puede representarse
mediante la siguiente plantilla de definición:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
(deftemplate respuesta (slot acción) )
 Donde el campo “acción” del hecho “respuesta” indica
la respuesta que se emprenderá.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Antes de introducir la regla mencionada en CLIPS hay
que ingresar ambos deftemplates.
 Sin embargo, antes de introducir cualquiera de estas
instrucciones, escriba el comando (clear) seguido por
un enter en la línea de comandos.
 El comando “clear” se explicará a detalle
posteriormente.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
(defrule urgencia-incendio “Una regla de ejemplo”
(urgencia (tipo incendio) )
=>
(assert (respuesta
(acción activar-sistema-antiincendios))))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 Si la regla se introduce correctamente como se
muestra, reaparecerá el indicador de comandos de
CLIPS; de lo contrario, aparecerá un mensaje de error
indicando muy probablemente que alguna palabra
clave está mal escrita o que hay un paréntesis mal
colocado.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 A continuación se muestra la misma regla, pero con
comentarios añadidos para igualar sus partes.
 Los comentarios empiezan con punto y coma y
continúan hasta un enter; CLIPS ignorará esta línea.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
; Encabezado de regla
(defrule urgencia-incendio “Una regla de ejemplo”
; Patrones
(urgencia (tipo incendio) )
;flecha ENTONCES
=>
; Acciones
(assert (respuesta
(acción activar-sistema-antiincendios))))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas
 La regla completa debe ponerse entre paréntesis, al
igual que cada uno de sus patrones y acciones, que
puedan ser múltiples.
 Los paréntesis que rodean a los patrones y acciones
deben equilibrarse de manera apropiada si están
anidados.
 En la regla “incendio-urgencia” hay un patrón y una
acción.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Formato de la regla
 1. La regla debe empezar con la palabra clave “defrule” ,
seguida por su nombre, que puede ser cualquier
palabra de CLIPS válida.
 Si se introduce una regla con un nombre que ya se ha
asignado a otra, entonces la nueva regla reemplazará a la
anterior.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Formato de la regla
 2. Después del encabezado de la regla siguen cero o
más elementos adicionales (EC).
 El tipo más simple de ellos es un “patrón EC” o solo
“patrón”, cada uno consta de una o más restricciones
destinadas a igualar los campos de un hecho de
deftemplate.
 CLIPS trata de comparar los patrones de reglas con los
hechos de la lista de hechos, si todos los patrones de una
regla coinciden con los hechos, la regla se activa y se
coloca en la “agenda”, que es la colección de reglas
activadas, donde puede haber cero o más reglas
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Formato de la regla
 3. Al símbolo => que sigue a los patrones de una regla
se le llama “flecha”, se forma al escribir el signo de
igual seguido del signo mayor que, y representa el
principio de la parte “ENTONCES” de una regla SI…
ENTONCES.
 A la parte de la regla que va antes de la flecha se le llama
“lado izquierdo”, a la parte que va después de la flecha se
le llama “lado derecho”.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas sin patrones
 Si una regla no tiene patrones, se agregará el patrón
especial (hecho inicial), que se define
automáticamente.
 Cualquier regla sin patrones al lado izquierdo se
colocará en la agenda cuando se realice un “reset”.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Formato de la regla
 La última parte de la regla es la lista de acciones que se
ejecutará cuando se “dispare” la regla, aunque no es
obligatorio que una regla tenga acciones.
 CLIPS ordena las reglas de la agenda a partir de su
prioridad y dispara la regla con mayor prioridad.
 La prioridad de una regla es un atributo entero
llamado “prominencia, que se analiza con mayor
detalle posteriormente.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Agenda y ejecución
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejecutar
 Es posible hacer que un programa de CLIPS se ejecute
con el comando “run” que tiene la siguiente sintaxis:
(run [<límite>])
 Donde el argumento opcional <límite> es el número
máximo de reglas que habrán de dispararse, pero si no
se incluye <límite> o es igual a -1, se dispararán todas
las reglas hasta que no quede ninguna en la agenda.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejecutar
 De lo contrario, la ejecución de las reglas cesará
después de haber disparado el número <límite> de
reglas.
 Cuando se ejecuta un programa de CLIPS, se dispara la
regla en la agenda con mayor prominencia, si solo hay
una regla en la agenda, ésa es la que se disparará.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejecutar
 Las reglas se activan cada vez que se igualan todos los
patrones de regla mediante hechos.
 El proceso de igualación de patrones siempre se
mantiene actualizado y se lleva a cabo
independientemente de si los hechos se afirman antes
o después de que se ha definido una regla.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reiniciar sistema
 Como las reglas requieren de los hechos para
ejecutarse, el comando “reset” es el método clave para
iniciar o reiniciar un sistema experto en CLIPS.
 Por lo general, los hechos asegurados con “reset”
satisfacen los patrones de una o más reglas y colocan
en agenda, las activaciones de estas reglas.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reiniciar sistema
 Entonces al aplicar el comando “run” se inicia la
ejecución del programa.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Lista de reglas en la agenda
 El comando “agenda” permite mostrar la lista de reglas
en la agenda y su sintaxis es:
(agenda)
 Si no hay activaciones en la agenda, re aparecerá el
indicador de comandos.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Lista de reglas en la agenda
 Si la regla “incendio-urgencias” (del tutorial anterior)
ha sido activada por el hecho “(urgencia (tipo
incendio) )” con un índice de hecho “1”, un comando
“agenda” producirá la siguiente salida:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (reset)
CLIPS> (assert
(urgencia (tipo incendio)))
<fact – 1>
CLIPS> (agenda)
0
urgencia-incendio: f:1
For a total of 1 activation
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas y refracción
 Siguiendo el ejemplo, con la regla incendio-urgencia
en la agenda, ahora el comando “run” provocará que se
dispare la regla.
 El hecho (respuesta (acción activar-sistemaantiincendios)) se agregará a la lista de hechos como
la acción de la regla, como se muestra a continuación:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS>(run)
CLIPS>(facts)
f-0 (hecho inicial)
f-1 (urgencia (tipo incendio))
f-2 (respuesta
(acción activar-sistema-antiincendios))
For a total of 3 facts
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas y refracción
 ¿Qué pasa si se vuelve a aplicar el comando “run”? Hay
una regla y un hecho la satisface, por lo que debería
dispararse de nuevo, pero si se ejecuta de nuevo el
comando “run” no producirá resultados.
 Al revisar la agenda comprobará que no se dispararon
reglas por que no había reglas en ella.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Reglas y refracción
 La regla no se volvió a disparar debido a la manera en
que está diseñado CLIPS, en éste las reglas muestran
una propiedad llamada “refracción”, lo que significa
que no se disparan más de una vez para un conjunto
específico de hechos.
 Sin esto los sistemas expertos caerían en ciclos triviales
disparando las mismas reglas sobre los mismos
hechos.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Comando refresh
 Se puede usar el comando “refresh” como alternativa
para que se vuelva a disparar la regla, ya que este
comando vuelve a colocar en la agenda todas las
activaciones que ya se han disparado para una regla
(los hechos que desencadenaron la activación estarán
presentes en la lista de hechos).
(refresh <nombre-regla>)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS>(agenda)
CLIPS>(refresh incendio-urgencia)
CLIPS>(agenda)
0
urgencia-incendio: f-1
For a total of 1 activation.
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Observación de activaciones
 Si se están observando las activaciones, CLIPS
imprimirá automáticamente un mensaje cada vez que
se agregue o se elimine una activación a la agenda.
 Igual que con los hechos, la secuencia de caracteres
<== indica que se está eliminando una activación y la
secuencia ==> indica que se está agregando.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (reset)
CLIPS> (watch activations)
CLIPS> (assert (urgencia (tipo incendio)))
==> Activation 0
urgencia-incendio: f-1
<Fact-1>
CLIPS>(agenda)
0
urgencia-incendio: f-1
For a total of 1 activation
CLIPS>(retract 1)
<== Activation 0
urgencia-incendio: f-1
CLIPS>(agenda)
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Observación de activaciones
 Si se están observando las reglas, CLIPS imprimirá un
mensaje cada vez que se dispare cada una de ellas.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (reset)
CLIPS> (watch rules)
CLIPS> (assert (urgencia (tipo incendio)))
==> Activation 0
urgencia-incendio: f-1
<Fact-1>
CLIPS> (run)
FIRE
1 urgencia-incendio: f-1
CLIPS> (agenda)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Fire - disparar
 El número que sigue al símbolo FIRE indica cuántas
reglas se han disparado desde que se proporcionó el
comando “run” por ejemplo, si se disparó otra regla
después de “urgencia-incendio”, sería precedida por
“FIRE 2”.
 Después de imprimir el orden de disparo, se imprime
el nombre de la regla, seguido por el índice de hecho
que igualó los patrones de la regla.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Si se están observando estadísticas, al terminar una
ejecución CLIPS imprimirá mensajes informativos
como el siguiente:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (unwatch all)
CLIPS> (reset)
CLIPS> (watch statistics)
CLIPS> (assert (urgencia(tipo incendio)))
<Fact-1>
CLIPS> (run)
1 rules fired
Run time is 0.02699999999993 seconds.
37.0370370371331 rules per second.
3 mean number of facts (3 maximum).
1 mean number of instances (1 maximum).
1 mean number of activations (1 maximum).
CLIPS> (unwatch statistics)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Estadísticas
 Se observa que se imprimen seis estadísticas después
de un comando “run”; así mismo se muestra el número
total de reglas disparadas, la cantidad de tiempo en
segundos que se requirió para dispararlas y el
promedio de reglas disparadas pro segundo (la primera
estadística dividida entre la segunda).
 El número entre paréntesis seguido por la palabra
“maximum” indica el número más grande de hechos
contenido en la lista de hechos para cualquier disparo
de regla.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Comandos para el manejo de construcciones
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Despliegue de listas
 El comando “list-defrules” se utiliza para mostrar la
lista actual de reglas mantenidas por CLIPS
 De manera similar los comandos “list-deftemplates” y
“list-deffacts”, pueden utilizarse para mostrar
respectivamente la lista actual de deftemplates o
deffacts.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Sintaxis
(list-defrules)
(list-deftemplates)
(list-deffacts)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Despliegue de miembros de la
construcción.
 Los comandos ppdefrule (pretty print defrule, defrule
de impresión), ppdeftemplate (pretty print
deftemplate, deftemplate de impresión) y ppdeffacts
(pretty print deffacts, deffacts de impresión) se
utilizan para mostrar las representaciones en texto de
una defrule, una deftemplate y una deffacts,
respectivamente.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Despliegue de un miembro de
construcción
(ppdefrule <nombre-defrule>)
(ppdeftemplate <nombre-deftemplate>)
(ppdeffacts <nombre-deffacts>)
 El único argumento de cada comando especifica el
nombre de la defrule, deftemplate o deffacts que se
mostrará. Cuando se despliega CLIPS pone diferentes
partes de las construcciones en diferentes líneas para
mejorar la legibilidad.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (ppdefrule urgencia-incendio)
(defrule MAIN::urgencia-incendio
(urgencia (tipo incendio))
=>
(assert (respuesta (accion activar-sistemaantiincendio))))
CLIPS> (ppdeftemplate respuesta)
(deftemplate MAIN::respuesta
(slot accion))
CLIPS> (ppdeffacts urgencia)
(deffacts MAIN::urgencia
(tipo incendio))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Despliegue
 El símbolo MAIN:: que precede a cada uno de los
nombres de construcción indica el módulo en el que se
han colocado las construcciones.
 Los módulos proporcionan un mecanismo para dividir
una base de conocimiento.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Eliminación de un miembro de una
construcción
 Los comandos undefrule, undeftemplate y
undeffacts se utilizan para eliminar un defrule, una
deftemplate y una deffacts, respectivamente.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (undeffacts urgencia)
CLIPS> (list-deffacts)
initial-fact
For a total of 1 deffacts.
CLIPS> (list-defrules)
urgencia-incendio
For a total of 1 defrule.
CLIPS> (undefrule urgencia-incendio)
CLIPS> (list-defrules)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Eliminación
 Si se proporciona el símbolo * como un argumento
para cualquiera de los comandos para eliminación de
construcciones, entonces se eliminan todas las
construcciones del tipo apropiado.
 El símbolo * también puede utilizarse con el comando
retract para eliminar todos los hechos.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Eliminación
 Las construcciones que son utilizadas como referencia
por otras construcciones, solo pueden eliminarse
después de las segundas.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Eliminación de todas las
construcciones del ambiente CLIPS
 El comando clear se utiliza para borrar toda la
información contenida en el entorno de CLIPS, elimina
todas las construcciones contenidas actualmente y
todos los hechos de la lista de hechos.
(clear)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Eliminación total
 Después de borrar el entorno CLIPS, el comando clear
agrega la deffacts “initial-fact” al ambiente CLIPS.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Comando PRINTOUT
 Además de afirmar hechos, el lado derecho de las
reglas puede utilizarse para imprimir información
utilizando el comando printout.
 Ejemplo
(defrule urgencia-incendio
(urgencia (tipo incendio))
=>
(printout t “Activar el sistema antiincendios”
clrf) )
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Imprimir en salida estándar
 La sintaxis es
(printout <nombre-lógico> <imprimir-elementos>*)
 Donde “nombre-lógico” indica el destino de la salida
del comando “printout”, <imprimir-elementos> son los
cero o más elementos que habrán de imprimirse con
este comando.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Imprimir en salida estándar
 Es muy importante incluir la letra “t” después del
comando printout por que este argumento indica el
destino de la salida, también conocido como “nombre
lógico”.
 En este caso se indica a CLIPS que envíe la salida al
dispositivo de salida estándar de la computadora.
 La palabra “crlf” obliga una reacción de “enter”, lo que
mejora el aspecto de la salida.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
El uso de varias reglas, comando set-break
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Hasta ahora sólo se han mostrado el tipo más simple
de programa que contiene únicamente una regla.
 En realidad los sistemas prácticos pueden constar de
cientos o miles de reglas.
 Veamos el ejemplo con más reglas.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (deftemplate urgencia (slot tipo))
CLIPS> (deftemplate respuesta (slot accion))
CLIPS> (defrule incendio-urgencia
(urgencia (tipo incendio))
=>
(printout t "Activar sistema antiincendios"
crlf))
CLIPS> (defrule inundacion-urgencia
(urgencia (tipo inundacion))
=>
(printout t "Apagar equipo electrico"
crlf))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Una vez que estas reglas se han introducido en CLIPS,
la afirmación del hecho (urgencia (tipo incendio)) y
luego la aplicación de un comando run, producirán la
salida “activar sistema antiincendio”, en tanto que la
afirmación del hecho (urgencia (tipo inundacion)) y la
emisión de un comando run, producirán la salida
“Apagar el equipo eléctrico”.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (assert (urgencia (tipo incendio)))
<Fact-1>
CLIPS> (run)
Activar sistema antiincendios
CLIPS> (assert (urgencia (tipo inundacion)))
<Fact-2>
CLIPS> (run)
Apagar equipo electrico
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Si los incendios y las inundaciones son las únicas
urgencias que deben controlarse, las reglas anteriores
serán suficientes.
 Sin embargo el mundo real no es tan simple; no todos
los incendios pueden extinguirse usando agua, tal vez
algunos requieran extintores químicos.
 Si todas las situaciones se incluyen como reglas ¿ya se
han cubierto todas las posibilidades?
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Por desgracia, la respuesta es no. En realidad las cosas
no siempre funcionan a la perfección, y capturar todo
el conocimiento pertinente en un sistema experto
puede ser muy difícil.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 La mayor parte de la heurística real es demasiado
complicada para expresarse con reglas de un solo
patrón.
 Es posible utilizar reglas con más de un patrón para
expresar estas condiciones. Retomando el ejemplo del
sistema antiincendio:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (deftemplate sistema-extintor
(slot tipo)
(slot estado))
CLIPS> (defrule incendio-clase-A-urgencia
(urgencia (tipo incendio-clase-A))
(sistema-extintor (tipo aspersar-agua)
(estado apagado))
=>
(printout t "Activar contra incendios de agua"
crlf))
CLIPS> (defrule incendio-clase-B-urgencia
(urgencia (tipo incendio-clase-B))
(sistema-extintor (tipo dioxido-carbono)
(estado apagado))
=>
(printout t "Usar exintor de dioxido de carbono"
crlf))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Ambas reglas tienen dos patrones, el primero
determina que existe una urgencia de incendio y si éste
es de clase A o B; el segundo patrón determina s se ha
habilitado el extintor apropiado.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Es posible colocar cualquier número de patrones en
una regla; lo importante es observar que la regla sólo se
coloca en la agenda si los hechos satisfacen a todos los
patrones; a este tipo de limitación se le llama
elemento condicional y.
 Puesto que los patrones de todas las reglas están
contenidos de manera implícita dentro de un elemento
condicional “y”, la regla no se disparará si alguno de los
patrones no se satisface.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 CLIPS tiene un comando de depuración llamado “set-
break” que permite detener la ejecución antes de que
se dispare cualquier regla de un grupo específico.
 A una regla que detiene la ejecución antes de
dispararse se le llama “punto de interrupción”.
 La sintaxis es:
(set-break <nombre-regla>)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Considerando como ejemplo las siguientes reglas:
CLIPS> (clear)
CLIPS> (defrule primera
=>
(assert (disparar segunda)))
CLIPS> (defrule segunda
(disparar segunda)
=>
(assert (disparar tercera)))
CLIPS> (defrule tercera
(disparar tercera)
=>)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 El siguiente diálogo de comandos muestra la ejecución
de las reglas sin ningún punto de interrupción:
CLIPS> (watch rules)
CLIPS> (reset)
CLIPS> (run)
FIRE
1 primera: *
FIRE
2 segunda: f-1
FIRE
3 tercera: f-2
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 Las reglas se disparan en sucesión cuando se introduce el
comando “run”. El siguiente diálogo de comandos demuestra el
uso del comando “set-break” para detener la ejecución:
CLIPS> (set-break segunda)
CLIPS> (set-break tercera)
CLIPS> (reset)
CLIPS> (run)
FIRE
1 primera: *
Breaking on rule segunda.
CLIPS> (run)
FIRE
1 segunda: f-1
Breaking on rule tercera.
CLIPS> (run)
FIRE
1 tercera: f-2
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 En este caso, la ejecución se detiene antes de permitir
que se disparen las reglas “segunda” y “tercera”.
 Observe que el comando “run” debe disparar cuando
menos una regla antes de que un punto de
interrupción detenga la ejecución.
 Por ejemplo, después de que se ha detenido la
ejecución de la “segunda” regla, no lo vuelve a hacer
cuando se proporciona nuevamente el comando “run”.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 El comando “show-breaks”, puede utilizarse para
enumerar todos los puntos de interrupción, su sintaxis
es:
(show-breaks)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
 El comando “remove-break” puede usarse para
eliminar los puntos de interrupción, su sintaxis es:
(remove-break [<nombre-regla>])
 Si <nombre-regla> se proporciona como argumento,
sólo se eliminará el punto de interrupción para esa
regla; de lo contrario, se suprimirán todos los puntos
de interrupción.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS> (show-breaks)
segunda
tercera
CLIPS> (remove-break)
CLIPS> (show-breaks)
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Carga y guardado de construcciones
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Carga desde un archivo
 El comando “load” permite cargar en CLIPS un archivo
de construcciones hecho con un editor de texto. La
sintaxis del comando “load” es:
(load <nombre-archivo>)
 Donde <nombre-archivo> es una cadena o símbolo
que contiene el nombre del archivo que habrá de
cargarse.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Carga desde un archivo
 Suponiendo que las reglas y deftemplates de urgencia
se almacenan en un archivo llamado “incendio.clp” en
la unidad C de una PC, el siguiente comando cargaría
las construcciones en CLIPS:
(load “C:incendio.clp”)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Carga desde un archivo
 Uno de los problemas que pueden ocurrir durante la carga
se debe al carácter de diagonal invertida utilizado en
algunos sistemas operativos como separador de ruta, pues
CLIPS la interpreta como un carácter de escape.
 Es necesario usar dos diagonales invertidas para crear una
sola en una cadena
C:\usr\clips\incendio.clp
(load “C:\\usr\\clips\\incendio.clp”)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Carga desde un archivo
 Las construcciones no tienen que permanecer en un
solo archivo. Pueden almacenarse en varios y cargarse
empleando diversos comandos de carga.
 Si no ocurren errores cuando se carga un archivo, el
comando de carga devolverá el símbolo TRUE, de lo
contrario devolverá el símbolo FALSE.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Observaciones de compilación
 Cuando se observan compilaciones (como opción
predeterminada), se imprime un mensaje informativo
que incluye el nombre de la construcción para cada
una de las cargadas por medio del comando “load”.
 Supongamos que CLIPS acaba de iniciarse y se
introdujeron los siguientes comandos:
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
CLIPS>(load "C:\\Users\\Lourdes\\incendio.clp")
Defining deftemplate: urgencia
Defining deftemplate: respuesta
Defining defrule: incendio-urgencia +j+j
TRUE
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Observaciones de compilación
 El mensaje indica que se cargaron dos deftemplates
(urgencia y respuesta), seguidas por la regla “incendiourgencia” y la cadena “+j+j” al final del mensaje
“Defining defrule” es información de CLIPS sobre la
estructura interna de las reglas compiladas
 Esta información será útil para afinar un programa y se
analizará más adelante.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
No observando compilaciones
 Si no se están observando las compilaciones, entonces
CLIPS imprime un solo carácter para cada construcción
cargada: * para defrules, % para deftemplates y $ para
deffacts.
CLIPS> (clear)
CLIPS> (unwatch compilations)
CLIPS> (load
"C:\\Users\\Lourdes\\incendio.clp")
%%*
TRUE
CLIPS>
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Guardando en archivo
 CLIPS también proporciona lo opuesto al comando
“load”; el comando “save” permite guardar en un
archivo de disco el conjunto de construcciones
almacenado en CLIPS, y la sintaxis es:
(save <nombre-archivo>)
(save “C:incendio-archivo.clp”)
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Guardando en archivo
 El comando “save” guardará todas las construcciones
de CLIPS en el archivo especificado, pero no es posible
guardar construcciones especificadas en un archivo.
 En condiciones normales, si se utiliza un editor para
crear y modificar las construcciones, no hay necesidad
de utilizar el comando “save”, ya que las
construcciones se guardarán mientras está usando el
editor.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Agregando comentarios
 Es una buena idea incluir comentarios en un programa
CLIPS, por que a veces las construcciones pueden
resultar difíciles de comprender, y es posible utilizar
los comentarios para explicar al lector lo que están
haciendo las construcciones.
 Los comentarios también se emplean para tener una
buena documentación de los programas y serán útiles
en programas extensos.
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Agregando comentarios
 El siguiente es un ejemplo de comentarios en un
programa de incendios
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
;****************************************
;*
*
;*
Programador: L. Cahuich
*
;*
*
;*
Titulo: Programa incendio
*
;*
*
;*
Fecha: 11/Marzo/2011
*
;*
*
;****************************************
;Deftemplates
(deftemplate urgencia
(slot tipo))
(deftemplate respuesta
(slot accion))
; El propósito de esta regla es activar
; el sistema contra incendios en caso de un incendio
(defrule incendio-urgencia
; SI
; Hay una urgencia de incendio
(urgencia (tipo incendio))
=>
;ENTONCES
; Activar el sistema aspersar
(assert
(respuesta
(accion activar-sistema-antiincendio))))
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Agregando comentarios
 La carga de estas construcciones en CLIPS y su
impresión demostrará que cada comentario que
comienza con punto y coma se elimina del programa
CLIPS
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Ejemplo en consola CLIPS
 Proyectar video youtube correspondiente
Mtl Lourdes Cahuich - http://yo-te-ayudo.com
Descargar