330 likes | 429 Views
Comunicação entre Agentes em Ambientes Distribuídos: O Modelo peer-to-peer. Prof. Fred Freitas – fred@cin.ufpe.br Mestrado em Informática Universidade Federal de Pernambuco. Roteiro. Comunicação Cliente-Servidor Requisitos de comunicação de agentes cognitivos
E N D
Comunicação entre Agentes em Ambientes Distribuídos: O Modelo peer-to-peer Prof. Fred Freitas – fred@cin.ufpe.br Mestrado em Informática Universidade Federal de Pernambuco
Roteiro • Comunicação Cliente-Servidor • Requisitos de comunicação de agentes cognitivos • Comunicação em Nível de Conhecimento • Vantagens do Modelo peer-to-peer • A Linguagem de comunicação KQML • A Linguagem Arcol da FIPA • Conseqüências para Integração Objetos-Regras • O pacote JATLite - Como usá-lo • Exemplos
Motivações de Multiagentes em SD • Conjuntura: Grandes redes heterogêneas abertas (Internet) • Problemas grandes, complexos e interdependentes • Recuperação de informações • Mineração de Dados • Mediação • Necessidade de concorrência • Domínios distintos • Comércio eletrônico • Negociação • Padrôes para diálogos • Sistemas abertos pedem uma comunicação dinamicamente estabelecida e semanticamente contextualizada entre diferentes entidades de softwares
O Modelo de Comunicação Cliente-Servidor • Os servidores provêem os serviços, os clientes os usam • mestre-escravo • Os serviços estão acessíveis via RPCs (Remote Procedure Calls) • RPCs executam métodos de objetos remotos cujas assinaturas foram mapeadas para ORBs (Object Request Brokers) e estão acessíveis pela Internet Msg pedindo exec do método (parâmetros) Resposta Cliente Servidor ORB
Vantagens: Rapidez Adequados a sistemas de tempo real e SMAs reativos Tranparência de execução Desvantagens Vocabulário: apenas os parãmetros dos métodos Faltam: Expressividade Intenção Contexto Iniciativa Dificultam a implementação de autonomia, e cooperação dinâmica Prós e Contras
Comunicação em Nível de Conhecimento • Baseada na Teoria dos Atos de Fala [Austin 62], que modela a comunicação humana • Os atos de fala expressam as intenções dos agentes • assertivos (informar), diretivos (pedir ou consultar), comissivos (prometer ou comprometer-se), proibitivos, declarativos (causar eventos para o próprio comunicador) e expressivos (emoções). • Princípio Huhns-Singh para agentes [Huhns & Singh 97] • Um agente deve mudar de comportamento quando outro agente entra no ambiente
Confiável: Msgs explícitas e legível por pessoas Expressiva Mensagens complexas Contexto Intenções Compreensível: Mensagens escritas num formalismo lógico, entendido por ambos os agentes Tradução entre formalismos Semântica clara: Vocabulário comum (ontologia) entre os agentes Níveis: Ato de fala (intenção) Contexto (ontologia) Esquema de cooperação contract-net, etc. Conteúdo (numa lógica) Dados da mensagem Remetente, destino, etc Requisitos
O Vocabulário Comum: Ontologias • Conceitualização de uma área de conhecimento [Gruber 95] • Conjuntos de conceitos, definições, relações, axiomas e restrições sobre a área
Tabela 3. Evolução das arquiteturas de comunicação distribuídas (baseado em [Huhns & Singh 97b]). Evolução de arquiteturas de comunicação
Recursos de ACLs • Serviço de registro de agentes • Serviço de conexão de agentes • Serviço de nomes e roteamento para agentes • Transparência de localização • Roteamento e enfileiramento de mensagensaté quando o agente destinatário está desconectado • Parsers para mensagens, brokering (facilitação) and broadcasting • Independente da linguagem de conteúdo das mensagens • Suporte a vários protocolos: TCP/IP, SMTP, FTP, POP3 e HTTP, para aplicações e applets. • Referências a mensagens anteriores (:in-reply-to)
KQML - Knowledge Query and Manipulation Language • KQML é uma linguagem de comunicação que dá suporte a agentes na identificação, conexão e troca de informação com outros agentes. • Mensagens KQML não enxergam o conteúdo das mensagens que elas transportam • Categorias dos atos de fala : • Conversação - trocas de informação e conhecimento entre dois agentes (ask-if,ask-all;tell,advertise, insert, subscribe, recruiting) • Intervenção - intervenção da conversação (error,sorry); • Facilitação e Rede - permitem que agentes achem outros agentes que podem processar suas consultas (register, unregister, transport-address,forward,broadcast,broker-one,recommend-one)
Comunicação via KQML Exemplo : O facilitador recebe a seguinte mensagem : (broker-one :sender C :receiver facilitador :reply-with id3 :language KQML :ontology kqml-ontology :content (ask-all :sender C :reply-with id4 :language Prolog :ontology Campeonato Brasileiro :content (Campeao(Flamengo,Y))))
Comunicação via KQML • Exemplo (cont.) :E então, o agente facilitador envia para o agente C : (forward :from A :sender facilitador :receiver C :in-reply-to id3 :reply-with id6 :language KQML :ontology kqml-ontology :content (tell :receiver C :language Prolog :ontology C. Brasileiro :content (Campeao(Flamengo, 1980), ... ,Campeao(Flamengo,1992))))
Exemplo de Comunicação em KQML (ask-all :sender CFP-Agent :receiver PPR-Agent :reply-with id1 :language JessTab :ontology Science :content (object (is-a Link) (URL ?u) (anchor ?a&:(occurs [call-for-papers] ?a))))
Ex. de Comunicação em KQML (cont.) (tell :sender PPR-Agent :receiver CFP-Agent :in-reply-to id1 :reply-with id2 :language JessTab :ontology Science :content (object (is-a Link) (URL “http://lcn2002.cs.bonn.edu”) (anchor “ IEEE Conference on Local Computer Networks (LCN 2002)”)))
Informando conceitos de um caso... (inform :sender cfp :receiver ppr :language JessTab :ontology Science :content ([ppr_00008] of Case (Description "cfp suggestions") (Concepts [Call-for-participation] [annual] [conference] [Call-for-papers] [workshop]))))
Pedindo links com os conceitos... (ask-all :sender cfp :receiver ppr :language JessTab :ontology Science :content (object (is-a Anchor) (Link-Text ?l)) (Result (Page-Status CLASSIFIED) (Class "Conference-Paper")) (object (is-a Web-Page) (Contents ?co)) (test (and (if-occur ?l (begin-until "abstract" ?co)) (if-occur (slot-get [ppr_00008] Concepts) ?l))))
Exemplo de Comunicação em KQML (ask-all :sender CFP-Agent :receiver PPR-Agent :reply-with id1 :language JessTab :ontology Science :content (object (is-a Link) (URL ?u) (anchor ?a&:(occurs [call-for-papers] ?a))))
Ex. de Comunicação em KQML (cont.) (tell :sender PPR-Agent :receiver CFP-Agent :in-reply-to id1 :reply-with id2 :language JessTab :ontology Science :content (object (is-a Link) (URL “http://lcn2002.cs.bonn.edu”) (anchor “ IEEE Conference on Local Computer Networks (LCN 2002)”)))
Feita pela FIPA (Foundation for Intelligent Physical Agents) a partir de KQML Visa o consenso em e-commerce inteligente: Nomes globais para agentes Ambientes seguros para negociação entre agentes Agentes móveis Mediação Semântica mais clara das intenções Composição entre elas Inclusão de esquema de cooperação Definição de ambientes e mediadores A Linguagem ARCOL
Falsos Cognatos entre IAD e SD • Heterogeneidade • Comunicação • Compartilhamento • Escalabilidade • Transparência • Portabilidade • Peer-to-peer
Conseqüências para EOOPSs • Embedded Object Oriented Production Systems [Pachet 95]:Motores de inferência integráveis a objetos • Comunicação p2p deve ser explícita (não enviar objetos!) • Separar bem o que é declarativo e procedural • Conhecimento misturado com código (objetos e métodos) não pode ser traduzido ou reusado • Inicializar objetos no código procedural, por métodos dispostos pelo motor de inferência • Evitar ao máximo executar métodos dentro de BCs, mas se for necessário, manter uma BC pequena, exclusiva para isso • Na BC, privilegiar funções do motor às da linguagem hospedeira do motor, apesar de serem menos eficientes
Integrando um Objeto a um Motor public class PaginaWWW { public PaginaWWW( String wurl ) { ...} public String protocolo() { return protocolo; } public String hostName() { return hostName; } public int tamanho() { return tamanho; } public void processaInfo() { }
Inicializando objetos no código PaginaWWW p= new PaginaWWW(Url); // Processing of the page by the reasoning engine // sending data to Jess rete.addDefglobal(new Defglobal("?*URL*",new Value(Url,RU.STRING))); rete.addDefglobal(new Defglobal("?*page*",new Value((Object)p))); rete.assertString("(access ?*URL*)"); rete.reset(); rete.run(); ValueVector mainFact = new ValueVector(); mainFact = (rete.fetch("STATUS")).listValue(rete.getGlobalContext()); urlRetreivd = (mainFact.get(0)).toString(); fact = ((mainFact.get(1)).toString()).trim(); rule = (mainFact.get(2)).intValue(rete.getGlobalContext());
BC separada (defrule i_3_fill-ini ?f1 <- (access ?y) => (assert (web-page (URL ?y) (protocol (call ?*page* protocolo)) (host (call ?*page* hostName)) ... (length (call ?*page* tamanho)))) (retract ?f1) (assert (accessed ?y))) (defrule i_5_filling (valid ?y) => (assert (proc ?y (call ?*page* processaInfo))))
O Pacote JATLite para KQML • Java Agent Template Lite – Classes para a construção de agentes, facilitadores e roteadores • java.stanford.edu • Parser KQML, mas aceita outra linguagem • Protocolos TCP/IP, HTTP, FTP ou outros • Agentes com resposta direta ou fila de mensagens
Camadas do JATLite • Abstrata - classes abstratas necessárias, com TCP/IP, mas provê herança de que podem implementar outros protocolos. • Básica - funcionalidades de comunicação • KQML - armezanamento e parsing de mensagens KQML e serviços de conexão • Roteadora - serviço de registro de nomes, roteamento e enfileiramento de mensagens. • Protocolo - suporte aos protocolos SMTP, FTP, POP3, HTTP, tanto para aplicativos quanto pra applets. • Em Windows, applets exigem que a máquina onde está o roteador tenha um servidor de páginas
Como (Re)Usar o JATLite • Estudar mensagens KQML e seus parâmetros • Instalar um roteador na rede e deixá-lo rodando • Testar exemplos prontos em outras máquinas • Implementar agentes estendendo a classe abstrata RouterLayer.RouterClientAction • Implementar o método Act(Object o), que trata cada mensagem da fila do agente e outros métodos e objetos • Lembrar que Java não possui herança múltipla! Opções: • Colocar a parte de comunicação no nível mais alto • Criar um construtor que tenha como parâmetros os objetos que ele precisará na execução do Act, permitindo assim um objeto comunicador e herança de outra classe no nível mais alto
import Abstract.*; import KQMLLayer.*; import RouterLayer.*; import RouterLayer.AgentClient.*; public class MASTERWebAgent extends RouterClientAction { ... public boolean Act(Object o) { try { KQMLmessage kqml = mail.getKQMLmessage(); String perf = kqml.getValue("performative"); String pf = "ask-oneask-alltellerror"; switch(pf.indexOf(perf)){ case 0: ... // send delete message to the Router addToDeleteBuffer(0); return true; case -1: // error message sendErrorMessage(kqml); return false;} catch(KQMLLayer.ParseException re){ return false;}
Exemplo de Comunicação C:\Agent\Code> jview Agent.Code.MASTERWebAgent Initialization Success Jess> cfp_r_56_big-title: =1=1=1=1=1=1=1=2+2+t TRUE ... Jess> Server created cfpServer Started Start to register Register accepted Before Start to connect as cfp (reconnect-agent :host iching.lcmi.ufsc.br :port 25 :sender cfp :receiver Router :password jhc :email fred1@lcmi.ufsc.br) Connection established Router started
Exemplo de Comunicação (cont.) Sending message Sending success Client Router running Msg received:N 972087857260 (registered-agent :sender Router:receiver cfp :content ((CADStandAlone carbonell.lcmi.ufsc.br -1 disconnected) (RouterRegistrar carbonell 4445 disconnected) (Router carbonell 4444 disconnected) (CalcServer carbonell.lcmi.ufsc.br 5556 disconnected) (cfp iching.lcmi.ufsc.br 25 connected) (ccc null -1 disconnected) (CADApplet null -1 disconnected) (ddd null -1 disconnected))) Msg received:N 972936297630 (ask-all :content (web-page (URL ?y)) :reply-with t :language Jess :receiver cfp :sender org) (defrule r_1_org (web-page (URL ?y ) )=> (assert (to-send cfp org ?y 1))) r_1_org: =1=1+t Msg received:N 972936297630 (tell :force tentative :content (link http://www.com.br 4) :language Jess :receiver cfp :sender org) URL:http://www.com.br