You are on page 1of 17

JESS, un sistemas basado

en reglas
Temas

sistemas basados en reglas


programacin declarativa vs procedimental
JESS, Java Expert System Shell
sintxis bsica y capacidades
estructura interna
Sistemas (expertos) basados en reglas

Los sistemas basados en reglas representan el conocimiento


y razonan simulando el comportamiento de expertos humanos

estos sistemas estn implcitos en software que utilizamos de


manera cotidiana, sin que nos demos cuenta de ello.

pueden resolver una amplia gama de problemas de diversa


complejidad.
Ejemplos: filtrado de spam
diagnstico de fallas
diagnstico mdico
prediccin, clasificacin
tareas de planificacin
resolucin de problemas
Enfoque declarativo vs procedimental

Los lenguajes procedimentales ( y los orientados a objeto) consideran


un flujo lineal de la ejecucin, lo cual es adecuado slo en problemas
determinsticos. Un paso sigue inevitablemente al anterior.

Los programas declarativos describen lo que el computador debera


hacer en lugar de instruirlo en cmo lo debe hacer.
Enfoque declarativo vs procedimental

IF
hay luz roja
AND est cerca del cruce
AND
Mientras THEN
conduce
presione el pedal de freno
IF
se ven peatones
AND estn cerca de la calle
THEN
reduzca velocidad y est listo para parar

Es posible resolver problemas con las tcnicas de programacin habituales,


pero es importante escoger la herramienta correcta para cada tarea.

La programacin declarativa es adecuada en problemas que involucran control,


diagnstico, comportamiento inteligente, etc.
Reglas y Mquinas de reglas

IF
LHS (predicado o premisas)
THEN
RHS (conclusiones)

Los sistemas basados en reglas contiene reglas de un


dominio determinado, las que son usadas para derivar
soluciones.

Las mquinas de reglas son mquinas vacas que son capaces de


seguir reglas escritas en su propio lenguaje
Arquitectura de un sistema basado en reglas
JESS: Java Expert System
Shell

Jess es

1. Una mquina de reglas- que aplica eficientemente reglas a los datos.


2. Escrita en JAVA, lo que permite agregar la tecnologa de reglas a aplicaciones
basadas en JAVA
3. Clon de CLIPS
4. Rpida!
Elementos bsicos del lenguaje JESS

Smbolos
Los smbolos son tokens (como los nombres de las
variables) y consideran las convenciones habituales de
programacin (ms algunos caracteres especiales):
first-name
name
name#1
name$1
_foo

Smbolos especiales: Nmeros


nil nul como en Java
TRUE, FALSE (notar maysculas) 3 4. 2.323

Strings
Hola !
Listas

Las listas son la unidad bsica en Jess (similar a LISP) y es la


principal manera de estructurar tanto los datos como el cdigo.

(+ 2 3)

(foreach ?nombre ?lista-nombres


(printout t ?nombre crlf))
Variables Algunas funciones importantes

No requieren declarar su tipo: bind asocia un valor a una variable


Jess> (bind ?a (+ 3
1)) reset Reincia todos los valores de las
4 variables y hechos.

Jess>?a
apply
4 Similar a LISPs
Jess>(+ ?a 2) (apply (+) 1 2 3)
(apply (read) 1 2 3)
6
build eval
Genera reglas instantneamente
-- variables globales ?*a*
Jess es flexible

Jess incluye 200 funciones predefinidas y permite que el programador


construya sus propias funciones. Esto implica que Jess es un lenguaje
de programacin de propsito general en el cual se puede escribir
cualquier tipo de programa.

Una caracterstica importante es el llamado de funciones de JAVA


(enlace a bases de datos, GUI`s, etc)

Jess> (bind ?pt (new java.awt.Point))


<External-Address:java.awt.Point>
Jess> (set-member ?pt x 37)
37
Jess> (set-member ?pt y 42)
42
Jess> (get-member ?pt x)
37
Hechos de la Memoria de Trabajo

Los hechos es una las partes mas importantes de Jess:

Hechos ordenados:
(person 30 Female)
(person 30)
(give-Feedback)
(shutdown-now)
Hechos sin orden (deftemplate)
(person (age 30) (gender Female))
(assert (monkey (location t5-7)
(on-top-of green-couch)))

Hechos ocultos: definstance


permite conectar con aplicaciones en Java
Escribiendo reglas en JESS

(defrule pierde-computador
?pila <- (tamanio-pila 1)
?movida <- (movida-jugador c)

=>

(printout t "El computador debe tomar la ultima barra!"


crlf)
(printout t "Yo Perdi =(!" crlf)
(retract ?pila)
(retract ?movida)
(preguntar-comenzar-otra-vez))

Asociacin de patrones (pattern binding)


Correspondencia de patrones (pattern matching)

(defrule busca-solucion

(posicion (de Francisco) (es ?p1))


(color-pantalon (de Francisco) (es ?c1))
;; Jorge est en posicin #2
(posicion (de Jorge) (es ?p2&2&~?p1))
(color-pantalon (de Jorge) (es ?c2&~?c1))

=>
(printout t Francisco " " ?p1 " " ?c1 crlf)
(printout t Jorge " " ?p2 " " ?c2 crlf)
(printout t Roberto " " ?p3 " " ?c3 crlf)
(printout t Tomas " " ?p4 " " ?c4 crlf)
(printout t crlf)
)
Activacin de reglas

Una regla es activada cuando sus patrones (condiciones del lado izquierdo) son
verificadas por :
un nuevo hecho (patrn) que no exista antes
un hecho que exista antes pero que fue eliminado y luego redefinido.
Encadenamiento hacia atrs vs hacia adelante

IF
LHS (predicado o premisa)
THEN
RHS (conclusiones)

Jess funciona utilizando encadenamiento hacia adelante, i.e. la mquina


ejecuta el lado derecho de la regla cuando el lado izquierdo es verificado por
algn hecho en la memoria de trabajo.

Prolog y otros lenguajes similares utilizan encadenamiento hacia atrs, i.e.


La mquina se esfuerza para que las reglas se lancen: Si el lado izquierdo
de una regla se verifica parcialmente, y la mquina sabe que otra regla
permitira que se satisfagan todas las condiciones, entonces intenta que esa
regla se lance.

You might also like