21
1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os primórdios: Sistemas Periciais Um ramo da IA Simulação do raciocínio humano num determinado domínio SP baseados em Regras são os mais utilizados simulam o raciocínio humano utilizando conhecimento heurístico dados do problema armazenados como factos raciocínio a partir de regras do tipo SE… ENTÃO…

Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

1

1

Introdução ao JESS

Henrique Lopes Cardoso(DEI/FEUP)Outubro 2005Setembro 2006Setembro 2007Setembro 2008

2

Os primórdios: Sistemas Periciais

� Um ramo da IA

� Simulação do raciocínio humano num determinado domínio

� SP baseados em Regras são os mais utilizados� simulam o raciocínio humano utilizando conhecimento heurístico

� dados do problema armazenados como factos� raciocínio a partir de regras do tipo SE… ENTÃO…

Page 2: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

2

3

Sistemas baseados em Regras� Contêm regras para um certo domínio

� conhecimento não necessariamente pericial� exemplos:

� definição de “regras de negócio” (business rules)� componentes de decisão (e.g. em agentes computacionais)

� Vantagens:� representação intuitiva do conhecimento� separação entre conhecimento e sua aplicação� alterações das regras não implicam recompilação

� Paradigma da programação declarativa� definição de regras independentes� execução não sequencial� interpretador decide quando aplicar que regras

4

Sistemas baseados em Regras (2)

� Encadeamento (aplicação) das regras:

� encadeamento inverso (backward-chaining)� goal-driven: como provar um objectivo?� linguagens de programação lógica (e.g. Prolog)

� encadeamento directo (forward-chaining)� data-driven: o que fazer quando surge um facto?� sistemas de produção (e.g. CLIPS, JESS)

Page 3: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

3

5

Componentes de um Sistema baseado em Regras

� Base de Conhecimento: conjunto de regrasP1, ..., Pm → Q1, ..., Qn

se as premissas P1 ... Pm são verdadeiras, então executar as acções Q1 ... Qn

� premissas, condições, antecedente ou LHS (left-hand-side)� acções, conclusões, consequente ou RHS (right-hand-side)

� Motor de Inferência: decide quando aplicar que regras; controla a activação e selecção de regras

� Memória de Trabalho: guarda dados e resultados intermédios que compõem o estado actual do problema; é examinada e alterada pelas regras, que são activadas por estes dados

Motor de Inferência

Base de Conhecimento(REGRAS)

Memória de Trabalho(FACTOS)

6

Funcionamento do Motor de Inferência� O motor de inferência funciona de uma forma cíclica, decompondo-se em três fases:

� 1) fase de correspondência (match):� agrupamento das regras cujas premissas (LHS) são satisfeitas pela memória de trabalho: é feita a instanciação das regras com os factos que tornam as suas premissas verdadeiras

� obtém-se o conjunto de conflito ou agenda

� 2) fase de resolução de conflitos:� escolha de qual a regra a executar, de acordo com uma estratégia de resolução de conflitos (p. ex., a de maior prioridade)

� 3) fase de acção:� execução sequencial das acções (RHS) presentes na regra que foi seleccionada

� estas acções podem alterar a memória de trabalho, provocando a activação de novas regras

Page 4: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

Page 5: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

Noções básicas� Símbolos (átomos)

� identificadores: letras, dígitos e $*=+-/<>_?#.� “case-sensitive”� exemplos: abc um-valor valor#1 _xpto

� símbolos especiais: nil TRUE FALSE

� Números� Strings

� delimitadas por ""

� Listas� delimitadas por ( e )� contêm zero ou mais símbolos, números, strings ou outras listas� exemplos: (+ 3 2) (a b c) ("Hello, World") ()

(deftemplate foo (slot bar))

� o primeiro elemento da lista chama-se a cabeça da lista

� Comentários� texto a seguir a ; e até ao fim da linha� Comentários como em C: /* … */

Page 6: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

6

11

Funções

� As chamadas a funções (quer predefinidas quer definidas pelo utilizador) são listas� notação prefixa: a cabeça da lista é o nome da função

� 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

Variáveis� Identificadores que começam por ?

� podem conter um símbolo, número ou string, ou ainda uma lista

� pode-lhes ser atribuído um valor através da função bindJess> (bind ?v "The value")

Jess> (bind ?grocery-list (list eggs bread milk))

� Verificar o valor de uma variável:Jess> (bind ?a 123)

Jess> ?a

123

� As variáveis não são declaradas antes do seu primeiro uso� excepção: é possível criar variáveis globais, que não são destruídas aquando de um reset – defglobal

Page 7: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

7

13

Definição de funções: deffunction(deffunction <func-name> [<doc-comment>] (<parameter>*)

<expr>*

[<return-specifier>]

)

� Exemplo:(deffunction max (?a ?b)

(if (> ?a ?b) then (return ?a)

else (return ?b)

)

)

� Funções para controlo de fluxo: foreach, if, while, …

� Invocação: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

� são simplesmente listas em Jess� a cabeça da lista funciona como uma espécie de categoria (equivalente ao functor de uma relação em Prolog)

� exemplos:(shopping-list eggs milk bread)

(person "Bob Smith" Male 35)

(father-of danielle ejfried)

� asserção/retracção de factos: assert/retract� visualização dos factos existentes: facts� remoção de todos os factos: clear

Page 8: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

8

15

Factos Ordenados: exemplosJess> (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 Não Ordenados: deftemplate� Unordered facts

� permitem estruturar a informação

� 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>)]

...

)]*

)

Page 9: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

9

17

Factos Não Ordenados: exemplosJess> (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 Não Ordenados: exemplos (2)� slot que pode conter múltiplos valores: multislot

Jess> (deftemplate box (slot location) (multislot contents))

TRUE

Jess> (bind ?id (assert (box (location kitchen) (contentsspatula sponge frying-pan))))

<Fact-1>

� à variável ?id ficou associado o identificador do facto

� alteração dos valores de um slot: modify

� extensão de um deftemplate:Jess> (deftemplate used-auto extends automobile

(slot mileage)

(slot blue-book-value)

(multislot owners))

TRUE

Page 10: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

10

19

Deffacts� Permite definir factos agrupados que são criados aquando da invocação 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� São factos não ordenados que mapeiam objectos Java

� desta forma, um objecto Java pode ser colocado na memória 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; }

}

Page 11: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

11

21

Shadow Facts (2)

� Criação de objecto Java(bind <var> (new <class-name>))

� Criação do shadow fact(add <Java object>)

� se ainda não existir, o template é criado automaticamente

� ou(definstance <template-name> <Java object>)

22

Shadow Facts: exemplo� Criação do template:

Jess> (defclass ExampleBean ExampleBean)

ExampleBean

Jess> (ppdeftemplate ExampleBean)

"(deftemplate MAIN::ExampleBean

\"$JAVA-OBJECT$ ExampleBean\"

(declare (from-class ExampleBean)))"

� Criação de objecto Java na memória 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.

Page 12: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

12

23

Utilização de objectos Java� Exemplo: criação e utilização 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: manipulação de member variablesJess> (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

Definição 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!

Page 13: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

13

25

Utilização de padrões em regras� Expressões booleanas p/ avaliar conteúdo de slot – dentro de { }

� < <= > >= == != <> && ||

� Variável para referência 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

Utilização de padrões em regras (2)� Testes aos slots

� literais� variáveis (possivelmente não livres)� & (e) | (ou) ~ (não)� : sucede se a função seguinte retornar TRUE

� (coord ?X&:(> ?X 10) ?) ; facto não orden. (coord X Y)

� = igualdade entre valor do slot e retorno da função� (coord ?X =(+ ?X 1))

� expressões regulares rodeadas por / /� (person (firstName /A.*/))

� mais exemplos:� (coord ?X ?X)

� (coord ?X ?Y&~?X)

� (coord ?X&~10 ?)

� (coord ? 10|20)

� (coord $?both) ; multislot

Page 14: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

14

27

Pattern bindings� Associar variáveis 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 têm que ser satisfeitas)

� exists� testa a existência de pelo menos um facto, mas dispara apenas 1 vez

� test� avaliação de expressões (em vez de verificação da ocorrência de factos)

� …

Page 15: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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 inferência: para construir um componente Jessnuma aplicação Java, cria-se um objecto desta classe

� métodos:� correspondentes a funções Jess: run(), reset(), clear(), assertFact(), retract(), …

� execução de qualquer comando Jess: eval()� acrescentar funções em Java invocáveis do Jess: addUserfunction()

� …

� interface jess.Userfunction� definição de funções Java invocáveis em Jess� métodos getName() e call()

Page 16: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

� Determinação de descontos e ofertas numa loja� abordagem:

� criar um motor Jess com as regras a aplicar e com os dados dos produtos em catálogo

� quando chega uma encomenda:� acrescentar os dados da encomenda à memória de trabalho� correr o motor de inferência� obter da memória de trabalho factos adicionados pelas regras

WO

RK

ING

ME

MO

RY

Items

APPLICATION / USER INTERFACE

RU

LE

BA

SE

Pricing rules

Order Offers

Page 17: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

}

}

Page 18: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

WO

RK

ING

ME

MO

RY

RU

LE

BA

SE Message handling rules

…BEHAVIOUR

AGENT

Other rules and functions

send Userfunction

ACLMessages

ACLMessage

reply ACLMessage

Page 19: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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();

}

Page 20: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

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

Page 21: Introdução ao JESSeol/AIAD/aulas/jess.pdf · 2008-09-28 · 1 1 Introdução ao JESS Henrique Lopes Cardoso (DEI/FEUP) Outubro 2005 Setembro 2006 Setembro 2007 Setembro 2008 2 Os

21

41

JESS e JADE – integração� JESS pode ser utilizado para implementar o módulo de raciocínio de um agente Jade� num dos vários behaviours de um agente

� Mais informação:� http://jade.tilab.com/doc/tutorials/jade-jess/jade_jess.html