Um Framework Baseado em Padrões Arquiteturais para o Desenvolvimento de Sistemas Multiagentes Auto-Organizáveis Manoel Teixeira de Abreu Netto [email protected] Sumário • Motivação • Visão Geral • Framework • Estudo de Caso – AGV – Modelo – Execução • Próximos Passos 05/11/2015 Manoel Teixeira © LES/PUC-Rio 2 Motivação • Sistemas capazes de operar em ambientes dinâmicos e heterogêneos, contornando perturbações, antes desconhecidas, no ambiente. De forma espontânea compor um nova organização. • Busca por características como flexibilidade, robustez e adaptabilidade. • Obtenção de respostas coletivas e complexas decorrentes das interações entre simples componentes do sistema, de forma descentralizada. • Interesse da comunidade científica e industrial em soluções inspiradas na natureza. 05/11/2015 Manoel Teixeira © LES/PUC-Rio 3 Sumário • Motivação • Visão Geral • Framework • Estudo de Caso – AGV – Modelo – Execução • Próximos Passos 05/11/2015 Manoel Teixeira © LES/PUC-Rio 4 Visão Geral – Auto-organização • Definido como o processo ou o mecanismo que permite um sistema adequar sua organização sem um comando externo explicito; • Interações ocorrem localmente. • Baseado em computação natural; • Sistemas auto-organizáveis fortes e fracos; 05/11/2015 Manoel Teixeira © LES/PUC-Rio 5 Visão Geral – Auto-organização • Propriedades: – Inexistência de um controle externo – Obrigatória – Controle descentralizado – Não obrigatória – Operação dinâmica – Obrigatória • Emergência 05/11/2015 Manoel Teixeira © LES/PUC-Rio 6 Visão Geral – SMA? • As entidades autônomas são agentes; • SMA é um grupo de agentes cooperando entre si; • Comportamento macroscópicos usando apenas interações locais entre agentes. 05/11/2015 Manoel Teixeira © LES/PUC-Rio 7 Padrões Básicos – Evaporation • Problema: – Ambientes multiagentes podem rapidamente ficarem sobrecarregados de informações inseridas pelos agentes • É agregado aos dados um peso/tempo • Ação de coordenação: a falta ou o decremento dos dados implicam em novas ações • Regra de propagação: os dados propagados decrementam os seus pesos localmente e nos vizinhos iterativamente até alcançar o valor 0 05/11/2015 Manoel Teixeira © LES/PUC-Rio 8 Sumário • Motivação • Visão Geral • Framework • Estudo de Caso – AGV – Modelo – Execução • Próximos Passos 05/11/2015 Manoel Teixeira © LES/PUC-Rio 9 Framework • Extensão do framework Jadex; • Implementação dos padrões básicos descritos anteriormente; • Definição dos padrões através de capabilities, com a construção dos planos de propagação e coordenação; • Utilização do conceito de ambiente ativo; • Estrutura que oferece a capacidade de desenvolvimento de novos padrões arquiteturais através da extensão do framework. 05/11/2015 Manoel Teixeira © LES/PUC-Rio 10 Framework • Evaporation capability Sumário • Motivação • Visão Geral • Framework • Estudo de Caso – AGV – Modelo – Execução • Próximos Passos 05/11/2015 Manoel Teixeira © LES/PUC-Rio 12 Estudo de Caso - AGV • AGV ( Automated Guided Vehicles) • Aplicação real – Egemin e DristiNet; • Veículos totalmente automatizados; • Utilizados para transporte de carga; • Exigência de um ambiente: – Flexível (riscos PMBOK) – Dinâmico (aberto) Estudo de Caso - AGV • Modelagem: • Utilização dos padrões: – Diffusion – Warehouse, Destino e Localizações; – Aggregation - Localizações; – Evaporation – Localizções, com dados da Warehouse; Modelo – Diagrama de Caso de Uso Modelo – Diagrama de Classe Modelo – Diagrama de Classe Modelo – Diagrama de Classe Modelo • Ambiente Execução – Construindo o Ambiente • DEBUG: new AGVEnvironment • DEBUG: Adding position 1x1 • DEBUG: Adding position 1x2 • … • DEBUG: Adding position 5x2 • DEBUG: Adding position 5x3 • DEBUG: Creating Plan.... • DEBUG: Adding location in position 1x1 • DEBUG: Adding location in position 1x2 • … • DEBUG: Adding location in position 5x2 • DEBUG: Adding location in position 5x3 Execução – Adicionando os agentes • • • • • • • • • • • • • • • • • • • • • DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: Alocating Agent in position: 2x1 AgentLocation_1 Executing EvaporationPatternPlan... Alocating Agent in position: 2x2 AgentLocation_2 Executing EvaporationPatternPlan... Alocating Agent in position: 2x3 AgentLocation_3 Executing EvaporationPatternPlan... Alocating Agent in position: 3x1 AgentLocation_4 Executing EvaporationPatternPlan... Alocating Agent in position: 3x2 AgentLocation_5 Executing EvaporationPatternPlan... Alocating Agent in position: 4x1 AgentLocation_6 Executing EvaporationPatternPlan... Alocating Agent in position: 4x2 AgentLocation_7 Executing EvaporationPatternPlan... Alocating Agent in position: 4x3 AgentLocation_8 Executing EvaporationPatternPlan... Alocating Agent in position: 1x1 (Warehouse) Alocating Agent in position: 1x2 (Warehouse) Alocating Agent in position: 1x3 (Warehouse) Alocating Agent in position: 5x1 (Destination) Alocating Agent in position: 5x2 (Destination) Execução – Ação do Agente Destination – Difusão • • • • • • • • • • • • • • • • • • • DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: AgentDestination_12 Diffusing 'destination'... Creating diffusionMsg... Setting the content... Getting neighbors... 3 neighbors found... Getting the environment... Getting location of position: 5x2 No agent at this position... Getting location of position: 4x1 Adding a receiver : AgentLocation_6@sepultura... Getting location of position: 4x2 Adding a receiver : AgentLocation_7@sepultura... Sending the message... AgentLocation_7 diffusionMsg Receive... AgentLocation_6 diffusionMsg Receive... Data type: dpt size: 5 Saving the DISPATCH in the beliefbase... Data type: dpt size: 5 Saving the DISPATCH in the beliefbase... Execução – Adicionando uma Carga – Difusão • • • • • • • • • • • • • • • • • • • • DEBUG: Executing UserAgentPlan ... DEBUG: Transporter_16 Looking for a Warehouse... DEBUG: Setting agentsId... DEBUG: UserAgent Sending newDataDiffusionMsg to AgentWarehouse_1@sepultura DEBUG: AgentWarehouse_1 received newDataDiffusionMsg from: AgentIdentifier(name=UserAgent@sepultura) DEBUG: AgentWarehouse_1 Getting the content... DEBUG: Data received: pck: DEBUG: Saving in the beliefbase... DEBUG: Creating a diffusionMsg... DEBUG: Setting the content... pck:1:1:2:info DEBUG: Getting neighbors... DEBUG: 3 neighbors found... DEBUG: Getting the environment... DEBUG: Getting location of position: 2x1 DEBUG: Adding a receiver : AgentLocation_1@sepultura... DEBUG: Getting location of position: 1x2 DEBUG: No agent at this position... DEBUG: Getting location of position: 2x2 DEBUG: Adding a receiver : AgentLocation_2@sepultura... DEBUG: Sending the message... Execução - Evaporação • • • • • • • • • • • • • • • • • • • • • • • • • DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: DEBUG: AgentLocation_1 diffusionMsg Receive... AgentLocation_2 diffusionMsg Receive... Data type: pck size: 5 Saving the PACKAGE in the beliefbase... Data type: pck size: 5 Saving the PACKAGE in the beliefbase... AgentLocation_1 Executing EvaporationPatternPlan... Evaporating package... factor = 1.9 AgentLocation_1 execute() evaporate: continues AgentLocation_2 Executing EvaporationPatternPlan... Evaporating package... factor = 1.9 AgentLocation_2 execute() evaporate: continues AgentLocation_3 Executing EvaporationPatternPlan... AgentLocation_4 Executing EvaporationPatternPlan... AgentLocation_5 Executing EvaporationPatternPlan... AgentLocation_6 Executing EvaporationPatternPlan... Evaporating dispatch... factor = 0.9 AgentLocation_6 execute() evaporate: continues Evaporating dispatch... factor = 0.9 AgentLocation_6 execute() evaporate: continues AgentLocation_7 Executing EvaporationPatternPlan... Evaporating dispatch... factor = 0.9 AgentLocation_7 execute() evaporate: continues Evaporating dispatch... factor = 0.9 AgentLocation_7 execute() evaporate: continues Execução – Procurando Carga • • • • • • • • • • • • • • • • • • • • • • • • • • DEBUG: Transporter_16 trying to move to 3x1... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 new position: 3x1 DEBUG: AgentLocation_4 received a getPackage request... DEBUG: AgentLocation_4 sending reply...AgentIdentifier(name=Transporter_16@sepultura) DEBUG: Transporter_16 reply received... DEBUG: Data received: DEBUG: Transporter_16 null received as reply... DEBUG: Transporter_16 trying to move to 2x1... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 trying to move to 2x2... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 new position: 2x2 DEBUG: AgentLocation_2 received a getPackage request... DEBUG: Data to be replyed: pck:1:1:1.9:info DEBUG: AgentLocation_2 sending reply...AgentIdentifier(name=Transporter_16@sepultura) DEBUG: Transporter_16 reply received... DEBUG: Data received: pck:1:1:1.9:info DEBUG: Transporter_16 Received 1 Packages... DEBUG: Try position: 1x1 DEBUG: Transporter_16 trying to move to 1x1... DEBUG: Transporter_16 Moved... DEBUG: Getting the loaded package... DEBUG: Requesting AgentWarehouse_1 package... DEBUG: AgentWarehouse_1 Received a getPackage fromRParameter(name=sender, value=AgentIdentifier(name=Transporter_16@sepultura), class=class jadex.adapter.fipa.AgentIdentifier) DEBUG: Package: br.puc.rio.les.instance.agv.data.Package@7c21e Execução – Procurando Destino • • • • • • • • • • • • • • • • DEBUG: Transporter_16 looking for destination... DEBUG: Transporter_16 trying to move to 2x2... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 trying to move to 3x2... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 new position: 3x2 DEBUG: AgentLocation_5 received a dispatchPackage request... DEBUG: AgentLocation_5 sending reply...AgentIdentifier(name=Transporter_16@sepultura) DEBUG: Transporter_16 reply received... DEBUG: Data received: DEBUG: Transporter_16 trying to move to 2x2... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 trying to move to 2x3... DEBUG: Transporter_16 Moved... DEBUG: Transporter_16 new position: 2x3 ... Execução – Encontrando Destino • DEBUG: Transporter_16 new position: 4x2 • DEBUG: AgentLocation_7 received a dispatchPackage request... • DEBUG: Data to be replyed: dpt:5:1:0.9:info • DEBUG: AgentLocation_7 sending reply...AgentIdentifier(name=Transporter_16@sepultura) • DEBUG: Transporter_16 reply received... • DEBUG: Data received: dpt:5:1:0.9:info • DEBUG: Try position: 5x1 • DEBUG: Transporter_16 trying to move to 5x1... • DEBUG: Transporter_16 Moved... • DEBUG: Send the package to destination... • DEBUG: Requesting AgentDestination_12 dispatch... • DEBUG: AgentDestination_12 Dispatch requested... • **************DEBUG: Package dispatchated at AgentDestination_12*************** Próximos Passos • Separar o framework da instância (AGV) • Aprimorar detalhes de implementação do AGV, como a busca por “feromônios” • Aumentar a quantidade de agentes (Locations, Warehouses e Destinations) • Implementar uma interface gráfica para visualização • Implementar o caso de uso do VANT VANT Um Framework Baseado em Padrões Arquiteturais para o Desenvolvimento de Sistemas Multiagentes Auto-Organizáveis Manoel Teixeira de Abreu Netto [email protected]