La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Departamento de Ciencia de la Computación IIC3194 – Metodologías Emergentes en la Ingeniería de Software Razonamiento basado en reglas JESS Ingeniería.

Presentaciones similares


Presentación del tema: "Departamento de Ciencia de la Computación IIC3194 – Metodologías Emergentes en la Ingeniería de Software Razonamiento basado en reglas JESS Ingeniería."— Transcripción de la presentación:

1 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 ralarcon@ing.puc.cl II-Sem. 2006

2 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.

3 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

4 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

5 Ejemplo1 (JESS) ( defrule mortal (human ?X) => (assert (mortal ?X)) ) (assert (human Socrates)) (watch facts) (run) ==> f-1 (MAIN::mortal Socrates) Reglas (permanente) Facts (temporales) Proceso de inferencia (RETE) resultado

6 Ejemplo2 (JESS) (deftemplate human (slot name) ) ( defrule mortal (human (name ?X)) => (assert (mortal ?X)) ) (assert (human (name (Socrates))) ) (watch all) (run) FIRE 1 MAIN::mortal f-0 ==> f-1 (MAIN::mortal Socrates) “Conceptos” Reglas (permanente) Facts (temporales) Proceso de inferencia (RETE) resultado

7 Ejemplo 3 (deftemplate being (slot name)) (deftemplate mortal extends being) (deftemplate immortal extends being) (deftemplate monster extends mortal) (deftemplate human extends mortal) (deftemplate 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 (human (name Bob)) (monster (name Gollum)) (god (name Zeus)) ) (reset) (run)

8 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

9 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)

10 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 a

11 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>

12 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.

13 Solució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 (personaje (nombre Juan)) (personaje (nombre Maria)) (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)) ) (reset) (run)

14 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”

15 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 (personaje (nombre Juan)) (personaje (nombre Maria)) ) (reset) (watch all) (run) (assert (conversacion (emisor Juan) (receptor Maria) (palabra insulto)) ) (run) (assert (conversacion (emisor Juan) (receptor Maria) (palabra broma)) ) (run) (assert (conversacion (emisor Juan) (receptor Maria) (palabra insulto)) ) (run) (assert (conversacion (emisor Juan) (receptor Maria) (palabra amenaza)) ) (run)

16 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>

17 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”

18 JESS extendido  Pueden añadirse funciones a JESS.  send ( ACLMessage )  JessSend  Contadores.  Tiempo discreto.  …

19 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?

20 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))))))

21 Solución (defrule find-solution (position (of Fred) (is ?p1)) (pants-color (of Fred) (is ?c1)) (position (of ?n&~Fred) (is ?p&:(eq ?p (+ ?p1 1)))) (pants-color (of ?n&~Fred) (is blue&~?c1)) (position (of Joe) (is ?p2&2&~?p1)) (pants-color (of Joe) (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 t Fred " " ?p1 " " ?c1 crlf) (printout t Joe " " ?p2 " " ?c2 crlf) (printout t Bob " " ?p3 " " ?c3 crlf) (printout t Tom " " ?p4 " " ?c4 crlfb crlf) )


Descargar ppt "Departamento de Ciencia de la Computación IIC3194 – Metodologías Emergentes en la Ingeniería de Software Razonamiento basado en reglas JESS Ingeniería."

Presentaciones similares


Anuncios Google