Departamento de Ciencia de la Computación
IIC3194 – Metodologías Emergentes en la Ingeniería de Software
Razonamiento basado
en reglas JESS
Ingeniería de Software Orientada a Agentes (AOSE)
Prof. Rosa A. Alarcón
[email protected]
II-Sem. 2006
Sistema basado en reglas
 Fines de los 80, AI creo expectativas que
fueron defraudadas.
 Sistemas expertos emulan razonamiento
humano en un dominio especifico.
 Sistemas expertos basados en reglas RBS
razonan sobre hechos (facts) de un
problema usando reglas del tipo IF …
THEN.
 Potencian muchas aplicaciones de manera
no obstructiva.
 Son una de las aplicaciones basadas en AI
mas usadas productivamente.
RBS
 Representacion como tripletas atributo-objeto-valor
+ reglas de inferencias plausibles que los conectan.
 Base independiente de reglas (conocimiento o base
de conocimiento, es permanente) + un motor de
inferencia (shell) + una memoria de trabajo
temporal que contiene una serie de hechos (facts).
Shell
RBS actualmente
 Mycin (Buchanan y Shortliffe, 1984).
 XCON (McDermontt, 1982).
 Arquitecturas cognitivas, como ACT
(Anderson, 1983) y SOAR (Laird et al.,
1987).
 Componente externa “pluggable” (shell).
Extensiblee, integrable, flexible.
 Empresas grandes (optimizar procesos y
procedimientos), proveedores de servicios
especializados, herramientas.
 Inferencia de reglas de negocio.
 Jboss Rules
Ejemplo1 (JESS)
(
Reglas
(permanente)
)
Facts
(temporales)
defrule mortal (human ?X)
=>
(assert (mortal ?X))
(assert (human Socrates))
Proceso de
inferencia
(RETE)
(watch facts)
(run)
resultado
==> f-1 (MAIN::mortal Socrates)
Ejemplo2 (JESS)
“Conceptos”
(deftemplate human (slot name) )
(
Reglas
(permanente)
defrule mortal (human (name ?X))
=>
(assert (mortal ?X))
)
Facts
(temporales)
Proceso de
inferencia
(RETE)
resultado
(assert (human (name (Socrates))) )
(watch all)
(run)
FIRE 1 MAIN::mortal f-0
==> f-1 (MAIN::mortal Socrates)
Ejemplo 3
(deftemplate
(deftemplate
(deftemplate
(deftemplate
(deftemplate
(deftemplate
being (slot name))
mortal extends being)
immortal extends being)
monster extends mortal)
human extends mortal)
god extends immortal)
(defrule list-all-humanoids
(being (name ?n))
=> (printout t ?n " is a being " crlf) )
(defrule list-all-mortals
(mortal (name ?n))
=> (printout t ?n " is mortal " crlf) )
(deffacts beings
(reset)
(run)
(human (name Bob))
(monster (name Gollum))
(god (name Zeus)) )
Ejecución y resultado







(batch examples\\beings.clp)
Zeus is a being
Gollum is mortal
Gollum is a being
Bob is a being
Bob is mortal
5
JESS
 Atomo: simbolo (variable), nil, TRUE,
FALSE.
 Numeros: 2 3 4 5.3
 Strings: “hola”
 Lista: (+ 2 3) (a b c) () (2) (“a”)
(deftemplate being (slot name))
 Comentarios:
; comen tario
 Variables: ?x
 Multivariables: $?arreglo
; (1 2 3 4)
Funciones de JESS













(+ 2 3)
(+ (+ 2 3) (* 3 3))
(printout t "The answer is " 42 "!" crlf)
(batch examples\\hello.clp) ;ejecuta archivo
(bind ?x Socrates) ;asigna valor a variable
(clear)
;borra facts, reglas, etc.
(create$ 1 2 3)
;(bind $?lista (create$ 1 2 3))
(exit)
(foreach ?x (create$ a b c d) (printout t ?x crlf)
var
valores
accion
(if (> ?x 100) then (bind ?y TRUE) else (bind ?y FALSE)
(eq 2 2.0) ; FALSE
(eq* 2 2.0) ; TRUE
(retract 2) ; borra el FACT 2
(str-compare “a” “ab”) ; 0 iguales, - a < b, + b>a
Socrates de nuevo
(clear)
(deftemplate human (slot name))
(defrule mortal (human (name ?X)) => (assert (mortal ?X)) )
(defrule mostrar (mortal ?X) => (printout t crlf "Mortal "?X crlf crlf) )
(assert (human (name Socrates)))
(watch facts)
(run)
(assert (human (name Juan)))
(run)
Jess> (batch examples\\socrates1.clp)
==> f-1 (MAIN::mortal Socrates)
Mortal Socrates
==> f-2 (MAIN::human (name Juan))
==> f-3 (MAIN::mortal Juan)
Mortal Juan
2
Jess>
Ejercicio
 Hagamos un juego reactivo, donde
dos personajes conversen y
dependiendo de lo que se diga
(insulto, broma o amenaza), se
enojan, rien, o escapan.
Solución
(deftemplate personaje (slot nombre))
(deftemplate conversacion (slot emisor) (slot receptor) (slot palabra))
(deftemplate emocion (slot personaje) (slot nombre))
(defrule gatilla_enojo
(defrule gatilla_risa
(conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p insulto))
=> (assert (emocion (personaje ?r) (nombre enojado))) )
(conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p broma))
=> (assert (emocion (personaje ?r) (nombre risa))) )
(defrule gatilla_corre (conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p amenaza))
=> (assert (emocion (personaje ?r) (nombre corre))) )
(deffacts escena1
(personaje (nombre Juan))
(personaje (nombre Maria))
(conversacion (emisor Juan)
(conversacion (emisor Juan)
(conversacion (emisor Juan)
(conversacion (emisor Juan)
(reset)
(run)
(receptor
(receptor
(receptor
(receptor
Maria)
Maria)
Maria)
Maria)
(palabra
(palabra
(palabra
(palabra
insulto))
broma))
insulto))
amenaza))
)
Resultado
Jess> (batch examples\\juego1.clp)
3
Jess> (facts)
f-0 (MAIN::initial-fact)
f-1 (MAIN::personaje (nombre Juan))
f-2 (MAIN::personaje (nombre Maria))
f-3 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra insulto))
f-4 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra broma))
f-5 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra
amenaza))
f-6 (MAIN::emocion (personaje Maria) (nombre corre))
f-7 (MAIN::emocion (personaje Maria) (nombre risa))
f-8 (MAIN::emocion (personaje Maria) (nombre enojado))
For a total of 9 facts.
Jess>
•
Problema: la inferencia es “desordenada”
Modificación
(deftemplate personaje (slot nombre))
(deftemplate conversacion (slot emisor) (slot receptor) (slot palabra))
(deftemplate emocion (slot personaje) (slot nombre))
(defrule gatilla_enojo
(conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p insulto))
=> (assert (emocion (personaje ?r) (nombre enojado))) )
(defrule gatilla_risa
(conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p broma))
=> (assert (emocion (personaje ?r) (nombre risa))) )
(defrule gatilla_corre
(conversacion (emisor ?e) (receptor ?r) (palabra ?p))
(test (eq ?p amenaza))
=> (assert (emocion (personaje ?r) (nombre corre))) )
(deffacts escena1
(reset)
(assert
(run)
(assert
(run)
(assert
(run)
(assert
(run)
(watch all)
(personaje (nombre Juan))
(personaje (nombre Maria)) )
(run)
(conversacion (emisor Juan) (receptor Maria) (palabra insulto)) )
(conversacion (emisor Juan) (receptor Maria) (palabra broma)) )
(conversacion (emisor Juan) (receptor Maria) (palabra insulto)) )
(conversacion (emisor Juan) (receptor Maria) (palabra amenaza)) )
Resultado
Jess> (batch examples\\juego2.clp)
<== Focus MAIN
==> f-3 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra insulto))
==> Activation: MAIN::gatilla_enojo : f-3,
FIRE 1 MAIN::gatilla_enojo f-3,
==> f-4 (MAIN::emocion (personaje Maria) (nombre enojado))
==> f-5 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra broma))
==> Activation: MAIN::gatilla_risa : f-5,
FIRE 1 MAIN::gatilla_risa f-5,
==> f-6 (MAIN::emocion (personaje Maria) (nombre risa))
==> f-7 (MAIN::conversacion (emisor Juan) (receptor Maria) (palabra amenaza))
==> Activation: MAIN::gatilla_corre : f-7,
FIRE 1 MAIN::gatilla_corre f-7,
==> f-8 (MAIN::emocion (personaje Maria) (nombre corre))
1
Jess>
Unión de JADE y JESS
 La idea es tener un agente que tenga
una conducta de razonamiento.
 JadeJessBehaviour
 Metodos “assert” y “run”
 JADE -> JESS
 Y un metodo para escuchar la
inferencia.
 JESS -> JADE
 MyEventHandler
 Recibe objectos “Fact”
JESS extendido
 Pueden añadirse funciones a JESS.
 send ( ACLMessage )
 JessSend
 Contadores.
 Tiempo discreto.
…
Ejercicio
 4 golfistas estan parados en un tee, en
una línea de izquierda a derecha. Cada
golfista usa diferentes pantalones de color;
uno usa pantalones rojos.
 El golfista a la derecha inmediata de Fred
está usando los pantalones azules.
 Joe está en segundo lugar en línea.
 Bob está usando los pantalones grises.
 Tom no está en la posición uno o cuatro, y
no está usando los pantalones
anaranjados.
 ¿En qué orden estan los cuatro golfistas y
de qué color es el pantalon de cada uno?
Solución
 (deftemplate pants-color (slot of) (slot is))
 (deftemplate position (slot of) (slot is))
 (defrule generate-possibilities

=>

(foreach ?name (create$ Fred Joe Bob Tom)

(foreach ?color (create$ red blue gray orange)

(assert (pants-color (of ?name)

(is ?color))))



(foreach ?position (create$ 1 2 3 4)
(assert (position (of ?name)
(is ?position))))))
Solución
(defrule find-solution
(position (of Fred) (is ?p1))
(pants-color (of Fred) (is ?c1))
(position (of ?n&~Fred)
(pants-color (of ?n&~Fred)
(position (of Joe)
(pants-color (of Joe)
(is ?p&:(eq ?p (+ ?p1 1))))
(is blue&~?c1))
(is ?p2&2&~?p1))
(is ?c2&~?c1))
(position (of Bob)
(is ?p3&~?p1&~?p&~?p2))
(pants-color (of Bob&~?n) (is gray&?c3&~?c1&~?c2))
(position (of Tom&~?n) (is ?p4&~1&~4&~?p1&~?p2&~?p3))
(pants-color (of Tom) (is ?c4&~orange&~blue&~?c1&~?c2&~?c3))
)
=>
(printout
(printout
(printout
(printout
t
t
t
t
Fred " " ?p1 " " ?c1 crlf)
Joe " " ?p2 " " ?c2 crlf)
Bob " " ?p3 " " ?c3 crlf)
Tom " " ?p4 " " ?c4 crlfb crlf)
Descargar

Diapositiva 1