Introducción al CLIPS
description
Transcript of Introducción al CLIPS
![Page 1: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/1.jpg)
Introducción alCLIPS
C Language Integrated Production System
![Page 2: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/2.jpg)
Recursos de CLIPS• Sitio oficial:
http://www.ghg.net/clips/CLIPS.html• Ejecutables:
http://www.ghg.net/clips/download/executables/• Documentación:
http://www.ghg.net/clips/download/documentation/• Ejemplos:
http://www.ghg.net/clips/download/executables/examples/ • Preguntas Frecuentes:
http://www.ghg.net/clips/CLIPS-FAQ
![Page 3: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/3.jpg)
• Herramienta para SBC desarrollada por la sección de tecnología de software (Software Technology Branch) de la NASA.
• En desarrollo desde 1985
• Portable: Se puede portar a cualquier sistema con compilador ANSI C o C++. Existe en Windows 95/98/NT, MacOS X, y Unix. Se tiene acceso al código fuente para adaptarlo a necesidades.
• Integrable: Se puede integrar con código de otros lenguajes (C, Java, FORTRAN, ADA) y extender mediante protocolos definidos.
• De dominio público.
![Page 4: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/4.jpg)
CLIPS Soporta:
• Programación declarativa: Reglas (con encadenamiento hacia adelante)
• Programación procedimental
• Programación orientada a objetos
![Page 5: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/5.jpg)
Base deConocimientos
(Reglas)
Memoriade Trabajo(Hechos)
Interfaz
Motor de Inferencia
Agenda
![Page 6: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/6.jpg)
• Caracteres no imprimibles (espacio, retorno, tabulador, etc.)• Comillas dobles "• Paréntesis ()• et &• barra vertical |• Menor que, < , puede ser primer caracter de un símbolo• virgulilla ~• punto y coma ; comienzo de comentario, hasta un retorno
Delimitadores de simbolos
? y $? no pueden comenzar un símbolo, pero pueden estar dentro de un símbolo
![Page 7: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/7.jpg)
Hechos
• Los hechos (“facts”) en CLIPS constan de– Un nombre del hecho (Ej: relación)
– Una o más ranuras (“slots”)
• Antes de crear hechos, para cada tipo de hecho puede definirse una plantilla con la lista de ranuras válidas para ese tipo de hecho.
![Page 8: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/8.jpg)
Ejemplo: Declaración de una plantilla para hecos que describirán una persona:
(deftemplate persona “es una persona” (slot nombre) (slot edad) (slot estatura) (slot color-de-cabello))
![Page 9: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/9.jpg)
Agregando un hecho a la lista de hechos con el comando assert:
(assert (persona (nombre “Juan Mora") (edad 35) (estatura 168) (color-de-cabello negro)))
<Fact-0>
![Page 10: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/10.jpg)
Agregando otro hecho a la lista de hechos:
(assert (persona (nombre “Pedro Pombo") (edad 46) (estatura 172) (color-de-cabello negro)))
<Fact-1>
![Page 11: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/11.jpg)
Ver lista de los hechos:
(facts)
f-0 (persona (nombre "Juan Mora") (edad 35) (estatura 168) (color-de-cabello negro))
f-1 (persona (nombre "Pedro Pombo") (edad 46) (estatura 172) (color-de-cabello negro))
For a total of 2 facts.
![Page 12: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/12.jpg)
Modificar ranura de un hecho:
(modify 0 (edad 37))<Fact-2>
(facts)f-1 (persona (nombre "Pedro
Pombo") (edad 46) (estatura 172) (color-de-cabello negro))
f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168) (color-de-cabello negro))
For a total of 2 facts.
![Page 13: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/13.jpg)
Crear un hecho con base en otro:
(duplicate 1 (nombre “Lina Mira”))
<Fact-3>
![Page 14: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/14.jpg)
(facts)f-1 (persona (nombre "Pedro
Pombo") (edad 46) (estatura 172) (color-de-cabello negro))
f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168) (color-de-cabello negro))
f-3 (persona (nombre "Lina Mira") (edad 46) (estatura 172) (color-de-cabello negro))
For a total of 3 facts.
![Page 15: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/15.jpg)
(retract 1)(facts)
f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168) (color-de-cabello negro))
f-3 (persona (nombre "Lina Mira") (edad 46) (estatura 172) (color-de-cabello negro))
For a total of 2 facts.
![Page 16: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/16.jpg)
Se pueden eliminar varios hechos con un solo retract:
(retract 0 2 5)
Se pueden eliminar todos los hechos:
(retract * )
![Page 17: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/17.jpg)
Se pueden definir ranuras multicampo, que admiten varios valores:
(deftemplate individuo “ejemplo multislot” (multislot nombre) (slot edad) (slot estatura) (slot color-de-cabello))
![Page 18: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/18.jpg)
Así pueden existir hechos como:
(individuo (nombre Juan Mora Duarte) (edad 35) (estatura 168) (color-de-cabello negro)))
![Page 19: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/19.jpg)
Se pueden declarar varios hechos como conocimiento inicial con deffacts:
(deffacts gente “algunas personas”
(persona (nombre "Marta Paez") (edad 33) (estatura 170) (color-de-cabello rubio))
(persona (nombre "Diego Molina") (edad 25) (estatura 168) (color-de-cabello negro))
(persona (nombre "Luz Perez Daza") (edad 19) (estatura 166) (color-de-cabello negro)) )
![Page 20: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/20.jpg)
(facts)
f-2 (persona (nombre "Juan Mora") (edad 37) (estatura 168) (color-de-cabello negro))
f-3 (persona (nombre "Lina Mira") (edad 46) (estatura 172) (color-de-cabello negro))
For a total of 2 facts.
![Page 21: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/21.jpg)
Los hechos contenidos en deffacts se aseveran a la lista de hechos con el comando:
(reset)Efectos:
1. Se borran los hechos que hay en la lista de hechos (no se borran reglas)
2. Los hechos definidos en deffacts se crean en la lista de hechos
3. Se crea el hecho adicional (initial-fact)f-0con identificador
Este hecho inicial se usa típicamente para iniciar la ejecución del programa
![Page 22: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/22.jpg)
(reset)
f-0 (initial-fact)f-1 (persona (nombre "Marta Paez")
(edad 33) (estatura 170) (color-de-cabello rubio))
f-2 (persona (nombre "Diego Molina") (edad 25) (estatura 168) (color-de-cabello negro))
f-3 (persona (nombre "Luz Perez Daza") (edad 19) (estatura 166) (color-de-cabello negro))
For a total of 4 facts.
(facts)
![Page 23: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/23.jpg)
Se pueden crear hechos sin tener un deftemplate correspondiente:
(assert (jefe Hector Luis))(assert (jefe Diego Hector))(assert (tallas 12 32 34 36 40))
Estos se llaman hechos ordenados, y a ellos CLIPS les crea un deftemplate implícito
![Page 24: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/24.jpg)
El comando watch es útil para depurar programas.Sintáxis: (watch <item-observado>)
(watch facts)(watch activations)(watch rules)(watch statistics)
Se desactivan con:(unwatch <item-observado>)
![Page 25: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/25.jpg)
(defrule nombre “comentario opcional” (patron-1) . . . . (patron-n) => (accion-1) . . . . (accion-m) )
El nombre de cada regla debe ser único.
Reglas
![Page 26: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/26.jpg)
(deftemplate peligro (slot tipo))(deftemplate respuesta (slot accion))
Sean estas dos plantillas:
(defrule peligro-presion “regla ejemplo” (peligro (tipo presion-excesiva)) => (assert (respuesta (action abrir-valvula))))
Ejemplo de regla:
![Page 27: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/27.jpg)
Agenda
(agenda)
CLIPS coloca en la Agenda las reglas cuyos patrones antecedente concuerdan con hechos.
0 emergencia-tipo-1: f-00 emergencia-tipo-2: f-15 ambulancia-libre: f-2
El contenido de la Agenda se puede inspeccionar con el comando agenda
![Page 28: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/28.jpg)
Otros comandos
• (clear)Restaura el estado inicial de CLIPS: borra todos los hechos y todas las reglas, reinicia a cero el identificador de hechos.
• (run)Ejecuta el programa. Este termina cuando ya no hay activaciones en la agenda
• (printout t “Hola mundo !” crlf)
![Page 29: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/29.jpg)
Variables Comienzan por signo de interrogación.Ejemplos:
?precio?nn?color
Durante la comparación de antecedentes de reglas con hechos, si hay concordancia entre un patrón que tenga variables y un hecho, las variables se enlazan a los valores correspondientes dentro del hecho; son valores válidos dentro de la regla.
![Page 30: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/30.jpg)
Variables en reglas Ejemplo, Sea la regla:
(defrule R-abuelo(papa ?x ?y )(papa ?y ?z )=>(assert (abuelo ?x ?z ) )
)
![Page 31: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/31.jpg)
Variables en reglas Y sean los hechos:
(papa agustin pedro )(papa pedro hernando )La regla R-abuelo se activa ( agenda), y al ejecutarse resultan las asignaciones:
?x agustin?y pedro
Y se crea el hecho:
(abuelo agustin hernando )
![Page 32: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/32.jpg)
Comodines (“wildcards”) A veces en la comparación de patrones y hechos existen campos en un hecho cuyos valores no nos interesan para lo que queremos, pero deben tenerse en cuenta para que haya concordancia.
Sea el hecho: (nombre jose luis ramirez)
El patrón: (nombre ? ? ramirez)hace concordancia con ese hecho y todos los que tengan 2 nombres y “ramirez”.
![Page 33: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/33.jpg)
Comodines (“wildcards”)
(nombre jose luis ramirez)(nombre hugo ramirez)(nombre luis pablo maria ramirez)
El patrón: (nombre ? $? ramirez)hace concordancia con hechos como:
$? comodín para cero o más campos
![Page 34: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/34.jpg)
Ejecutando
(deftemplate persona (slot nombre)(slot edad) (slot estatura) (slot color-de-cabello))
(assert (persona (nombre juan)(edad 30) (estatura 173) (color-de-cabello rubio)))
(assert (persona (nombre pedro) (edad 20) (estatura 166) (color-de-cabello negro)))
CLIPS>
CLIPS>
<Fact-0>
CLIPS>
<Fact-1>
![Page 35: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/35.jpg)
(defrule hallar-rubios(persona (nombre ?nn)(color-de-cabello rubio))=>(printout t ?nn " es rubio" crlf))
(run)juan es rubioCLIPS>
CLIPS>
CLIPS>
![Page 36: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/36.jpg)
Un ejemplo con 2 reglas
CLIPS> (assert (perro rintintin))<Fact-0>CLIPS> (assert (perro lassie))<Fact-1>CLIPS> (assert (perro laika))<Fact-2>CLIPS> (assert (gato felix))<Fact-3>CLIPS> (assert (gato garfield))<Fact-4><CLIPS>
![Page 37: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/37.jpg)
(defrule ladran ""(perro ?x)=>(assert (ladra ?x))(printout t "ladra " ?x crlf)) (defrule maullan ""(gato ?x)=>(assert (maulla ?x))(printout t "maulla " ?x crlf))
CLIPS>
CLIPS>
CLIPS>
![Page 38: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/38.jpg)
(facts)f-0 (perro rintintin)f-1 (perro lassie)f-2 (perro laika)f-3 (gato felix)f-4 (gato garfield)For a total of 5 facts.CLIPS>
CLIPS>
![Page 39: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/39.jpg)
(run)maulla garfieldmaulla felixladra laikaladra lassieladra rintintinCLIPS>
CLIPS>
![Page 40: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/40.jpg)
(facts)f-0 (perro rintintin)f-1 (perro lassie)f-2 (perro laika)f-3 (gato felix)f-4 (gato garfield)f-5 (maulla garfield)f-6 (maulla felix)f-7 (ladra laika)f-8 (ladra lassie)f-9 (ladra rintintin)For a total of 10 facts.CLIPS>
CLIPS>
![Page 41: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/41.jpg)
Variables multicampo
Si anteponemos $ a una variable en un patrón, esa variable hara concordancia (“matching”) con una lista de cero o más símbolos en un hecho, en CLIPS esta lista es un valor multicampo.
A la variable se asigna pues la lista multicampo en este caso. El signo $ no es parte del nombre de la variable. El $ es como una función cuyo argumento es una variable monocampo y que retorna una variable multicampo
![Page 42: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/42.jpg)
Variables multicampo
(assert (escritor gabriel garcia marquez))
(defrule R1(escritor $?nombres )=>(printout t ?nombres crlf ) ) (run)
CLIPS>
CLIPS><Fact-0>
CLIPS>
(gabriel garcia marquez)CLIPS>
![Page 43: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/43.jpg)
Restricciones en variables
(metal oro)(metal titanio)(metal plata)
El patrón: (metal oro | plata | titanio )hace concordancia con los hechos:
![Page 44: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/44.jpg)
Restricciones en variables
(metal titanio)(metal plata)
El patrón: (metal ~oro )hace concordancia con cualquier símbolo excepto oro
![Page 45: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/45.jpg)
Restricciones en variables
(metal ?m&~titanio&~oro)
Se puede usar el operador & para poner una combinación de restricciones a una variable.Ejemplo, el patrón:
hará concordancia con cualquier hecho metal en el cual el metal no sea titanio ni oro, y el valor de ?m será asignado al valor que concuerde.
![Page 46: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/46.jpg)
Prioridades de las reglas
(declare (salience 25) )
A las reglas se les puede asignar una prioridad (“salience”). Estas se pueden declarar así:
en la regla, entre el comentario opcional y el primer patrón del antecedente.El valor puede ir de -10000 a +10000.Si no se declara, CLIPS asume un valor de cero.
![Page 47: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/47.jpg)
Orden de ejecución de las reglas
En la Agenda las reglas de mayor valor “salience” se colocan sobre las de menor valor, y se ejecutan primero.
Dentro de reglas de igual “salience”, la colocación de las reglas en la agenda está determinada por una estrategia de resolución de conflictos basada en el orden en que se van activando las reglas.
![Page 48: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/48.jpg)
Por defecto, la estrategia de resolución de conflictos es por primero en profundidad (“depth”):
Las nuevas reglas activadas van encima de las que existían en la agenda.
Orden de ejecución de las reglas
![Page 49: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/49.jpg)
Se puede usar una estrategia primero en amplitud (“breadth”), que coloca las nuevas reglas activadas debajo de las reglas preexistentes.Para cambiar de la estrategia por defecto a esta, se usa el comando:
Orden de ejecución de las reglas
(set-strategy breadth)
Hay otras estrategias pero estas 2 son las más usuales
![Page 50: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/50.jpg)
(deffunction <nombre> "comentario opcional"(?arg1 ?arg2 ... ?argM [$?argN])<accion1><accion2>...<accion(K-1)><accionK>
)
![Page 51: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/51.jpg)
( deffunction hipotenusa (?a ?b) (sqrt (+ ( * ?a ?a) (* ?b ?b) ) ) ) ( hipotenusa 4 6 )7.21110255092798
CLIPS>
CLIPS>
CLIPS>
![Page 52: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/52.jpg)
(deffunction interrogar (?pregunta $?allowed-values) (printout t ?pregunta) (bind ?respuesta (read)) (if (lexemep ?respuesta) then (bind ?respuesta (lowcase ?respuesta)) ) (while (not (member ?respuesta ?allowed-values)) do (printout t ?pregunta) (bind ?respuesta (read)) (if (lexemep ?respuesta) then (bind ?respuesta (lowcase ?respuesta)) ) ) ?respuesta)
![Page 53: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/53.jpg)
(deffunction afirmativo (?pregunta) (bind ?larespuesta (interrogar ?pregunta si no s n)) (if (or (eq ?larespuesta si) (eq ?larespuesta s)) then TRUE else FALSE ))
;===============================
![Page 54: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/54.jpg)
(defrule licor-disponible "" => (if (afirmativo "Tiene brandy (si/no)? ") then (assert (disponible brandy)) else (if (afirmativo "Tiene conac (si/no)? ") then (assert (disponible conac)) else (printout t "Lo siento, no se puede hacer el coctel"crlf) ) ))
![Page 55: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/55.jpg)
Otros comandos
• (list-defrules)
• (list-deftemplates)
• (list-deffacts)
Listar nombres de defrules, deftemplates y deffacts:
![Page 56: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/56.jpg)
Otros comandos
• (ppdefrule <nombre>)
• (ppdeftemplate <nombre>)
• (ppdeffacts <nombre>)
Listar contenido (declaraciones) de defrules, deftemplates y deffacts:
![Page 57: Introducción al CLIPS](https://reader035.fdocuments.us/reader035/viewer/2022070406/56814175550346895dad629d/html5/thumbnails/57.jpg)
Otros comandos
• (undefrule <nombre>)
• (undeftemplate <nombre>)
• (undeffacts <nombre>)
Borrar defrules, deftemplates y deffacts: