1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de...

61
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

Transcript of 1 Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de...

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 e pouca gente- Metodologia?

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

LanguageAI-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 HostLanguage -- - - ----

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

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

Regras de Produção

Representam conhecimento com pares condição-ação• Se condição (ou premissa ou antecedente) ocorre então ação (resultado, conclusão ou conseqüente)

deverá ocorrer.

Regras de produção produzem novos fatos a partir dos fatos e regras da BC. • Esses novos fatos passam a fazer parte da BC

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.

Regras de Produção

Formalismo mais simples, procedimental e popular

animal(x)^estimação(x)^pequeno(x) => doméstico(x)

premissas conseqüente

Base de fatos e base de regras

animal(Rex),estimação(Rex),pequeno(Rex)

Mecanismo de inferência: São produzidos novos fatos instanciando fatos existentes nas regras (encadeamento para a frente)

Estratégia de controle: resolução de conflito

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.

Sistemas de Produção

Fatos: x, y

Regras: x & y => p

Encadeamento para a frente (Forward chaining)• Dados x e y, derive então p

Encadeamento para trás (Backward chaining)• p é verdade? Então verificarei x e y.• Prolog

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

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

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

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

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

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

Integração Objetos/Regras:Algumas Propostas

CLIPS

RAL/C++

NéOpus

JESS

JEOPS

Sistema Ling.Progr.

C++

C++

Smalltalk

Java

Java

Unif.Integr.

-

+/-

+

-

+

Serviços

-

+

-

+/-

+

Eficiência

+/-

+

+/-

+/-

+/-

Encad. Resol.Conflitos

-

-

+

-

+/-

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

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

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

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

ViraCasaca | Pessoa p| (p timePreferido) nome = “Santa Cruz”.Actions | Time bom | bom := Time new. bom nome: “Sport”. p timePreferido: bom. P modified.

NéOpus

Pessoanomeidade

timePreferido(): TimetimePreferifo(t : Time)

time

Timenome

nome(): Stringnome(n : String)

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

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

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

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

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

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

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 implementar

• Mais rápido de executar

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

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

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

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

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

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

JEOPS - Outras Características

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

Classes• LRUConflictSet • MRUConflictSet • NaturalConflictSet • OneShotConflictSet • PriorityConflictSet

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

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. Escolher estratégia de resolução de conflito

5. Deixar a base de conhecimentos trabalhar...

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.

43

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

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.

44

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

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: Localizacaoataca(e: UnidCombate)anda(l: Localizacao)

Localizacao

- linha: int- coluna: int

dist(l:Localizacao): int

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.

JEOPS - Estudo de Caso

Pensando nas regras...

rule defendeCidade { // Se houver algum inimigo por perto da declarations //minha cidade, é 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 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

Cidade

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

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacaoataca(e:UnidCombate)anda(l:Localizacao)

Localizacao

- linha: int- coluna: int

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

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

Jogador

- nome: String- pais: String

emPaz(j:Jogador):bool

Cidade

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

UnidCombate

- nome: String- dono: Jogador- movim: int- local: Localizacaoataca(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 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.

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

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

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

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: intataca(e:UnidCombate)anda(l:Localizacao)

Localizacao

- linha: int- coluna: int

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

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

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

Localizacao

- linha: int- coluna: int

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

JEOPS - Estudo de Caso

Repensando nas classes...

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.

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

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

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 59: 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.

59

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 60: 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.

60

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 61: 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.

61

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.