A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

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

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

3 3 Pontos em comum n Aplicações 3M 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,...

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

5 5 Como implementar os agentes? n “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-Oriented Language) Reasoning Mechanism

6 6 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) AI-Oriented Language Host Language

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

8 8 Como integrar dedução com OO? n 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 Reasoning Mechanism OO Mechanisms

9 9 Como integrar dedução com OO? n 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 Reasoning Mechanism Tempo de execução

10 10 Como integrar dedução em OO? n 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 Reasoning Mechanism Translator

11 11 Extended Host Language -------- ---- ------- -------- ------ Knowledge Base 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 AgentJava - excelentes (caixa branca) mas ainda incipientes....

12 12 Como integrar dedução com OO? n 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

13 13 EOOPS Embedded Object-Oriented Production Systems

14 14 Lembrete sobre sistemas de produção n Conjunto de Base de regras de produção 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

15 Regras de Produção n 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. n Regras de produção produzem novos fatos a partir dos fatos e regras da BC. Esses novos fatos passam a fazer parte da BC

16 Regras de Produção n Formalismo mais simples, procedimental e popular animal(x)^estimação(x)^pequeno(x) => doméstico(x) premissas conseqüente n Base de fatos e base de regras animal(Rex),estimação(Rex),pequeno(Rex) n Mecanismo de inferência: São produzidos novos fatos instanciando fatos existentes nas regras (encadeamento para a frente) n Estratégia de controle: resolução de conflito

17 Sistemas de Produção Fatos: x, y Regras: x & y => p n Encadeamento para a frente (Forward chaining) Dados x e y, derive então p n Encadeamento para trás (Backward chaining) p é verdade? Então verificarei x e y. Prolog

18 18 Lembrete sobre sistemas de produção Base de Regras  p1, p2, p3: Pai(p1,p2)  Pai(p2,p3)  Avo(p1,p3) Base de fatos Pai(João, José) Pai(José, Marcos) Motor de Inferência Avo(João, Marcos) unificação

19 19 Lembrete sobre sistemas de produção Base de FatosBase de Regras unificação Conjunto de Conflito resolução de 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)

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

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

22 22 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,... Uniformidade da Integração

23 23 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)?

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

25 25 Regras CLIPS n Nem todos objetos são utilizados n 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) )

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

27 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++ n Utiliza classes C++, se indicado n Sintaxe um pouco mais próxima à de C++ class Pessoa { public: char nome[20]; Pessoa pai;... } wmedef PessoaMT:Pessoa {}

28 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.! n Toda classe Smalltalk n Regras com sintaxe de Smalltalk Object subclass: #Pessoa instanceVariableNames: ‘nome pai’!

29 29 n 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 nome idade timePreferido(): Time timePreferifo(t : Time) time Time nome nome(): String nome(n : String)

30 30 NéOpus www-poleia.lip6.fr/~fdp/NeOpus.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... SmallTalk dançou!

31 31 n Pode usar classes Java, com restrições n 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)

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

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

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

35 35 Esquema de Compilação JEOPS Compilation Environment JEOPS Compilation Environment JEOPS Engine JEOPS Rule Pre-Compiler Rule Base (.rules) Rule Base (.java) Application (.java) JAVA Compiler ByteCodes (.class) JEOPS Runtime Environment JEOPS Runtime Environment JEOPS Inference Engine JEOPS Compilation Environment JEOPS Compilation Environment JEOPS Engine JEOPS Rule Pre-Compiler Rule Base (.rules) Rule Base (.java) Application (.java) JAVA Compiler ByteCodes (.class) JEOPS Runtime Environment JAVA Runtime Environment JEOPS Inference Engine Mais simples de implementar Mais rápido de executar

36 36 Regras JEOPS n Rule ::= "rule" "{" "}" n Rule Body ::= ? n Declarations ::= "declarations" ( ("," )* )* n Local Declarations ::= "localdecl" ( "=" )* n Conditions ::= "conditions" ( )* n Actions ::= (Action)+ n Action ::= "assert" "(" ")" | "retract" "(" ")" | "modified" "(" ")" |

37 37 n 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 {... }

38 38 n 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); }

39 39 n Criação dos objetos n 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();

40 40 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 (NetMaze, Enigmas, Guararapes), Recuperação de Informação, Geração de variações fonéticas

41 41 JEOPS - Outras Características n Resolução de conflitos Mecanismo flexível de definição de políticas n Classes LRUConflictSet MRUConflictSet NaturalConflictSet OneShotConflictSet PriorityConflictSet

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

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

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

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

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

47 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 melhorUnidade(): UnidCombate JEOPS - Estudo de Caso n Repensando nas classes...

48 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 n Repensando nas regras...

49 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): int melhorUnidade(): UnidCombate podeSerAlcançada (u:UnidCombate): boolean JEOPS - Estudo de Caso n Repensando nas classes...

50 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 n Repensando nas regras...

51 JEOPS - Estudo de Caso n 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! }

52 JEOPS - Estudo de Caso n 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()); }

53 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): int melhorUnidade(): UnidCombate JEOPS - Estudo de Caso n Repensando nas classes...

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

55 Localizacao - linha: int - coluna: int dist(l:Localizacao): int haComidaPerto() : boolean haCidadePerto() : boolean haOceanoPerto() : boolean JEOPS - Estudo de Caso n Repensando nas classes...

56 JEOPS - Estudo de Caso n 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(); }

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

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

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

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

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


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google