Programao de Agentes em uma Linguagem Orientada a

  • Slides: 58
Download presentation
Programação de Agentes em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de

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

Exemplos Atuais de Aplicações Complexas n Recuperação de Informação na Internet • Informação desorganizada

Exemplos Atuais de Aplicações Complexas n Recuperação de Informação na Internet • Informação desorganizada e enorme n Comércio Eletrônico • Vários sites, produtos, preços, prazos, etc. n Jogos Eletrônicos • Realismo e oponentes competitivos 2

Pontos em comum n Aplicações 3 M • Muito grande (muitas linhas de código)

Pontos em comum n Aplicações 3 M • Muito grande (muitas linhas de código) • Muita gente • Muitos e variados serviços (componentes) n 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 n Serviços não-IA • BD, GUI, WWW, Mobilidade, . . . 3

Consequentemente, é preciso. . . n Engenharia de Software • Metodologia, gerência e qualidade

Consequentemente, é preciso. . . n Engenharia de Software • Metodologia, gerência e qualidade de software n Material humano qualificado • Cada vez mais escasso n Reutilização e integração de componentes (serviços) • Não “reinventar a roda” • Questão: como integrar e facilitar reutilização? 4

Como implementar os agentes? n “Linguagens de IA” • Orientadas a agentes (ex. Agent

Como implementar os agentes? n “Linguagens de IA” • Orientadas a agentes (ex. Agent 0, Placa, 3 APL) • 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 AIOL - Poucos componentes a (AI-Oriented reutilizar Language) Reasoning Mechanism 5

Como implementar os agentes? n Linguagens orientadas a objetos • Java, C++, . .

Como implementar os agentes? n 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) Host AI-Oriented Language 6

Integração Objetos / Regras de produção Por que não ter o melhor dos mundos?

Integração Objetos / Regras de produção Por que não ter o melhor dos mundos? 7

Como integrar dedução com OO? n OO dentro de IA • ex. Obj. Log

Como integrar dedução com OO? n OO dentro de IA • ex. Obj. Log (fim dos anos 80), LIFE, . . + trata herança mais facilmente - mesmos problemas de integração com outros sistemas e de pouca reutilização AIOL Reasoning Mechanism OO Mechanisms 8

Como integrar dedução com OO? n IA e OO cooperando • ex. Jasper, Java.

Como integrar dedução com OO? n IA e OO cooperando • ex. Jasper, Java. Log, Inter. Prolog (fim anos 90) + técnica promissora mas. . . - requer dupla habilidade de programação - pode não ser eficiente ou viável Tempo de execução AI AIOL Host Language Reasoning Mechanism 9

Como integrar dedução em OO? n IA dentro de OO • Abordagem 1: Tradução

Como integrar dedução em OO? n IA dentro de OO • Abordagem 1: Tradução • ex. Prolog Café , j. Prolog, Minerva and Jinni • “Caixa preta” • Muito bom mas ainda requer dupla habilidade Host Language Translator AI-Oriented Language Reasoning Mechanism 10

Como integrar dedução em OO? n IA dentro de OO • Abordagem 2: Novas

Como integrar dedução em OO? n IA dentro de OO • Abordagem 2: Novas Agent-Oriented (Hybrid) Programming Languages • Primitivas redefinidas/extendidas!!! • ex. Jack e Agent. Java - excelentes (caixa branca) mas ainda incipientes. . Extended Host Language Knowledge Base -- - - ---- - - ----- - - 11

Como integrar dedução com OO? n IA dentro de OO • Abordagem 3: API

Como integrar dedução com OO? n IA dentro de OO • Abordagem 3: API • ex. CLIPS, NéOpus, RAL/C++ (meados anos 80) • Implementação mais usada: EOOPS • Embedded Object-Oriented Production Systems • Linguagem OO + Sistema de Produção 12

EOOPS Embedded Object-Oriented Production Systems 13

EOOPS Embedded Object-Oriented Production Systems 13

Lembrete sobre sistemas de produção n Conjunto de • Base de regras de produção

Lembrete sobre sistemas de produção n Conjunto de • Base de regras de produção • Memória de trabalho (base de fatos) • Conjunto de conflitos (das regras disparáveis) n 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 14

Lembrete sobre sistemas de produção Base de Regras Base de fatos Motor de Inferência

Lembrete sobre sistemas de produção Base de Regras Base de fatos Motor de Inferência unificação Pai(João, José) Pai(José, Marcos) p 1, p 2, p 3: Pai(p 1, p 2) Pai(p 2, p 3) Avo(p 1, p 3) Avo(João, Marcos) 15

Lembrete sobre sistemas de produção Base de Regras unificação Base de Fatos Conjunto de

Lembrete sobre sistemas de produção Base de Regras unificação Base de Fatos Conjunto de Conflito resolução de conflitos Ciclo Regra execução Novos Fatos Obs: para não ter de re-testar a cada ciclo, só testa os fatos modificados (retirados, adicionados) 16

Integração Objetos/Regras n Mudança filosófica • Fatos: string => Objetos • Predicados: string =>

Integração Objetos/Regras n Mudança filosófica • Fatos: string => Objetos • Predicados: string => métodos objetos • Casamento estrutural => Casamento comportamental (pertinência a classes + veracidade dos predicados) p 1, p 2, p 3: Pai(p 1, p 2) Pai(p 2, p 3) Avo(p 1, p 3) Pai(João, José) Pai(José, Marcos) Nome: Marcos Pessoa pai Nome: José Pessoa pai Nome: João Pessoa Regra Avo Para todo objeto p 1, p 2 e p 3 da classe Pessoa, SE p 1. eh. Pai(p 2); p 2. eh. Pai(p 3); ENTÃO 17

Integração Objetos/Regras em EOOPS: características n Eficiência • RETE? n Expressividade • ordem lógica

Integração Objetos/Regras em EOOPS: características n Eficiência • RETE? n Expressividade • ordem lógica (0, 0+, 1) implementada? n Encadeamentos • Progressivo e/ou regressivo? n Estratégias de Controle • Flexível? Declarativa? n Uniformidade da integração 18

Uniformidade da Integração n Aspectos • Sintático: como aparentam as regras? • Semântico: quão

Uniformidade da Integração n Aspectos • Sintático: como aparentam as regras? • Semântico: quão respeitados são os conceitos da linguagem OO? n Vantagens • Facilidade de uso • Engenharia de Software: reutilização, modularidade, extensibilidade, . . . 19

Uniformidade da Integração n Desvantagens: modified problem • Encapsulamento não permite ao motor de

Uniformidade da Integração n 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)? 20

Integração Objetos/Regras: Algumas Propostas Sistema Ling. Progr. CLIPS C++ - - +/- - RAL/C++

Integração Objetos/Regras: Algumas Propostas Sistema Ling. Progr. CLIPS C++ - - +/- - RAL/C++ +/- + + - +/- + NéOpus Smalltalk Unif. Resol. Serviços Eficiência Encad. Integr. Conflitos JESS Java - +/- - JEOPS Java + + +/- 21

Regras CLIPS n Nem todos objetos são utilizados (defclass Pessoa (is-a USER) (role concrete)

Regras CLIPS n Nem todos objetos são utilizados (defclass Pessoa (is-a USER) (role concrete) (pattern-match reactive) (slot nome (create-accessor read-write)) (slot pai (create-accessor read-write))) n As regras tem sintaxe própria (lisp-like) (defrule Regra. Avo "O pai do pai de alguém é seu avô” ? a <- (object (is-a Pessoa) (nome ? nome. Avo)) ? p <- (object (is-a Pessoa) (nome ? nome. Pai) (pai ? a)) (object (is-a Pessoa) (nome ? nome. Neto) (pai ? p)) => (printout t ? nome. Avo “ é avô de ” ? nome. Neto crlf) ) 22

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

CLIPS n Outras caraterísticas • COOL (CLIPS Object-Oriented Language) • Foi uma linguagem utilizada bem difundida (> 5. 000 usuários) n Aplicações • medicina, multiagentes, helpdesk, aplicações aeroespaciais, etc. n Sites • http: //herzberg. ca. sandia. gov/jess/ • http: //www. ghg. net/clips/CLIPS. html 23

Regras RAL/C++ n Utiliza classes C++, se indicado class Pessoa { public: char nome[20];

Regras RAL/C++ n Utiliza classes C++, se indicado class Pessoa { public: char nome[20]; Pessoa pai; . . . } wmedef Pessoa. MT: Pessoa {} n Sintaxe um pouco mais próxima à de C++ Regra. Avo { // O pai do pai de alguém é seu avô Avo (Pessoa. MT nome: : Nome. Avo) Pai (Pessoa. MT nome: : Nome. Pai pai==Avo) Neto (Pessoa. MT nome: : nome. Neto pai==Pai) --> printf(“%s é avô de %sn”, Nome. Avo, Nome. Neto); ) 24

Regras NéOpus n Toda classe Smalltalk Object subclass: #Pessoa instance. Variable. Names: ‘nome pai’!

Regras NéOpus n Toda classe Smalltalk Object subclass: #Pessoa instance. Variable. Names: ‘nome pai’! n Regras com sintaxe de Smalltalk Regra. Avo “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. ! 25

NéOpus n Vira. Casaca | Pessoa p| (p time. Preferido) nome = “Santa Cruz”.

NéOpus n Vira. Casaca | Pessoa p| (p time. Preferido) nome = “Santa Cruz”. Actions | Time bom | bom : = Time new. Pessoa bom nome: “Sport”. nome p time. Preferido: bom. idade P modified. time. Preferido(): Time time. Preferifo(t : Time) time Time nome(): String nome(n : String) 26

NéOpus www-poleia. lip 6. fr/~fdp/Ne. Opus. html n Outras características • Bases de regra

NéOpus www-poleia. lip 6. fr/~fdp/Ne. Opus. html n Outras características • Bases de regra são representadas por classes abstratas (herança!) • Controle declarativo (via Metabase) n Aplicações • controle de aparelhos respiratórios, prova de teoremas, transformação de modelo de dados, análise de harmônicas, Actalk, . . . n Infelizmente. . . • Small. Talk dançou! 27

Regras JESS (CLIPS para Java) n Pode usar classes Java, com restrições class Pessoa

Regras JESS (CLIPS para Java) n Pode usar classes Java, com restrições class Pessoa { private String nome; private Pessoa pai; . . . } (defclass Pessoa) n Regras com sintaxe própria (lisp-like) (defrule Regra. Avo "O pai do pai de alguém é seu avô” ? a <- (Pessoa (nome ? nome. Avo)) ? p <- (Pessoa (nome ? nome. Pai) (pai ? a)) ? n <- (Pessoa (nome ? nome. Neto) (pai ? p)) => (printout t ? nome. Avo “ é avô de ” ? nome. Neto crlf) ) 28

JEOPS Java Embedded Object Production System Made in Cin (1997/2 -2000/1) http: //www. di.

JEOPS Java Embedded Object Production System Made in Cin (1997/2 -2000/1) http: //www. di. ufpe. br/~jeops/ http: //sourceforge. net/projects/jeops/ 29

JEOPS - Princípios n Java • 1001 serviços n Uniformidade total de integração •

JEOPS - Princípios n Java • 1001 serviços n Uniformidade total de integração • Reutilização de componentes • Engenharia de Software n Facilidade de uso • Fachada única de acesso 30

JEOPS - Arquitetura Agente assert run objects flush JEOPS Rete Knowledge Base -- -

JEOPS - Arquitetura Agente assert run objects flush JEOPS Rete Knowledge Base -- - - ---- - - -- Gera entradas Conjunto de Conflito Consulta Base Interna de Regras Base de Objetos Base de Conhecimentos Assert = insere objetos na base de objetos Objects = recupera objetos da base de objetos Flush = limpa base de fatos 31

JEOPS Compilation. Environment Rule Base JEOPS Rule Base (. rules) Rule Pre-Compiler (. java)

JEOPS Compilation. Environment Rule Base JEOPS Rule Base (. rules) Rule Pre-Compiler (. java) Esquema de Compilação • Mais simples de implentar • Mais rápido de executar JEOPS Engine Application JAVA (. java) Compiler Byte. Codes (. class) JAVA JEOPS Runtime. Environment JEOPS Inference Engine 32

Regras JEOPS n Rule : : = "rule" "{" <Rule Body> "}" n Rule

Regras JEOPS n Rule : : = "rule" "{" <Rule Body> "}" n Rule Body : : = <Declarations> <Local Declarations>? <Conditions> <Actions> n Declarations : : = "declarations" (<class name> <ident> (", " <ident>)* )* n Local Declarations : : = "localdecl" (<class name> <ident> "=" <expression>)* n Conditions : : = "conditions" (<expression>)* n Actions : : = (Action)+ n Action : : = "assert" "(" <expression> ")" | "retract" "(" <expression> ")" | "modified" "(" <expression> ")" | <block> 33

JEOPS - Exemplo de Utilização n Definição das classes • Jogador, Time, Partida, .

JEOPS - Exemplo de Utilização n Definição das classes • Jogador, Time, Partida, . . . class Jogador { private Time time; private int habilidade; . . . } class Partida { private int etapa; private int tempo; . . . } class Time { private Jogador[] jogs; . . . } class Goleiro extends Jogador {. . . } class Atacante extends Jogador {. . . } class Meia extends Jogador {. . . } 34

JEOPS - Exemplo de Utilização n Criação das regras rule Retranca { declarations Partida

JEOPS - Exemplo de Utilização n Criação das regras rule Retranca { declarations Partida p; Jogador a; localdecl Time meu. Time = a. get. Time(); conditions p. get. Etapa() == 2; // Estamos no segundo tempo, . . . p. get. Placar(meu. Time) >= p. get. Placar. Adversario(meu. Time); meu. Time. get. Categoria() < //. . . e eu sou ruim p. get. Time. Adversario(meu. Time). get. Categoria(); actions a. va. Para. Defesa(); // Então bola pro mato. . . modified(a); } 35

JEOPS - Exemplo de Utilização n Criação dos objetos Regras. Futebol base = new

JEOPS - Exemplo de Utilização n Criação dos objetos Regras. Futebol base = new Regras. Futebol(); 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)); n Execução do motor de inferência base. run(); 36

JEOPS - Outras Características n Pré-compilação de regras • Regras convertidas em classes Java

JEOPS - Outras Características n Pré-compilação de regras • Regras convertidas em classes Java • comando: • java jeops. compiler. Main nome_do_arquivo. rules n Rete • Algoritmo eficiente de unificação n Aplicações • Administração de rede, Jogos interativos (Net. Maze, Enigmas, Guararapes), Recuperação de Informação, Geração de variações fonéticas 37

JEOPS - Outras Características n Resolução de conflitos • Mecanismo flexível de definição de

JEOPS - Outras Características n Resolução de conflitos • Mecanismo flexível de definição de políticas n Classes • • • LRUConflict. Set MRUConflict. Set Natural. Conflict. Set One. Shot. Conflict. Set Priority. Conflict. Set 38

Agentes x Base de Conhecimento? n Agentes estão dentro da base de objetos •

Agentes x Base de Conhecimento? n 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”) n 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} 39

Passos para o desenvolvimento de aplicações 1. Definir as classes • Atributos e métodos

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 40

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

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

JEOPS - Estudo de Caso n O ambiente: • Vários jogadores, cada um com

JEOPS - Estudo de Caso n 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 42

JEOPS - Estudo de Caso n Pensando nas classes. . . Jogador - nome:

JEOPS - Estudo de Caso n Pensando nas classes. . . Jogador - nome: String - pais: String Cidade - nome: String - dono: Jogador - local: Localizacao Unid. Combate - nome: String - dono: Jogador - movim: int - local: Localizacao - linha: int - coluna: int dist(l: Localizacao): int ataca(e: Unid. Combate) anda(l: Localizacao) 43

JEOPS - Estudo de Caso n Pensando nas regras. . . rule defende. Cidade

JEOPS - Estudo de Caso n Pensando nas regras. . . rule defende. Cidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; Unid. Combate exerc. Adv; . . . Mas eu preciso usar o meu melhor soldado para atacar o inimigo!!! - Quem é este soldado? 44

JEOPS - Estudo de Caso n Jogador - nome: String - pais: String Repensando

JEOPS - Estudo de Caso n Jogador - nome: String - pais: String Repensando nas classes. . . Cidade - nome: String - dono: Jogador - local: Localizacao melhor. Unidade(): Unid. Combate - nome: String - dono: Jogador - movim: int - local: Localizacao - linha: int - coluna: int dist(l: Localizacao): int ataca(e: Unid. Combate) anda(l: Localizacao) 45

JEOPS - Estudo de Caso n Repensando nas regras. . . rule defende. Cidade

JEOPS - Estudo de Caso n Repensando nas regras. . . rule defende. Cidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; Unid. Combate exerc. Adv; preconditions eu. get. Nome(). equals(“Carlos”); cid. melhor. Unidade() != null; // Ou eu estaria perdido! cid. get. Dono() == eu; exerc. Adv. get. Dono() != eu; // Ele realmente é meu adversário? cid. get. Local(). dist(exerc. Adv. get. Local()) <= exerc. Adv. get. Movim(); actions cid. melhor. Unidade(). ataca(exerc. Adv); } 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. . . 46

JEOPS - Estudo de Caso n Repensando nas classes. . . Jogador - nome:

JEOPS - Estudo de Caso n Repensando nas classes. . . Jogador - nome: String - pais: String em. Paz(j: Jogador): bool Cidade - nome: String - dono: Jogador - local: Localizacao Unid. Combate - nome: String - dono: Jogador - movim: int - local: Localizacao melhor. Unidade(): Unid. Combate ataca(e: Unid. Combate) pode. Ser. Alcançada anda(l: Localizacao) (u: Unid. Combate): boolean Localizacao - linha: int - coluna: int dist(l: Localizacao): int 47

JEOPS - Estudo de Caso n Repensando nas regras. . . rule defende. Cidade

JEOPS - Estudo de Caso n Repensando nas regras. . . rule defende. Cidade { // Se houver algum inimigo por perto, declarations // é melhor atacá-lo primeiro Jogador eu; Cidade cid; Unid. Combate exerc. Adv; preconditions eu. get. Nome(). equals(“Carlos”); cid. melhor. Unidade() != null; // Ou eu estaria perdido! cid. get. Dono() == eu; exerc. Adv. get. Dono() != eu; // Ele realmente é meu adversário? cid. pode. Ser. Alcançada(exerc. Adv); !eu. em. Paz(exerc. Adv. get. Dono()); actions cid. melhor. Unidade(). ataca(exerc. Adv); } 48

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

JEOPS - Estudo de Caso n E se a cidade estiver desprotegida? • Mais uma regra para tratar deste caso! rule defende. Cidade 2 { declarations Jogador eu; Cidade cid; Unid. Combate exerc. Adv, meu. Exerc; preconditions eu. get. Nome(). equals(“Carlos”); cid. melhor. Unidade() == null; // Problemas a vista!!! cid. get. Dono() == eu; meu. Exerc. get. Dono() == eu; exerc. Adv. get. Dono() != eu; // Ele realmente é meu adversário? cid. pode. Ser. Alcançada(exerc. Adv); cid. pode. Ser. Alcançada(meu. Exerc); actions meu. Exerc. anda(cid. get. Local()); // Corra para proteger a cidade! } 49

JEOPS - Estudo de Caso n Já sei me defender. . . quero agora

JEOPS - Estudo de Caso n Já sei me defender. . . quero agora ampliar meus domínios. . . rule ataca. Cidade { // Se eu estiver perto de uma cidade inimiga, declarations // devo atacá-la!!! Jogador eu; Cidade cid; Unid. Combate meu. Exerc; preconditions eu. get. Nome(). equals(“Carlos”); cid. get. Dono() != eu; meu. Exerc. get. Dono() == eu; meu. Exerc. get. Ataque() >= 3; // Não vou atacar com qualquer um cid. pode. Ser. Alcançada(meu. Exerc); !eu. em. Paz(cid. get. Dono()); actions meu. Exerc. ataca(cid. get. Local()); } 50

JEOPS - Estudo de Caso n Repensando nas classes. . . Jogador - nome:

JEOPS - Estudo de Caso n Repensando nas classes. . . Jogador - nome: String - pais: String em. Paz(j: Jogador): bool Cidade Unid. Combate - nome: String - dono: Jogador - local: Localizacao - nome: String - dono: Jogador - movim: int - local: Localizacao melhor. Unidade(): Unid. Combate - ataque: int - defesa: int Localizacao - linha: int - coluna: int dist(l: Localizacao): int ataca(e: Unid. Combate) anda(l: Localizacao) 51

JEOPS - Estudo de Caso n Ou ainda eu posso criar uma nova cidade.

JEOPS - Estudo de Caso n Ou ainda eu posso criar uma nova cidade. . . rule cria. Cidade { A decisão de criar uma cidade declarations pode requerer uma base de Jogador eu; conhecimento à parte Settler meu. Exerc; preconditions eu. get. Nome(). equals(“Carlos”); meu. Exerc. get. Dono() == eu; meu. Exerc. get. Local(). ha. Oceano. Por. Perto(); meu. Exerc. get. Local(). ha. Comida. Por. Perto(); !meu. Exerc. get. Local(). ha. Cidade. Por. Perto(); actions Cidade nova = new Cidade(eu); retract(meu. Exerc); assert(nova); } 52

JEOPS - Estudo de Caso n Repensando nas classes. . . Localizacao - linha:

JEOPS - Estudo de Caso n Repensando nas classes. . . Localizacao - linha: int - coluna: int dist(l: Localizacao): int ha. Comida. Perto() : boolean ha. Cidade. Perto() : boolean ha. Oceano. Perto() : boolean 53

JEOPS - Estudo de Caso n Colocando tudo para funcionar. . . Civ 2.

JEOPS - Estudo de Caso n Colocando tudo para funcionar. . . Civ 2. java: public static void main(String[] args) { Knowledge. Base kb = new Knowledge. Base(“regrasciv. rules”); Jogador eu; kb. insert(eu = new Jogador(“Carlos”, “Brasil”)); kb. insert(new Settler(eu, Localizacao. get. Random())); . . . kb. run(); } 54

Considerações Finais sobre a Integração Objetos/Regras n Vantagens • Reutilização, modularidade, legibilidade, extensibilidade, .

Considerações Finais sobre a Integração Objetos/Regras n Vantagens • Reutilização, modularidade, legibilidade, extensibilidade, . . . • Separação clara entre ontologia e regras (IA) • Facilidade de aprendizado (disponibilidade de gente) 55

Considerações Finais sobre a Integração Objetos/Regras n Desvantagem: falta de metodologia • O que

Considerações Finais sobre a Integração Objetos/Regras n 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? 56

Considerações Finais sobre a Integração Objetos/Regras n Desvantagem: modificação • Detecção da modificação de

Considerações Finais sobre a Integração Objetos/Regras n Desvantagem: modificação • Detecção da modificação de objetos devido ao encapsulamento • Modificação direta e transitiva. . 57

Referências • Masini et al - Object Oriented Languages (Cap 9) • Proceedings of

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 objectoriented 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 J 2 ME-based Inference Engine in Handheld Devices: The KEOPS Study Case. In Proceedings of 1 st Workshop on Ubiquitous Agents on Embedded, Wearable, and Mobile Devices. In AAMAS’ 02, Bologna. 58