Sunteți pe pagina 1din 21

1

1
Introduo ao JESS
Henrique Lopes Cardoso
(DEI/FEUP)
Outubro 2005
Setembro 2006
Setembro 2007
Setembro 2008
2
Os primrdios: Sistemas Periciais
Um ramo da IA
Simulao do raciocnio humano num
determinado domnio
SP baseados em Regras so os mais utilizados
simulam o raciocnio humano utilizando conhecimento
heurstico
dados do problema armazenados como factos
raciocnio a partir de regras do tipo SE ENTO
2
3
Sistemas baseados em Regras
Contm regras para um certo domnio
conhecimento no necessariamente pericial
exemplos:
definio de regras de negcio (business rules)
componentes de deciso (e.g. em agentes computacionais)
Vantagens:
representao intuitiva do conhecimento
separao entre conhecimento e sua aplicao
alteraes das regras no implicam recompilao
Paradigma da programao declarativa
definio de regras independentes
execuo no sequencial
interpretador decide quando aplicar que regras
4
Sistemas baseados em Regras (2)
Encadeamento (aplicao) das regras:
encadeamento inverso (backward-chaining)
goal-driven: como provar um objectivo?
linguagens de programao lgica (e.g. Prolog)
encadeamento directo (forward-chaining)
data-driven: o que fazer quando surge um facto?
sistemas de produo (e.g. CLIPS, JESS)
3
5
Componentes de um Sistema baseado
em Regras
Base de Conhecimento: conjunto de regras
P
1
, ..., P
m
Q
1
, ..., Q
n
se as premissas P
1
... P
m
so verdadeiras, ento executar as aces Q
1
... Q
n
premissas, condies, antecedente ou LHS (left-hand-side)
aces, concluses, consequente ou RHS (right-hand-side)
Motor de Inferncia: decide quando aplicar que regras; controla a
activao e seleco de regras
Memria de Trabalho: guarda dados e resultados intermdios que
compem o estado actual do problema; examinada e alterada pelas
regras, que so activadas por estes dados
Motor de Inferncia
Base de Conhecimento
(REGRAS)
Memria de Trabalho
(FACTOS)
6
Funcionamento do Motor de
Inferncia
O motor de inferncia funciona de uma forma cclica,
decompondo-se em trs fases:
1) fase de correspondncia (match):
agrupamento das regras cujas premissas (LHS) so satisfeitas pela
memria de trabalho: feita a instanciao das regras com os
factos que tornam as suas premissas verdadeiras
obtm-se o conjunto de conflito ou agenda
2) fase de resoluo de conflitos:
escolha de qual a regra a executar, de acordo com uma estratgia
de resoluo de conflitos (p. ex., a de maior prioridade)
3) fase de aco:
execuo sequencial das aces (RHS) presentes na regra que foi
seleccionada
estas aces podem alterar a memria de trabalho, provocando a
activao de novas regras
4
7
JESS Java Expert System Shell
A rule engine that very efficiently applies rules to data.
Developed at Sandia National Laboratories in late 1990s,
created by Dr. Ernest J. Friedman-Hill.
Inspired by the AI production rule language CLIPS.
Fully developed Java API for creating rule-based expert
systems.
How does Jess work?
Jess matches facts in the fact base to rules in the rule base.
The rules contain function calls that manipulate the fact base
and/or other Java code.
Jess uses the Rete algorithm to match patterns.
8
Jess Architecture Diagram
WORKING
MEMORY
RULE
BASE
EXECUTION
ENGINE
INFERENCE
ENGINE
PATTERN
MATCHER
AGENDA
5
9
The Jess Language
Architecturally inspired by CLIPS
LISP-like syntax.
Basic data structure is the list.
Can be used to script Java API.
JAVA --> JESS
Can be used to access JavaBeans.
JESS --> JAVA
you can create any Java object and access its methods from within Jess!
Easy to learn and use.
10
Noes bsicas
Smbolos (tomos)
identificadores: letras, dgitos e $*=+-/<>_?#.
case-sensitive
exemplos: abc um-valor valor#1 _xpto
smbolos especiais: nil TRUE FALSE
Nmeros
Strings
delimitadas por ""
Listas
delimitadas por ( e )
contm zero ou mais smbolos, nmeros, strings ou outras listas
exemplos: (+ 3 2) (a b c) ("Hello, World") ()
(deftemplate foo (slot bar))
o primeiro elemento da lista chama-se a cabea da lista
Comentrios
texto a seguir a ; e at ao fim da linha
Comentrios como em C: /* */
6
11
Funes
As chamadas a funes (quer predefinidas quer
definidas pelo utilizador) so listas
notao prefixa: a cabea da lista o nome da funo
exemplos:
Jess> (+ 2 3)
5
Jess> (+ (+ 2 3) (* 3 3))
14
Jess> (printout t "Answer is " 42 "!" crlf)
Answer is 42!
Jess> (batch examples/hello.clp)
12
Variveis
Identificadores que comeam por ?
podem conter um smbolo, nmero ou string, ou ainda uma
lista
pode-lhes ser atribudo um valor atravs da funo bind
Jess> (bind ?v "The value")
Jess> (bind ?grocery-list (list eggs bread milk))
Verificar o valor de uma varivel:
Jess> (bind ?a 123)
Jess> ?a
123
As variveis no so declaradas antes do seu primeiro uso
excepo: possvel criar variveis globais, que no so
destrudas aquando de um reset defglobal
7
13
Definio de funes: deffunction
(deffunction <func-name> [<doc-comment>] (<parameter>*)
<expr>*
[<return-specifier>]
)
Exemplo:
(deffunction max (?a ?b)
(if (> ?a ?b) then (return ?a)
else (return ?b)
)
)
Funes para controlo de fluxo: foreach, if, while,
Invocao:
Jess> (printout t "Greater of 3 and 5 is " (max 3 5) "." crlf)
Greater of 3 and 5 is 5.
14
Factos Ordenados
Ordered facts
so simplesmente listas em Jess
a cabea da lista funciona como uma espcie de
categoria (equivalente ao functor de uma relao em
Prolog)
exemplos:
(shopping-list eggs milk bread)
(person "Bob Smith" Male 35)
(father-of danielle ejfried)
assero/retraco de factos: assert/retract
visualizao dos factos existentes: facts
remoo de todos os factos: clear
8
15
Factos Ordenados: exemplos
Jess> (reset)
TRUE
Jess> (assert (father-of danielle ejfried))
<Fact-1>
Jess> (facts)
f-0 (MAIN::initial-fact)
f-1 (MAIN::father-of danielle ejfried)
For a total of 2 facts in module MAIN.
Jess> (retract (fact-id 1))
TRUE
Jess> (facts)
f-0 (MAIN::initial-fact)
For a total of 1 facts in module MAIN.
o facto (initial-fact) criado pelo comando reset
16
Factos No Ordenados: deftemplate
Unordered facts
permitem estruturar a informao
exemplos:
(person (name "Bob Smith") (age 34) (gender Male))
(automobile (make Ford) (model Explorer) (year 1999))
cada facto tem um template associado que define os seus slots
(deftemplate <template-name> [extends <template-name>]
[<doc-comment>]
[(declare ...)]
[(slot | multislot <slot-name>
[(type <typespec>)
[(default <value>)]
...
)]*
)
9
17
Factos No Ordenados: exemplos
Jess> (deftemplate automobile
"A specific car."
(slot make)
(slot model)
(slot year (type INTEGER))
(slot color (default white)))
Jess> (assert (automobile (make Chrysler)
(model LeBaron)
(year 1997)))
<Fact-0>
Jess> (facts)
f-0 (MAIN::automobile (make Chrysler) (model LeBaron)
(year 1997) (color white))
For a total of 1 facts in module MAIN.
18
Factos No Ordenados: exemplos (2)
slot que pode conter mltiplos valores: multislot
Jess> (deftemplate box (slot location) (multislot contents))
TRUE
Jess> (bind ?id (assert (box (location kitchen) (contents
spatula sponge frying-pan))))
<Fact-1>
varivel ?id ficou associado o identificador do facto
alterao dos valores de um slot: modify
extenso de um deftemplate:
Jess> (deftemplate used-auto extends automobile
(slot mileage)
(slot blue-book-value)
(multislot owners))
TRUE
10
19
Deffacts
Permite definir factos agrupados que so criados aquando da invocao do
comando reset
exemplo:
Jess> (deffacts my-facts "The documentation string"
(foo bar)
(box (location garage) (contents scissors paper rock))
(used-auto (year 1992) (make Saturn) (model SL1)
(mileage 120000) (blue-book-value 3500)
(owners ejfried)))
TRUE
Jess> (reset)
TRUE
Jess> (facts)
f-0 (MAIN::initial-fact)
f-1 (MAIN::foo bar)
f-2 (MAIN::box (location garage) (contents scissors paper rock))
f-3 (MAIN::used-auto (make Saturn) (model SL1) (year 1992)
(color white) (mileage 120000)
(blue-book-value 3500) (owners ejfried))
For a total of 4 facts in module MAIN.
20
Shadow Facts
So factos no ordenados que mapeiam objectos Java
desta forma, um objecto Java pode ser colocado na memria
de trabalho
Templates para shadow facts
(deftemplate <template-name>
(declare (from-class <class-name>)))
ou
(defclass <template-name> <class-name>)
O template criado fica com slots correspondentes s
propriedades JavaBeans da classe
public class ExampleBean {
private String name = "Bob";
public String getName() { return name; }
public void setName(String s) { name = s; }
}
11
21
Shadow Facts (2)
Criao de objecto Java
(bind <var> (new <class-name>))
Criao do shadow fact
(add <Java object>)
se ainda no existir, o template criado automaticamente
ou
(definstance <template-name> <Java object>)
22
Shadow Facts: exemplo
Criao do template:
Jess> (defclass ExampleBean ExampleBean)
ExampleBean
Jess> (ppdeftemplate ExampleBean)
"(deftemplate MAIN::ExampleBean
\"$JAVA-OBJECT$ ExampleBean\"
(declare (from-class ExampleBean)))"
Criao de objecto Java na memria de trabalho (shadow fact):
Jess> (bind ?x (new ExampleBean))
(Java-Object::ExampleBean
Jess> (add ?x)
<Fact-0>
Jess> (facts)
f-0 (MAIN::ExampleBean
(class <Java-Object:java.lang.Class>)
(name "Bob")
(OBJECT <Java-Object:ExampleBean>))
For a total of 1 facts in module MAIN.
12
23
Utilizao de objectos Java
Exemplo: criao e utilizao de uma Hashtable
Jess> (bind ?ht (new java.util.Hashtable))
<Java-Object:java.util.Hashtable>
Jess> (call ?ht put "key1" "element1")
Jess> (call ?ht put "key2" "element2")
Jess> (call ?ht get "key1")
"element1"
Exemplo: manipulao de member variables
Jess> (bind ?pt (new java.awt.Point))
<Java-Object:java.awt.Point>
Jess> (set-member ?pt x 37)
Jess> (set-member ?pt y 42)
Jess> (get-member ?pt x)
37
24
Definio de regras: defrule
(defrule <rule-name> [<doc-comment>]
[<fact-pattern>]*
=>
[<function-call>]*
)
Exemplo:
Jess> (deftemplate person
(slot firstName) (slot lastName) (slot age))
Jess> (defrule welcome-toddlers
"Give a special greeting to young children"
(person {age < 3})
=>
(printout t "Hello, little one!" crlf) )
Jess> (assert (person (age 2)))
Jess> (run)
Hello, little one!
13
25
Utilizao de padres em regras
Expresses booleanas p/ avaliar contedo de slot dentro de { }
< <= > >= == != <> && ||
Varivel para referncia posterior ao valor do slot dentro de ( )
Exemplo:
Jess> (defrule teenager
?p <- (person {age > 12 && age < 20} (firstName ?name))
=>
(printout t ?name " is " ?p.age " years old." crlf) )
Jess> (assert (person (age 15) (firstName Maria)))
Jess> (assert (person (age 18) (firstName Paul)))
Jess> (run)
Paul is 18 years old.
Maria is 15 years old.
26
Utilizao de padres em regras (2)
Testes aos slots
literais
variveis (possivelmente no livres)
& (e) | (ou) ~ (no)
: sucede se a funo seguinte retornar TRUE
(coord ?X&:(> ?X 10) ?) ; facto no orden. (coord X Y)
= igualdade entre valor do slot e retorno da funo
(coord ?X =(+ ?X 1))
expresses regulares rodeadas por / /
(person (firstName /A.*/))
mais exemplos:
(coord ?X ?X)
(coord ?X ?Y&~?X)
(coord ?X&~10 ?)
(coord ? 10|20)
(coord $?both) ; multislot
14
27
Pattern bindings
Associar variveis a factos no LHS: <-
til por exemplo quando se pretende remover o
facto que despoletou a regra:
(defrule example-5
?fact <- (a "retract me")
=>
(retract ?fact)
)
28
Outros elementos
and, or e not
permitem alterar o comportamento por defeito do LHS
(em que todas as premissas tm que ser satisfeitas)
exists
testa a existncia de pelo menos um facto, mas dispara
apenas 1 vez
test
avaliao de expresses (em vez de verificao da
ocorrncia de factos)

15
29
JESS e Java
Jess API
Classes
jess.Context
jess.Jesp
jess.JessException
jess.Rete
jess.Value
jess.ValueVector

Interfaces
jess.Userfunction

30
JESS e Java (2)
class jess.Rete
motor de inferncia: para construir um componente Jess
numa aplicao Java, cria-se um objecto desta classe
mtodos:
correspondentes a funes Jess: run(), reset(), clear(),
assertFact(), retract(),
execuo de qualquer comando Jess: eval()
acrescentar funes em Java invocveis do Jess:
addUserfunction()

interface jess.Userfunction
definio de funes Java invocveis em Jess
mtodos getName() e call()
16
31
JESS e Java (3)
import jess.*;
public class ExSquare {
public static void main(String[] str) {
try {
Rete r = new Rete();
r.eval(" (deffunction square (?n) " +
" (return (* ?n ?n)) ) ");
Value v = r.eval("(square 3)");
System.out.println(v);
} catch (JessException ex) {
System.err.println(ex);
}
}
}
32
JESS e Java exemplo
Determinao de descontos e ofertas numa loja
abordagem:
criar um motor Jess com as regras a aplicar e com os
dados dos produtos em catlogo
quando chega uma encomenda:
acrescentar os dados da encomenda memria de trabalho
correr o motor de inferncia
obter da memria de trabalho factos adicionados pelas regras
W
O
R
K
I
N
G
M
E
M
O
R
Y
Items
APPLICATION / USER INTERFACE
R
U
L
E
B
A
S
E
Pricing rules
Order Offers
17
33
JESS e Java exemplo (2)
public class PricingEngine {
private Rete engine;
private WorkingMemoryMarker marker;
// Constructor
public PricingEngine(Database database) throws JessException {
// Create a Jess rule engine
engine = new Rete();
engine.reset();
// Load the pricing rules
engine.batch("pricing.clp");
// Load the catalog data into working memory
engine.addAll(database.getCatalogItems());
// Mark end of catalog data for later
marker = engine.mark();
}
34
JESS e Java exemplo (3)
// Method for handling a new order
public Iterator run(Order orderNumber) throws JessException {
// Remove any previous order data, leaving catalog data
engine.resetToMark(marker);
// Add the order and its contents to working memory
engine.add(order);
engine.add(order.getCustomer());
engine.addAll(order.getItems());
// Fire the rules that apply to this order
engine.run();
// Return the list of offers created by the rules
return engine.getObjects(new Filter.ByClass(Offer.class));
}
}
18
35
JESS e Java exemplo (4)
Exemplos de regras:
(defrule 10%-volume-discount
"Give 10% discount to everybody who spends more than 100."
(Order {total > 100})
=>
(add (new Offer "10% volume discount" (/ ?total 10))) )
(defrule 25%-multi-item-discount
"Give 25% discount on items customer buys 3 or more of."
(OrderItem {quantity >= 3} (price ?price))
=>
(add (new Offer "25% multi-item discount" (/ ?price 4))) )
36
JESS e JADE exemplo
Regras Jess para responder a mensagens ACL
utilizar um motor Jess num behaviour de um agente
AGENT
W
O
R
K
I
N
G
M
E
M
O
R
Y

R
U
L
E
B
A
S
E
Message handling rules
BEHAVIOUR
AGENT
Other rules and functions
send Userfunction
ACLMessages
ACLMessage
reply
ACLMessage
19
37
JESS e JADE exemplo (2)
public class BasicJessBehaviour extends CyclicBehaviour {
Rete jess;
// constructor
BasicJessBehaviour(Agent agent) throws JessException {
// create a Jess rule engine
jess = new Rete();
// create a fact with the agent's name: (i-am X)
jess.eval(" (deffacts Me " +
" (i-am " + myAgent.getName() + ") )");
// define Userfunction "send" to send ACLMessages
jess.addUserfunction(new JessSend(myAgent));
// load rules and functions into working memory
jess.batch("JadeAgent.clp");
jess.reset();
}
38
JESS e JADE exemplo (3)
// action method
public void action() {
// receive a message
MessageTemplate mt = ... // some template
ACLMessage msg = myAgent.receive(mt);
if (msg != null) {
try {
// convert ACLMessage into Jess fact and assert it
jess.assertString(ACL2JessString(msg));
// run Jess engine
jess.run();
} catch (JessException je) { ... }
} else
block();
}
20
39
JESS e JADE exemplo (4)
public class JessSend implements Userfunction {
Agent myAgent;
public JessSend(Agent a) { myAgent = a; }
public String getName() { return "send"; }
// JESS calls (send ?m) where ?m is an ACLMessage Jess fact
public Value call(ValueVector vv, Context ctx) throws
JessException {
// get the Fact
Fact f = vv.get(1).factValue(ctx);
// convert fact into ACLMessage
ACLMessage msg = JessFact2ACL(ctx, f);
// send the ACLMessage
myAgent.send(msg);
return Funcall.TRUE;
}
}
40
JESS e JADE exemplo (5)
; (limited) template of an ACLMessage
(deftemplate ACLMessage
(slot communicative-act)
(slot sender) (multislot receiver) (slot content) )
; rule for handling CFP
(defrule proposal
?m <- (ACLMessage (communicative-act CFP)
(sender ?s) (content ?c) (receiver ?r))
(i-am ?r)
=>
(bind ?p (gen-proposal ?c))
(assert (ACLMessage (communicative-act PROPOSE)
(sender ?r) (receiver ?s) (content ?p)) )
(retract ?m) )
; rule for sending a message
(defrule send-a-message
?m <- (ACLMessage (sender ?s))
(i-am ?s)
=>
(send ?m)
(retract ?m) )
JadeAgent.clp
21
41
JESS e JADE integrao
JESS pode ser utilizado para implementar o mdulo de
raciocnio de um agente Jade
num dos vrios behaviours de um agente
Mais informao:
http://jade.tilab.com/doc/tutorials/jade-jess/jade_jess.html

S-ar putea să vă placă și