Serão desenvolvidos três times para comparação posterior
Dessa forma, podem ser comparados diversos aspectos dos sistemas multiagentes, tais como:
O que deve ser compartilhado
Como compartilhar
+ 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).
É 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:
Exploitação / Exploração:
// 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.