58
1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Embed Size (px)

Citation preview

Page 1: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

1

Programação de Agentes em uma Linguagem Orientada a Objetos:

a Solução EOOPS

Abordagens de programaçãoEOOPS: Integração objetos-regras de produção

JEOPS

Page 2: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

2

Exemplos Atuais de Aplicações Complexas

Recuperação de Informação na Internet• Informação desorganizada e enorme

Comércio Eletrônico• Vários sites, produtos, preços, prazos, etc.

Jogos Eletrônicos• Realismo e oponentes competitivos

Page 3: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

3

Pontos em comum

Aplicações 3M • Muito grande (muitas linhas de código)• Muita gente• Muitos e variados serviços (componentes)

Serviços IA (dedução, indução, comunicação,...)• Modelo das preferências do usuário, coordenação de ações,

comportamento dirigido a objetivos,... tudo encapsulado no conceito de agente

Serviços não-IA• BD, GUI, WWW, Mobilidade, ...

Page 4: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

4

Consequentemente, é preciso...

Engenharia de Software• Metodologia, gerência e qualidade de software

Material humano qualificado• Cada vez mais escasso

Reutilização e integração de componentes (serviços)• Não “reinventar a roda”• Questão: como integrar e facilitar reutilização?

Page 5: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

5

Como implementar os agentes?

“Linguagens de IA”• Orientadas a agentes (ex. Agent0, Placa, 3APL)• Programação em lógica (prolog)

+ Oferecem os serviços básicos dos agentes

+ coesão

- Sistemas desenvolvidos não são facilmente integráveis

- Poucos componentes a reutilizar

AIOL (AI-OrientedLanguage)

ReasoningMechanism

Page 6: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

6

Como implementar os agentes?

Linguagens orientadas a objetos• Java, C++, ...

+ Facilitam a reutilização e integração de serviços

+ Engenharia de software

+ Mão de obra disponível

- Não oferecem de antemão as funcionalidades dos agentes (raciocínio)

AI-Oriented Language

HostLanguage

Page 7: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

7

Integração Objetos / Regras de produção

Por que não ter o melhor dos mundos?

Page 8: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

8

Como integrar dedução com OO?

OO dentro de IA• ex. ObjLog (fim dos anos 80), LIFE, ....

+ trata herança mais facilmente

- mesmos problemas de integração com outros sistemas e de pouca reutilização

AIOL

ReasoningMechanism

OO Mechanisms

Page 9: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

9

Como integrar dedução com OO?

IA e OO cooperando• ex. Jasper, JavaLog, InterProlog (fim anos 90)

+ técnica promissora mas...

- requer dupla habilidade de programação

- pode não ser eficiente ou viável

Host Language

Host Language

AI AIOL

ReasoningMechanism

Tempo de execução

Page 10: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

10

Como integrar dedução em OO?

IA dentro de OO • Abordagem 1: Tradução

• ex. Prolog Café , jProlog, Minerva and Jinni• “Caixa preta”

• Muito bom mas ainda requer dupla habilidade

Host Language

AI-Oriented Language

AI-Oriented Language

ReasoningMechanism

Translator

Page 11: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

11

Extended Host

Language-- - - ------ - - ----- - - - - ---- - - ------ - - - -

Knowledge Base

Como integrar dedução em OO?

IA dentro de OO • Abordagem 2: Novas Agent-Oriented (Hybrid)

Programming Languages• Primitivas redefinidas/extendidas!!!• ex. Jack e AgentJava

- excelentes (caixa branca) mas ainda incipientes....

Page 12: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

12

Como integrar dedução com OO?

IA dentro de OO • Abordagem 3: API

• ex. CLIPS, NéOpus, RAL/C++ (meados dos anos 80)

• Implementação mais usada: EOOPS • Embedded Object-Oriented Production Systems• Linguagem OO + Sistema de Produção

HostLanguage

HostLanguage

ReasoningMechanism

-- - - ------ - - ----- - - - - ---- - - ------ - - - -

Knowledge Base

Page 13: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

13

EOOPSEmbedded Object-Oriented Production Systems

Page 14: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

14

Lembrete sobre sistemas de produção

Conjunto de• Base de regras de produção• Memória de trabalho (base de fatos)• Conjunto de conflitos (das regras disparáveis)

Passos (encadeamento progressivo)• Unificação da condições com os fatos• Resolução de conflitos entre regras ativas• Execução das ações da regra

Page 15: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

15

Lembrete sobre sistemas de produção

Base de Regras

p1, p2, p3:Pai(p1,p2) Pai(p2,p3) Avo(p1,p3)

Base defatos

Pai(João, José)Pai(José, Marcos)

Motor de Inferência

Avo(João, Marcos)Avo(João, Marcos)

unificação

Page 16: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

16

Lembrete sobre sistemas de produção

Base de FatosBase de Regras unificação

Conjunto de Conflito

resoluçãode conflitos

Regra

Novos Fatos

execução

Ciclo

Obs: para não ter de re-testar a cada ciclo, só testa os fatos modificados (retirados, adicionados)

Page 17: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Mudança filosófica • Fatos: string => Objetos• Predicados: string => métodos dos objetos• Casamento estrutural => Casamento comportamental

(pertinência a classes + veracidade dos predicados)

Integração Objetos/Regras

Nome:Marcos

Nome:José

Nome:João

pai pai

Pessoa Pessoa Pessoa

Pai(João, José)Pai(José, Marcos)

p1, p2, p3: Pai(p1,p2) Pai(p2,p3) Avo(p1,p3)

Regra Avo Para todo objeto p1, p2 e p3 da classe Pessoa, SE p1.ehPai(p2); p2.ehPai(p3);ENTÃO

Page 18: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

18

Integração Objetos/Regras em EOOPS: características

Eficiência• RETE?

Expressividade• ordem lógica (0, 0+, 1) implementada?

Encadeamentos• Progressivo e/ou regressivo?

Estratégias de Controle• Flexível? Declarativa?

Uniformidade da integração

Page 19: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

19

Aspectos

• Sintático: como aparentam as regras?

• Semântico: quão respeitados são os conceitos da linguagem OO?

Vantagens

• Facilidade de uso

• Engenharia de Software: reutilização, modularidade, extensibilidade, ...

Uniformidade da Integração

Page 20: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

20

Uniformidade da Integração

Desvantagens: modified problem• Encapsulamento não permite ao motor de

inferência “ver” as mudanças em um objeto (fato)• ex. como saber se um objeto Pessoa passou a ter

avô sem precisar perguntá-lo (de novo)?

Page 21: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

21

Integração Objetos/Regras:Algumas Propostas

CLIPS

RAL/C++

NéOpus

JESS

JEOPS

SistemaLing.Progr.

C++

C++

Smalltalk

Java

Java

Unif.Integr.

-

+/-

+

-

+

Serviços

-

+

-

+/-

+

Eficiência

+/-

+

+/-

+/-

+/-

Encad.Resol.

Conflitos

-

-

+

-

+/-

Page 22: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

22

Regras CLIPS

Nem todos objetos são utilizados

As regras tem sintaxe própria (lisp-like)

(defclass Pessoa (is-a USER) (role concrete) (pattern-match reactive) (slot nome (create-accessor read-write)) (slot pai (create-accessor read-write)))

(defrule RegraAvo "O pai do pai de alguém é seu avô” ?a <- (object (is-a Pessoa) (nome ?nomeAvo)) ?p <- (object (is-a Pessoa) (nome ?nomePai) (pai ?a)) (object (is-a Pessoa) (nome ?nomeNeto) (pai ?p))=> (printout t ?nomeAvo “ é avô de ” ?nomeNeto crlf))

Page 23: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

23

CLIPS

Outras caraterísticas• COOL (CLIPS Object-Oriented Language) • Foi uma linguagem utilizada bem difundida (>

5.000 usuários)

Aplicações• medicina, multiagentes, helpdesk, aplicações

aeroespaciais, etc.

Sites• http://herzberg.ca.sandia.gov/jess/• http://www.ghg.net/clips/CLIPS.html

Page 24: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

24

RegraAvo { // O pai do pai de alguém é seu avô Avo (PessoaMT nome::NomeAvo) Pai (PessoaMT nome::NomePai pai==Avo) Neto (PessoaMT nome::nomeNeto pai==Pai)--> printf(“%s é avô de %s\n”, NomeAvo, NomeNeto);)

Regras RAL/C++

Utiliza classes C++, se indicado

Sintaxe um pouco mais próxima à de C++

class Pessoa { public: char nome[20]; Pessoa pai; ...}wmedef PessoaMT:Pessoa {}

Page 25: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

25

Regras NéOpus

RegraAvo “O pai do pai de alguém é seu avô” | Pessoa a p n | a = p pai. p = n pai.actions Transcript show: a nome, ‘ é avô de ’, n nome, cr.!

Toda classe Smalltalk

Regras com sintaxe de Smalltalk

Object subclass: #Pessoa instanceVariableNames: ‘nome pai’!

Page 26: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

26

ViraCasaca | Pessoa p|

(p timePreferido) nome = “Santa Cruz”.

Actions

| Time bom |

bom := Time new.

bom nome: “Sport”.

p timePreferido: bom.

P modified.

NéOpus

Pessoa

nomeidade

timePreferido(): TimetimePreferifo(t : Time)

time

Time

nome

nome(): Stringnome(n : String)

Page 27: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

27

NéOpuswww-poleia.lip6.fr/~fdp/NeOpus.html

Outras características• Bases de regra são representadas por classes

abstratas (herança!)

• Controle declarativo (via Metabase)

Aplicações• controle de aparelhos respiratórios, prova de

teoremas, transformação de modelo de dados, análise de harmônicas, Actalk,...

Infelizmente...• SmallTalk dançou!

Page 28: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

28

Pode usar classes Java, com restrições

Regras com sintaxe própria (lisp-like)

Regras JESS (CLIPS para Java)

(defrule RegraAvo "O pai do pai de alguém é seu avô” ?a <- (Pessoa (nome ?nomeAvo)) ?p <- (Pessoa (nome ?nomePai) (pai ?a)) ?n <- (Pessoa (nome ?nomeNeto) (pai ?p))=> (printout t ?nomeAvo “ é avô de ” ?nomeNeto crlf))

class Pessoa { private String nome; private Pessoa pai; ...}(defclass Pessoa Pessoa)

Page 29: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

29

JEOPS Java Embedded Object Production System

Made in Cin (1997/2-2000/1)http://www.di.ufpe.br/~jeops/

http://sourceforge.net/projects/jeops/

Page 30: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

30

JEOPS - Princípios

Java• 1001 serviços

Uniformidade total de integração• Reutilização de componentes• Engenharia de Software

Facilidade de uso• Fachada única de acesso

Page 31: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

31

JEOPS - Arquitetura

Geraentradas

Agente

Base deConhecimentos

Base deObjetos

Rete

Base Internade Regras

Conjunto de Conflito

Consulta

JoinNodeDecls 1 a 2

FilterNodeDecl 1

ClassFilterDecl 1

FilterNodeDecl 2

ClassFilterDecl 2

JoinNodeDecls 1 a 3

FilterNodeDecl 3

ClassFilterDecl 3

FinalNodeRegra n

JoinNodeDecl 1

JEOPS

flushassert run objects

-- - - ------ - - ----- - - - ----- - - ------ - - --

Knowledge Base

Assert = insere objetos na base de objetosObjects = recupera objetos da base de objetosFlush = limpa base de fatos

Page 32: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

32

Esquemade Compilação

JEOPSCompilation Environment

JEOPSCompilation Environment

JEOPSEngine

JEOPSRule Pre -Compiler

Rule Base(.rules)

Rule Base(.java)

Application(.java)

JAVACompiler

ByteCodes(.class)

JEOPSRuntime Environment

JEOPSRuntime Environment

JEOPSInference Engine

JEOPSCompilation Environment

JEOPSCompilation Environment

JEOPSEngine

JEOPSRule Pre -Compiler

Rule Base(.rules)

Rule Base(.java)

Application(.java)

JAVACompiler

ByteCodes(.class)

JEOPSRuntime Environment

JAVARuntime Environment

JEOPSInference Engine

• Mais simples de implentar

• Mais rápido de executar

Page 33: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

33

Regras JEOPS

Rule ::= "rule" "{" <Rule Body> "}"

Rule Body ::= <Declarations> <Local Declarations>? <Conditions> <Actions>

Declarations ::= "declarations" (<class name> <ident> ("," <ident>)* )*

Local Declarations ::= "localdecl" (<class name> <ident> "=" <expression>)*

Conditions ::= "conditions" (<expression>)*

Actions ::= (Action)+

Action ::= "assert" "(" <expression> ")" | "retract" "(" <expression> ")" | "modified" "(" <expression> ")" | <block>

Page 34: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

34

Definição das classes• Jogador, Time, Partida, ...

JEOPS - Exemplo de Utilização

class Time { private Jogador[] jogs; ...}

class Partida { private int etapa; private int tempo; ...}

class Jogador { private Time time; private int habilidade; ...}

class Goleiro extends Jogador {

...}

class Meia extends Jogador {

...}

class Atacante extends Jogador {

...}

Page 35: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

35

Criação das regras

JEOPS - Exemplo de Utilização

rule Retranca {

declarations

Partida p;

Jogador a;

localdecl

Time meuTime = a.getTime();

conditions

p.getEtapa() == 2; // Estamos no segundo tempo, ...

p.getPlacar(meuTime) >= p.getPlacarAdversario(meuTime);

meuTime.getCategoria() < // ... e eu sou ruim

p.getTimeAdversario(meuTime).getCategoria();

actions

a.vaParaDefesa(); // Então bola pro mato...

modified(a);

}

Page 36: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

36

Criação dos objetos

Execução do motor de inferência

JEOPS - Exemplo de Utilização

RegrasFutebol base = new RegrasFutebol();

Time camaroes = new Time(“Camaroes”);

base.assert(camaroes);

base.assert(new Atacante(camaroes, “MBoma”));

base.assert(new Lateral(camaroes, “Mila”));

base.assert(new Meia(camaroes, “Nkekessi”));

base.assert(new Goleiro(camaroes, “Silva”));

...

base.assert(new Partida(brasil, camaroes));

base.run();

Page 37: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

37

JEOPS - Outras Características

Pré-compilação de regras• Regras convertidas em classes Java• comando:

• java jeops.compiler.Main nome_do_arquivo.rules

Rete• Algoritmo eficiente de unificação

Aplicações• Administração de rede, Jogos interativos (NetMaze,

Enigmas, Guararapes), Recuperação de Informação, Geração de variações fonéticas

Page 38: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

38

JEOPS - Outras Características

Resolução de conflitos• Mecanismo flexível de definição de políticas

Classes• LRUConflictSet • MRUConflictSet • NaturalConflictSet • OneShotConflictSet • PriorityConflictSet

Page 39: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

39

Agentes x Base de Conhecimento?

Agentes estão dentro da base de objetos• Por exemplo jogadores estão dentro de uma base

sobre jogar futebol... • É como se fosse uma agente externo (a base do agente

“técnico”)

Cada agente tem sua BC (atributo)• Ciclo {• Percepções => base de objetos (da BC)• Run BC• Recupera da BC ações a serem executadas • Executa ações}

Page 40: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

40

Passos para o desenvolvimento de aplicações

1. Definir as classes• Atributos e métodos

2. Definir as regras• Interação entre os objetos da base

3. Voltar ao passo 1

4. Deixar a base de conhecimentos trabalhar...

5. Escolher estratégia de resolução de conflito

Page 41: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

41

Estudo de Caso com o JEOPS:Definindo estratégias de combate

Page 42: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

42

JEOPS - Estudo de Caso

O ambiente:• Vários jogadores, cada um

com sua civilização

• Cada civilização é composta por várias cidades, localizadas em diversos pontos do mapa

• Cada civilização tem um exército que pode ser usado para conquistar novas cidades ou defender as suas próprias cidades

Page 43: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso

Pensando nas classes...

Jogador

- nome: String- pais: String

Cidade

- nome: String- dono: Jogador- local: Localizacao

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacao

ataca(e: UnidCombate)anda(l: Localizacao)

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): int

Page 44: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso

Pensando nas regras...

rule defendeCidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; UnidCombate exercAdv; .....

Mas eu preciso usar o meu melhor soldado para atacar o inimigo!!! - Quem é este soldado?

Page 45: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Jogador

- nome: String- pais: String

Cidade

- nome: String- dono: Jogador- local: Localizacao

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacao

ataca(e:UnidCombate)anda(l:Localizacao)

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): intmelhorUnidade(): UnidCombate

JEOPS - Estudo de Caso

Repensando nas classes...

Page 46: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

rule defendeCidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; UnidCombate exercAdv; preconditions eu.getNome().equals(“Carlos”); cid.melhorUnidade() != null; // Ou eu estaria perdido! cid.getDono() == eu; exercAdv.getDono() != eu; // Ele realmente é meu adversário? cid.getLocal().dist(exercAdv.getLocal()) <= exercAdv.getMovim(); actions cid.melhorUnidade().ataca(exercAdv);}

Mas se eu estiver em tratado de paz com o meu adversário? Devo atacá-lo?Além disso, vamos tornar o código mais legível...

JEOPS - Estudo de Caso

Repensando nas regras...

Page 47: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Jogador

- nome: String- pais: String

emPaz(j:Jogador):bool

Cidade

- nome: String- dono: Jogador- local: Localizacao

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacao

ataca(e:UnidCombate)anda(l:Localizacao)

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): intmelhorUnidade(): UnidCombatepodeSerAlcançada (u:UnidCombate): boolean

JEOPS - Estudo de Caso

Repensando nas classes...

Page 48: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

rule defendeCidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; UnidCombate exercAdv; preconditions eu.getNome().equals(“Carlos”); cid.melhorUnidade() != null; // Ou eu estaria perdido! cid.getDono() == eu; exercAdv.getDono() != eu; // Ele realmente é meu adversário? cid.podeSerAlcançada(exercAdv); !eu.emPaz(exercAdv.getDono()); actions cid.melhorUnidade().ataca(exercAdv);}

JEOPS - Estudo de Caso

Repensando nas regras...

Page 49: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso E se a cidade estiver desprotegida?

• Mais uma regra para tratar deste caso!

rule defendeCidade2 { declarations Jogador eu; Cidade cid; UnidCombate exercAdv, meuExerc; preconditions eu.getNome().equals(“Carlos”); cid.melhorUnidade() == null; // Problemas a vista!!! cid.getDono() == eu; meuExerc.getDono() == eu; exercAdv.getDono() != eu; // Ele realmente é meu adversário? cid.podeSerAlcançada(exercAdv); cid.podeSerAlcançada(meuExerc); actions meuExerc.anda(cid.getLocal()); // Corra para proteger a cidade!}

Page 50: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso

Já sei me defender... quero agora ampliar meus domínios...

rule atacaCidade { // Se eu estiver perto de uma cidade inimiga, declarations // devo atacá-la!!! Jogador eu; Cidade cid; UnidCombate meuExerc; preconditions eu.getNome().equals(“Carlos”); cid.getDono() != eu; meuExerc.getDono() == eu; meuExerc.getAtaque() >= 3; // Não vou atacar com qualquer um cid.podeSerAlcançada(meuExerc); !eu.emPaz(cid.getDono()); actions meuExerc.ataca(cid.getLocal());}

Page 51: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Jogador

- nome: String- pais: String

emPaz(j:Jogador):bool

Cidade

- nome: String- dono: Jogador- local: Localizacao

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacao- ataque: int- defesa: int

ataca(e:UnidCombate)anda(l:Localizacao)

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): intmelhorUnidade(): UnidCombate

JEOPS - Estudo de Caso

Repensando nas classes...

Page 52: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso

Ou ainda eu posso criar uma nova cidade...

rule criaCidade { declarations Jogador eu; Settler meuExerc; preconditions eu.getNome().equals(“Carlos”); meuExerc.getDono() == eu; meuExerc.getLocal().haOceanoPorPerto(); meuExerc.getLocal().haComidaPorPerto(); !meuExerc.getLocal().haCidadePorPerto(); actions Cidade nova = new Cidade(eu); retract(meuExerc); assert(nova); }

A decisão de criar uma cidade pode requerer uma base de conhecimento à parte

Page 53: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): inthaComidaPerto() : booleanhaCidadePerto() : booleanhaOceanoPerto() : boolean

JEOPS - Estudo de Caso

Repensando nas classes...

Page 54: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

JEOPS - Estudo de Caso

Colocando tudo para funcionar...

Civ2.java:

public static void main(String[] args) {

KnowledgeBase kb = new KnowledgeBase(“regrasciv.rules”);

Jogador eu;

kb.insert(eu = new Jogador(“Carlos”, “Brasil”));

kb.insert(new Settler(eu, Localizacao.getRandom()));

...

kb.run();

}

Page 55: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

55

Considerações Finais sobre a Integração Objetos/Regras

Vantagens• Reutilização, modularidade, legibilidade,

extensibilidade, ...• Separação clara entre ontologia e regras (IA)• Facilidade de aprendizado (disponibilidade de

gente)

Page 56: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

56

Desvantagem: falta de metodologia • O que vai para as regras e o que vai para os

objetos?• Dica: procedimentos, conhecimento consolidado,

cálculos eficientes, serviços diversos (ex. BD, WWW) , ... => métodos

• Executa logo?• Parte ação das regras: agenda ou executa?

• Agente dentro e fora da KB?

Considerações Finais sobre a Integração Objetos/Regras

Page 57: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

57

Desvantagem: modificação • Detecção da modificação de objetos devido ao

encapsulamento• Modificação direta e transitiva....

Considerações Finais sobre a Integração Objetos/Regras

Page 58: 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção JEOPS

58

Referências

• Masini et al - Object Oriented Languages (Cap 9)• Proceedings of the OOPSLA’94 - workshop on Embedded Object-

Oriented Production Systems• Pachet F. - On the embeddability of production rules in object-

oriented languages - Journal of Object-Oriented Programming, vol 8, No. 4

• Jennings, Sycara & Wooldridge (1998), Roadmap on Agents Research and Development. Autonomous Agents and Amulti-Agent Systems, 1

• Figueira Filho, C. & Ramalho, G. (2000). Jeops – the java Embedded Object Production System. IBERAMIA-SBIA 2000. LNAI 1952, Berlin: Springer-Verlag

• Albuquerque, R., Guedes, P., Figueira Filho, C., Robin, J. & Ramalho, G. (2002) Embedding J2ME-based Inference Engine in Handheld Devices: The KEOPS Study Case. In Proceedings of 1st Workshop on Ubiquitous Agents on Embedded, Wearable, and Mobile Devices. In AAMAS’02, Bologna.