Algoritmo de decisão baseado em negociação - Leilão

Descrição
O Algoritmo de Leilão aplica-se a diversas variações de um algoritmo de otimização combinatória que resolve problemas de atribuição e problemas de otimização de rede com custo linear e convexo não linear. Um algoritmo de leilão foi usado em uma empresa para determinar os melhores preços em um conjunto de produtos oferecidos a vários compradores. Trata-se de um procedimento iterativo, de modo que o nome "algoritmo de leilão" está relacionado a um leilão de vendas, em que várias propostas são comparadas para determinar a melhor oferta, com as vendas finais indo para os maiores proponentes.

Detalhamento
Em nosso trabalho de conclusão de curso, no modo de jogo “Horda” os jogadores tem como objetivo alcançar a maior quantidade de pontos, e esses pontos são obtidos através da eliminação dos npc’s. Os npc’s por sua vez tem como objetivo eliminar os jogadores. O Algoritmo de Leilão foi implementado nesses agentes para que eles escolham a melhor opção para ser alvo, ajudando sua equipe a cumprir o objetivo e ganhar o jogo.

Ao iniciar a partida uma wave de inimigos é instanciada, quando todos os agentes dessa wave são eliminados uma nova wave com variação na quantidade e tipo de agente é instanciada, a fim de aumentar o desafio do jogo de forma progressiva.

No momento em que os agentes são instanciados uma tarefa é atribuída a eles, essa atribuição é realizada através do Algoritmo de Leilão, que preenche uma tabela de benefícios através da função que utiliza os parâmetros: distância, vida atual e vida máxima do alvo. Após isso os agentes atuam de acordo com a tarefa que lhes foi atribuída. O agente permanece nesta tarefa enquanto ela tiver bom custo/benefício, até que ela seja cumprida ou até que não exista mais objetivo. A atribuição, o custo das tarefas, o cálculo do custo/benefício, e os lances são atualizados a cada iteração. A tarefa também é atualizada quando o objetivo é cumprido. Por exemplo:

-	inicia-se uma partida com 4 jogadores;

-	a 1a wave com 30 agentes é instanciada;

-	o algoritmo define quais são as tarefas e recebe os lances dos agentes a partir da função que calcula o benefício de cada inimigo para cada jogador;

-	após a 1a iteração todos os agentes possuirão tarefas (perseguir e eliminar jogador X) e passam a atuar para cumprir essas tarefas;

-	as iterações são feitas de tempos em tempos ou quando uma tarefa é cumprida (ex: o jogador foi eliminado).

Aplicação
Link do vídeo no youtube: https://youtu.be/1rUh3u8S350