200 likes | 280 Views
How Agents Do It In Stream Logic Programming. Huntbach,M.M; Jennings,N.R.; Ringwood,G.A(ICMAS-95). Seminário apresentado na disciplina PCS-5740 - Fundamentos Lógicos de IA Prof: Jaime S. Sichman 1o. Quadrimestre de 1999. Introdução. Objetivo: mostrar as vantagens da SLP
E N D
How Agents Do It In Stream Logic Programming Huntbach,M.M; Jennings,N.R.; Ringwood,G.A(ICMAS-95) Seminário apresentado na disciplina PCS-5740 - Fundamentos Lógicos de IA Prof: Jaime S. Sichman 1o. Quadrimestre de 1999 Simone G D Prado
Introdução • Objetivo: mostrar as vantagens da SLP (Stream Logic Programming) • Problema: trabalhar com MAS (Multi Agent System) necessita de ferramentas e técnicas próprias • Soluções: • construir linguagens novas (PLACA e MAIL) • usar linguages mais gerais (OBCP - Object Based Concurrent Programming) Simone G D Prado
Introdução (cont...) • OBCP em MAS: • vantagem: se sai bem na complexidade de executar grandes programas em sistemas distribuídos • desvantagem: restringe os agentes deixando-os muito inflexíveis • Exemplo de OBCP: ACTORS e ABCL Simone G D Prado
Características do SLP • Sintaxe: • ACTORS - LISP • SLP - PROLOG • SLP consiste de um conjunto de comportamentos nomeados • Classe (LOO) • conjunto de clausulas (L Lógica) • vetor de slot de recepção de mensagens • slot => variáveis do Prolog Simone G D Prado
Seleção de mensagens • Forma geral: • <guard> <- <behaviour> act(X,Y):- X=m <- ..... + act(X,Y):- X = n <- ..... • + representa as alternativas • Mensagem = termo da lógica de predicados • Objeto fica suspenso até chegar m/0 ou n/0 Simone G D Prado
Seleção de mensagens (cont...) • Pode-se acrescentar: + act(X,Y):- X/=m & X/=n <- ..... • Existe prioridade - ordenação de cláusulas act(m,Y) <-.... + act(m,Y) <- .... + act(X,Y) <- .... Simone G D Prado
Seleção de mensagens (cont...) • Pode-se requerer duas mensagens: max(I,J):- I > J <- .... + max(I,J): I=<J <- .... • As restrições não podem ser executadas enquanto não receberem a(s) mensagem(ns). Enquanto isso a cláusula fica suspensa. Simone G D Prado
Metas como objetos pouco ativos • Objeto - meta em Prog Lógica, um comportamento com um nro de slots • Em SLP os slots são explícitos e podem ser manuseados. Pode-se ter lista de objetos: <- A << m|act(A,B)|bct(B,C)|... O envio da mensagem é assíncrono Simone G D Prado
Metas (cont...) • Uma classe pode receber mensagens e enviar respostas: act(m,Y) <- Y << q + act(n,Y) <- Y << r bct (q,Y) <- done { nenhuma troca } <- A<<m | act(A,B)|bct(B,C)|.... <- act(m,B)|bct(B,C)|.... <- B<<q|bct(B,C)|.... <-bct(q,C)|.... <- .... Simone G D Prado
Objetos de vida longa e Fluxo • Os slots podem receber mensagens. • As mensagens são termos. • Termos podem ter slots • Portanto: act(m(X),Y) <- Y << q(Z)|cct(X,Y) +act(n(X),Y) <- Y << r(Z)|dct(X,Y) os objetos cct/2 e dct/2 tratam dos termos que tem slot Simone G D Prado
Objetos .... (cont...) • As mensagens podem ser multicast: <- X<<m|act(X,...)|bct(...,X,...)|cct(...,X) • Podem ser reincarnadas: bct(q(X),Y) <- bct(X,Y) • Reincarnadas recursivas: bct(q(X),Y) <- Z << r(X)|bct(Z,Y) {ou} bct(q(X),Y) <- bct(r(X),Y) envia uma mensagem para si mesmo Simone G D Prado
Objetos... (cont...) • Quando várias mensagens são recebidas no mesmo fluxo: bct(s(t(X)),Y) <- bct(X,Y) bct(s:t:X,Y) <- bct(X,Y) bct([s,t|X],Y) <- bct(X,Y) bct([s|[t|X]],Y) <- bct(X,Y) Simone G D Prado
Agentes Simples //vendedor(Preço_corrente,Proposta,Limite_min) vendedor(Perg,Prop:Cont,Limite):- Prop > Limite <- Cont << aceita(Prop)|vendedor(Perg,Cont,Limite) +vendedor(Perg,Prop:Cont,Limite):- Prop < Limite & Nova_P := (Perg+Prop)/2 & Nova_P > Limite <- Cont << Nova_P:Novo_C | vendedor(Nova_P,Novo_C,Limite) +vendedor(Perg,Prop:Cont,Limite):- Prop < Limite & Nova_Perg := (Perg+Prop)/2 & Nova_P < Limite <- Cont << rejeita(Prop) | vendedor(Perg,Cont,Limite) Simone G D Prado
Agentes Simples (cont...) //comprador(Proposta_corrente,Pergunats,Limite_max) comprador(Prop,Perg:Cont,Limite):- Perg < Limite <- Cont << aceita(Perg)|comprador(Prop,Cont,Limite) +comprador(Prop,Perg:Cont,Limite):- Perg > Limite & Nova_P := (Perg+Prop)/2 & Nova_P < Limite <- Cont << Nova_P:Novo_C | comprador(Nova_P,Novo_C,Limite) +comprador(Prop,Perg:Cont,Limite):- Perg > Limite & Nova_Prop := (Perg+Prop)/2 & Nova_P > Limite <- Cont << rejeita(Perg) | comprador(Prop,Cont,Limite) Simone G D Prado
Agente simples (cont...) <- vendedor(100,C,75)|comprador(40,100:C,80)(100+40)/2=70 <- vendedor(100,C,75)|C<<70:C1|comprador(70,C1,80) <- vendedor(100,70:C1,75)|comprador(70,C1,80) (100+70)/2=85 <- vendedor(85,C2,75)|C1<<85:C2|comprador(70,C1,80) <- vendedor(85,C2,75)|comprador(70,85:C2,80)(85+70)/2=77.5 <- vendedor(85,C2,75)|C2<<77.5:C3|comprador(77.5,C3,80) <- vendedor(85,77.5:C3,75)|comprador(77.5,C3,80) <- vendedor(85,C3,75)|C3<<aceita(77.5)|comprador(77.5,C3,80) <- vendedor(85,aceita(77.5),75)|comprador(77.5,aceita(77.5),80) Simone G D Prado
Agentes submissos • Co-operação cliente-servidor // server(Pedido:Mais_Pedido, BcoDados) server(P:Ps,BD) <- transaction(P,BD,BDN)|server(Ps,BDN) 1o. Arg: fluxo da transação 2o. Arg: mensagem com o estado do servidor //cliente(Estado, Pedidos,Retorno) cliente(N,Ps,done):- N1:=N+1 <- Ps << do(N,Retorno):Ts|Cliente(N1,Ts,Retorno) Simone G D Prado
Agentes submissos (cont...) • O servidor pode ser forçado a esperar até que a transação seja completada: server1(P:Ps,data(BD)) <- transaction(P,BD,BDN)|server1(Ps,BDN) • Para simplificar assume-se que o estado do servidor pe um registro de pedidos processados: transaction(do(Job,Reply),D,D1) <- D1<<data(Job:D)|Reply<<done. transaction1(do(Job,Reply),D,D1)<-Reply<<done;(D1<<data(Job:D)) Simone G D Prado
Agentes sofisticados • Arquiteturas reflexivas ou meta nível são usadas pelos MAS. • Vanilla interpreter: // exec(Fila_de_metas) exec(done) <- done exec(user(Meta)|Rest_Metas) <- clause(user(Meta),Corpo)| exec(Corpo)|exec(Rest_Metas) clause(user(Head),Tail):- C1&...&Cn <- Tail << (user(b1)|...|user(bn)|done) Simone G D Prado
Agentes inteligentes // agent0(Mensagem_Fluxo,Estado_Mental) agent0(Mens:Fluxo, EMental):- < condições mens e est mental> <- exec(Mens,EMental,Novo_EMental)| agent0(Fluxo,Novo_EMental) • O comportamento de exec/3 pode envolver envio de mensagens e/ou atualização de estado mental (crença, crenças comuns) • Enviar uma mensagem informal a um agente: // inform(Time, Agetn, Fact) inform(time_up, Agent,Fact) <- Agent << inform(Fact) Simone G D Prado
Conclusões • O SLP • é potente para o MAS • pode modelar redes neurais • vetor de slots de mensagens receptores • uma mensagem pode conter slot • possibilita escolha entre comportamentos • tem sido usado para implementar sistema operacional distribuído Simone G D Prado