Menu

Reuniao 2

Daniela Maria Uez

Reunião do dia 23/05/2012

Serão desenvolvidos três times para comparação posterior

  • Time R2: desenvolvido somente com Jason.
  • Time R3: desenvolvido com Jason e Cartago.
  • Time R4: desenvolvido com JaCaMo.

Dessa forma, podem ser comparados diversos aspectos dos sistemas multiagentes, tais como:

  • Performance
  • Qualidade do código

Estratégias para compartilhamento

  • O que deve ser compartilhado

    • Dados sobre o grafo
      • quais são os vértices e o valor de cada um.
      • quais são as arestas e o peso de cada uma.
    • Posição dos outros agentes do time
    • ID dos agentes do time
    • Compartilhado somente entre os exploradores: posição e peso dos poços.
  • Como compartilhar

    • O grafo: usando troca de mensagens entre os agentes - informações ficam na base de creças do agente.
      • Adicionar informação sobre a aresta no grafo - utilizado por todos os agentes:
            + surveyedEdges(X) [source(percept)]
                <- .broadcast(X)
    + Adicionar informação sobre os vértices no grafo - utilizado somente pelos agentes exploradores:
            + probedVertices(X) [source(percept)]
                <- .broadcast(X)
    + Para o compartilhamento das outras informações, segue o mesmo conceito de código (ou seja, ao perceber que o evento ocorreu, o agente envia a mensagem em broadcast para os outros agentes).


+ Pode-se utilizar uma estrutura otimizada de dados para guardar uma cópia da informação do grafo. Essa estrutura seria usada para rodar algoritmos otimizados de busca no grafo e também para manter uma cópia do conhecimento "fora" do agente. Caso seja necessário reiniciar o agente, as informações coletadas não se perdem.
    + É necessário que a arquitetura do agente seja alterada para incluir automaticamente as informações sobre o grafo na estrutura de dados (ao mesmo tempo que inclui nas crenças do agente).

Estratégias para exploração

É importante que todos os agentes participem da exploração pois, mesmo que só os exploradores possam descobrir o valor dos vértices, a descoberta de lugares não explorados no grafo conta pontos.

  • Agentes se movem em grupos pelo grafo:

    • Grupos com 3 agentes podem garantir que as áreas do grafo fiquem "fechadas" - mais fácil de garantir o domínio sobre a área.
  • Exploitação / Exploração:

    • A exploitação é feita pelos agentes exploradores. Usa cooperação entre os exploradores. Funcionamento:
      • Supondo exploradores no mesmo vértice ou em vértices adjacentes e uma hierarquia entre eles E1, E2, E3 e E4 (agente E1 tem maior prioridade que o agente E2):
            // Explorador E1
                decide()
                avisa todos os exploradores

            // Outros exploradores (E2, E3, E4) 
                L= exploradores com maior prioridade que estão em vértices adjacentes 
                wait exploradores in L
                decide()
                avisa todos os exploradores


            // função que determina como o explorador decide qual o próximo vértice a visitar
                L = vértices a visitar // não inclui já visitados
                remove de L os vértices que os outros exploradores decidiram visitar
                decide pelo melhor entre os vértices restantes em L
+ A exploração é feita pelos outros tipos de agentes. Visa visitar lugares ainda não conhecidos. 
    + Supondo agentes no mesmo vértice ou em vértices adjacentes:
                decide()
                avisa os outros agentes

            // função que determina como os agentes decidem qual o próximo vértice a visitar
                L = vértices a visitar // não inclui já visitados
                decide pelo melhor entre os vértices restantes em L
+ O melhor vértice será escolhido com base em uma série de características, entre as quais:
    + vértice ainda não visitado (para defir se foi ou não visitado pode-se pensar em estratégias baseadas no algoritmo da colônia de formigas)
    + o vértice está ocupado por um inimigo
    + custo do vértice (quanto mais baixo o custo melhor) 
+ Caso haja dois vértices com a mesma "qualidade", o melhor entre eles será escolhido aleatóriamente.

Outros

  • Caso seja necessário que dois agentes se encontrem no meio do caminho entre eles, para determinar a rota podem ser usados os algoritmos de Dijkstra e/ou Floyd-Warshall.
  • Existem 1% de chance de um comando não funcionar.

A fazer

  • Implementar estratégias de compartilhamento OK
  • Implementar estratégias de exploração OK
  • Pesquisar sobre o uso e testar algoritmos de grafos (path finding) OK
  • Testar outros times
  • Alterar arquitetura do agente para armazenar grafo. OK

MongoDB Logo MongoDB