540 likes | 628 Views
Viviane Torres da Silva Mariela Inês Cortés Carlos J. P. de Lucena. ASF: Agent Society Framework. Motivação. Como implementar sistemas multi-agentes (SMA)? Como implementar os agentes, o ambiente, os papéis usando orientação a objetos?
E N D
Viviane Torres da Silva Mariela Inês Cortés Carlos J. P. de Lucena ASF: Agent Society Framework
Motivação • Como implementar sistemas multi-agentes (SMA)? • Como implementar os agentes, o ambiente, os papéis usando orientação a objetos? • Como mapear agentes para classes, organizações para classes, ...? • Usar de plataformas, arquiteturas, frameworks orientados a objetos específicos para implementar SMA • Exemplos: • Jade, Jadex, FIPAOS, ZEUS, KAoS e Desire Laboratório de Engenharia de Software (LES) – PUC-Rio
Frameworks e Arquiteturas OO • Objetivo: prover classes orientadas a agentes reutilizáveis que possam ser estendidas e customizadas para implementar sistemas de domínio específico • Definem classes orientadas a objetos, os relacionamentos entres as classes e a maneira como estas classes interagem Laboratório de Engenharia de Software (LES) – PUC-Rio
Agenda • Sociedade de agentes • Aspectos estruturais do ASF • Aspectos dinâmicos do ASF • Modelo de ciclo de vida das entidades • Modelo computacional das entidades • Exemplo utilizando o ASF • Trabalhos em andamento Laboratório de Engenharia de Software (LES) – PUC-Rio
Sociedade de Agentes • Sociedade = grupo = organização • Não são compostas apenas por agentes mas também por organizações, papéis, ambientes e objetos • Agentes podem desempenhar vários papéis em diferentes organizações • Agentes desempenham pelo menos um papel em uma organização Laboratório de Engenharia de Software (LES) – PUC-Rio
Entidades • Objects • Attributes, methods • Agents • Goals, beliefs, plans and actions • Organizations • Goals, beliefs, plans, actions e axioms • Agent Roles • Goals, beliefs, duties, rights e protocols • Object Roles • Attributes and methods • Environment • Passive or active environment Laboratório de Engenharia de Software (LES) – PUC-Rio
Aspectos Estruturais do ASF • Objetivo: dar suporte à implementação de agentes, organizações, papéis e ambientes • Como implementar ... • as entidades, • suas propriedades, • seus relacionamentos, • a interação entre as entidades e • a execução interna das entidades? Laboratório de Engenharia de Software (LES) – PUC-Rio
Aspectos Estruturais do ASF • Fornece um conjunto de módulos que devem ser estendidos para implementar a aplicação • Cada módulo representa uma entidade do SMA • Instanciação da aplicação: • para implementar uma classe de agente da aplicação estende-se o módulo Agent • para implementar uma classe de organização da aplicação estende-se o módulo Organization • ... Laboratório de Engenharia de Software (LES) – PUC-Rio
Agente • Agent • Thread (entidade autônoma) • Messages • Enviadas e recebidas (entidade interativa) • Goals • Nome, tipo, valor • Está associado a planos que podem atingir o goal • Beliefs • Nome, tipo, valor Laboratório de Engenharia de Software (LES) – PUC-Rio
Agente • Plans • Define uma ordem de execução de um conjunto de ações • Está relacionado a goals que pode atingir • Actions • Define a execução interna do agentes (entidade adaptativa) • Possui pré e pós-condições Laboratório de Engenharia de Software (LES) – PUC-Rio
Módulo Agent Laboratório de Engenharia de Software (LES) – PUC-Rio
Organização • Organização • Thread (entidade autônoma) • Main-organization • Não desempenha papéis • Pode definir sub-organizações • (Sub-)Organization • Desempenha papéis em organizações • Pode definir sub-organizações • Goals, beliefs, plans, actions and messages • Axiom: • Nome, tipo, valor Laboratório de Engenharia de Software (LES) – PUC-Rio
Módulo Organization Laboratório de Engenharia de Software (LES) – PUC-Rio
Agent Role • Goals, Beliefs • Duties • Define ações que são obrigações • Rights • Define ações que são direitos • Protocols • Define ordem de envio e recebimento de mensagems Laboratório de Engenharia de Software (LES) – PUC-Rio
Módulo Agent Role Laboratório de Engenharia de Software (LES) – PUC-Rio
Módulo Object Role • Atributos • Métodos Laboratório de Engenharia de Software (LES) – PUC-Rio
Módulo Environment • Passive environment • Active environment Laboratório de Engenharia de Software (LES) – PUC-Rio
Relação entre as entidades Laboratório de Engenharia de Software (LES) – PUC-Rio
Estrutura do ASF Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida X Modelo computacional • Modelo de ciclo de vida • Define o conjunto de estado possíveis e as suas transições • Modelo computacional. • Descreve a execução da entidade nos estados definido no modelo de ciclo de vida Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Objeto • Start: • Criação do objeto • Registrar objeto no ambiente • Running: • Execução do objeto • Death: • Destruição do objeto • Cancelar o registro do objeto no ambiente Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Papel de Objeto • Start: • Criação do papel de objeto • Registrar o objeto no papel (objeto não conhece o papel) • Registrar a papel na organização • Running: • Execução do papel do objeto • Death: • Destruição do papel do objeto • Cancelar o registro no papel na organização Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Papel de Agente • Start • Criação do papel • Registrar o papel na organização • Active • Execução do papel • Inactive • Execução interrompida • Death • Destruição do papel • Cancelar o registro do papel na organização Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Agente • Agente executa no contexto dos papéis • Para cada papel que o agente desempenha uma thread de agente é criada • Start • Criação do agente • Registrar o agente no ambiente • Criação de um papel de agente • Associar papel ao agente e vice-versa • Running • Execução do agente Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Agente • Frozen • Todos os papéis do agente estão desativados • Agente existe mas não está executando • Migrating • Migração do agente de um ambiente para outro • Cancelar/desativar todos os papéis no ambiente origem • Criar/ativar pelo menos um papel no ambiente destino • Death • Destruição do agente • Cancelar o registro do agente no ambiente • Destruição do papel de agente • Cancelar associação entre agente e papel Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Agente Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Sub-organização • Start • Igual ao de agentes • Frozen • Igual ao de agentes • Migrating • Entidades devem papar de desempenhar papéis dentro da sub-organização (cancelar/desativar papéis) • Cancelar/desativar todos os papéis no ambiente origem • Criar/ativar pelo menos um papel no ambiente destino • Entidades podem se mover também para continuar a desmpenhar os papéis Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Sub-organização • Death • Destruição da sub-organização • Cancelar o registro da sub-organização no ambiente • Destruição do papel de agente • Cancelar associação entre sub-organização e papel • Destruição dos papéis desempenhados dentro da sub-organização Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Sub-organização Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Main-organização • Start • Criação da main-organização • Registrar da main-organização no ambiente • Running • Execução da main-organização • Death • Destruição da main-organização • Cancelar o registro da main-organização no ambiente Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo de ciclo de vida de Ambiente • Start • Criação do ambiente • Running • Execução do ambiente • Death • Destruição do ambiente • Destruição de todos os agentes, organizações e objetos Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional das Entidades • Identifica o comportamento entre todas as entidades de um determinado tipo associado a um determinado estado • Define o comportamento independente do domínio das entidades em um determinado estado Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Ambiente • Start • Criação do ambiente • Running • Execução do ambiente Environment env = new Virtual_Marketplace (); Comportamento dependente do domínio Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Ambiente • Death • Destruição do ambiente • Destruição de todos os agentes, organizações e objetos public abstract class Environment { ... public void destroy() { //Destroying the agents Vector vAgents = getAgents(); if (vAgents != null) { Enumeration enumvAgents = vAgents.elements(); while (enumvAgents.hasMoreElements()) { Agent agentAux = (Agent)enumvAgents.nextElement(); agentAux.destroy(); } } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Ambiente • //Destroying the organizations • Vector vOrganizations = getOrganizations(); • if (vOrganizations != null) • { • Enumeration enumvOrg = vOrganizations.elements(); • while (enumvOrg.hasMoreElements()) { • MainOrganization orgAux = (MainOrganization)enumvOrg.nextElement(); • orgAux.destroy(); • } • } • //Destroying the objects • Vector vObjects = getObjects(); • if (vObjects != null) • { • Enumeration enumvObjects = vObjects.elements(); • while (enumvObjects.hasMoreElements()) { • Object objAux = enumvObjects.nextElement(); • cancelObjectRegister(objAux); • } • } • } • ... • } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Objetos • Start: • Criação do objeto • Registrar objeto no ambiente • Running: • Execução do objeto • Death: • Destruição do objeto • Cancelar o registro do objeto no ambiente Book book = new Book (); env.registerObjects(book); //Registering the object in the environment Comportamento dependente do domínio env.cancelObjectRegister(book); Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Objeto • Start: • Criação do papel de objeto • Registrar o objeto no papel (objeto não conhece o papel) • Registrar a papel na organização • Running: • Execução do papel do objeto Offer bookOffer = new Offer(mainOrg); bookOffer.setObject(book); Comportamento dependente do domínio Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Objeto • Death: • Destruição do papel do objeto • Cancelar o registro no papel na organização public abstract class ObjectRole { ... public void destroy () { //object playing role setObject(null); //destroying role of the organization where it was being played MainOrganization organization = getOwner(); Vector vRoles = organization.getObjectRoles(); Enumeration enumvRoles = vRoles.elements(); while (enumvRoles.hasMoreElements()) { ObjectRole roleAux = (ObjectRole)enumvRoles.nextElement(); if (roleAux == this) vRoles.remove(roleAux); } } ... } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Agente • Start • Criação do papel • Registrar o papel na organização • Active • Execução do papel AgentRole agRole = new Buyer (mainOrg); agRole.setRoleName ("Buyer01"); Comportamento dependente do domínio Laboratório de Engenharia de Software (LES) – PUC-Rio
public abstract class Agent extends Thread { ... private void checkIfSuspended(AgentRole role) { if (role.threadSuspended()) { synchronized (this) { while (role.threadSuspended()) System.out.println("Suspended"); System.out.println("Resumed"); } } } ... } Papel de Agente • Inactive • Execução interrompida public abstract class AgentRole { ... public synchronized void supendThread() { threadSuspended = true; } public synchronized void resumeThread() { threadSuspended = false; } protected boolean threadSuspended() { return threadSuspended; } ... } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Agente • Death • Destruir o papel significa parar de executar o papel • Sinalizar que o agente deve parar de executar o papel public abstract class AgentRole { ... protected boolean threadStopped() { return threadStopped; } public void stopThread() { threadStopped = true; } ... } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Agente public abstract class Agent extends Thread {... public void run() {... //Cheking if thread was stopped while (continueExecution && !checkIfStopped(currentRole)) { ... } //The thread was stoped ... //The current role must be destroyed currentRole.destroy(); //Verify if the agent is playing other roles vRoles = getRolesBeingPlayed(); if (vRoles == null) //If the agent is not playing other roles, the agent must be //destroyed destroy(); ... }... } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Papel de Agente • Death • Destruição do papel • cancelar o registro do papel na organização public abstract class AgentRole {... protected void destroy () { //agent playing role setAgent(null); //organization playing role setOrganization(null); //The current role must be removed from the list of the roles being played //in an organization MainOrganization organization = getOwner(); Vector vRoles = organization.getAgentRoles(); Enumeration enumvRoles = vRoles.elements(); while (enumvRoles.hasMoreElements()) { AgentRole roleAux = (AgentRole)enumvRoles.nextElement(); if (roleAux == this) vRoles.remove(roleAux); } }... } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente • Agente executa no contexto dos papéis • Para cada papel que o agente desempenha uma thread de agente é criada • Start • Criação do agente • Registrar o agente no ambiente • Criação de um papel de agente • Associar papel ao agente e vice-versa Agent agent = new User_Agent (env, mainOrg, agRole); agent.setAgentName ("UserAgent::Viviane"); Thread agentThread = new Thread(agent, agRole.getRoleName()); agentThread.start(); agRole.setAgent (agent); Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente • Running • Execução do agente protected abstract Plan selectingPlan(Vector vPlansExecuted, Goal goal); protected abstract void executingPlan(Plan plan); protected abstract Goal selectingGoalToAchieve(); Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente public void run() { ... //Cheking if thread was stopped while (continueExecution && !checkIfStopped(currentRole)) { checkIfSuspended(currentRole); //Checking if thread was suspended //Selecting a goal to be achieved Goal goal = selectingGoalToAchieve(); while (goal != null) { //Selecting a plan to be executed Plan plan = selectingPlan(vPlansExecuted, goal); while (plan != null) { //Checking if thread was suspended checkIfSuspended(currentRole); //Executing a plan executingPlan(plan); checkIfSuspended(currentRole); if (checkIfStopped(currentRole)) break; vPlansExecuted.add(plan); Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente if (!goal.getAchieved()) //Secting another plan plan = selectingPlan(vPlansExecuted, goal); else { //Goal achieved ... } plan = null; } } //The goal was achieved or //all plans associated with the goal were executed or //there is not any plan associated with the goal //Selecting another goal if (checkIfStopped(currentRole)) break; //Selecting another goal goal = selectingGoalToAchieve(); vPlansExecuted.clear(); } } } Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente • Frozen • Todos os papéis do agente estão desativados • Migrating Modelo computacional do estado inactive de papéis de agente já foi descrito Trabalho Futuro Laboratório de Engenharia de Software (LES) – PUC-Rio
Modelo computacional de Agente • Death • Destruição do agente • Cancelar o registro do agente no ambiente • Destruição do papel de agente public abstract class Agent extends Thread { ... public void destroy() { //Stoping all threads Vector vRoles = getRolesBeingPlayed(); Enumeration enumvRoles = vRoles.elements(); while (enumvRoles.hasMoreElements()) { AgentRole roleAux = (AgentRole)enumvRoles.nextElement(); roleAux.stopThread(); } //Canceling the register Environment env = getEnvironment(); env.cancelObjectRegister(this); } ...} Laboratório de Engenharia de Software (LES) – PUC-Rio