Quais comportamentos devem ser adotados para criar um combatente de IA “não perfeito”?

19

Ao criar um combatente npc, é fácil óbvio o que fazer para obter uma máquina mortífera de robô, otimizando táticas de combate, tempos e tipos de ataque, mas mais difícil (e mais interessante em uma luta) para obter um inimigo idiossincrático e imprevisível. Quais comportamentos (algoritmos?) São úteis para criar um inimigo mais orgânico e não convencional?

Edit: Meu caso de uso específico é com inimigos do tipo MMO, por exemplo, World of Warcraft, embora com menos gráficos envolvidos. Note que isso significa inimigos humanos e desumanos (animais, monstros, etc.)

Kzqai
fonte

Respostas:

14

Há um artigo muito interessante sobre o assunto no Gamasutra: Erros inteligentes: como incorporar a estupidez ao seu código de IA , de Mick West.

Este artigo fala sobre uma IA de jogo de sinuca. Ao implementar uma IA desse tipo, é muito fácil fazer uma bola a cada tiro. Uma maneira simplista de tornar a IA menos "inteligente" é, como sugerido em outras respostas, adicionar um fator aleatório ao cálculo, fazendo com que a AI perca mais.

Mas existem duas grandes falhas com essa abordagem. Primeiro, é imprevisível. Para um jogador que joga no modo "Fácil", é inaceitável que a IA tenha "sorte". E se o seu fator aleatório fizer com que a IA dê um tiro ainda melhor, acertando uma bola mais valiosa ou fazendo um combo? Você não sabe o que vai acontecer, e ter sorte não deve ser uma opção para a IA em um modo fácil.

A outra falha é que o jogador tentará identificar um padrão nos comportamentos de IA. E com um simples fator aleatório, não há padrão. Mas isso não significa que o jogador não verá nenhum padrão, pelo contrário, de fato. Assim que a IA tiver sorte, o jogador verá uma estratégia em seu comportamento. No artigo, os jogadores estão reclamando sobre a IA jogar uma estratégia de posição. Quando há apenas um fator aleatório na precisão angular .

Do meu ponto de vista, depois de ler este artigo revelador, uma IA não perfeita nunca deve usar a randomização como um fator de simplificação. É exatamente o contrário. Uma IA mais fácil deve ser mais inteligente, mas tentando ajudar o jogador.

No artigo Exemplo de jogo de sinuca, a melhor opção para implementar uma IA de "modo fácil" era remover todos os fatores aleatórios e adicionar uma estratégia de posicionamento. A IA tentaria acertar as bolas para preparar um tiro fácil e impressionante para o jogador .

Dessa forma, o jogador pensará que teve sorte. E é isso que você espera de um jogo ao jogar com facilidade.

Tyn
fonte
1
Também seria útil para a IA lembrar do que o jogador pode tirar proveito. Os desenvolvedores podem pensar que ele tem um 'pote fácil', mas se ele não conseguir, a tática do caso deve ser menos usada pela IA. Também é benéfico, porque você pode treinar o jogador, lembrar o que ele não pode fazer e explorar isso de vez em quando até que ele possa, de maneira que o jogador não fique entediado, nem frustrado.
Jonathan Connell
Embora eu concorde em não usar a randomização, não concordo em "ajudar o jogador": isso seria como trapacear, apenas muito pior, porque você estaria mentindo para o jogador.
o0 '.
@ Lo'oris: Bem, eu não vejo isso como uma mentira. Quando os jogadores dizem que o jogo é fácil, ele espera que o jogo seja gentil. Quando você está jogando um jogo em que você é realmente bom com um amigo que está apenas descobrindo, acho que é bom dar oportunidades a ele. Torna o jogo mais agradável para todos.
Tyn
1
Há um bom post de Shawn Hargreaves no blog sobre randomização e a capacidade de um ser humano de detectar padrões aleatoriamente. Isso traduziria muito, nesse caso, um jogador julgando incorretamente as táticas de um jogador de IA.
Jonathan Connell
1
Na verdade, acho que a randomização da precisão é um bom caminho a percorrer. Com um jogador real, que não é tão grande, às vezes ele vai cometer um erro e bater uma bola melhor no.
AttackingHobo
10

O conceito principal é evitar dar ao NPC "conhecimento perfeito".

  • Margem de erro aleatória em quaisquer decisões ou ações que envolvam um cálculo. exemplo óbvio sendo o objetivo (ex. atiradores de elite do stormtrooper). Se eles nem sempre batem em você, é mais realista.
  • Linha de visão ... se eles não podem vê-lo, pode ser um jogo interessante de gato e rato.
  • Táticas de equipe, dependendo do seu tipo de jogo, inimigos que se adaptam à situação podem ser bem mais interessantes. Por exemplo, se você for atingido por um tiro, não carregaria cegamente, se esconderia até o fogo cessar. Ou talvez você se sinta mais à vontade para entrar se tiver companheiros de equipe por perto ... você pode simular esses comportamentos para fazer com que os NPCs se comportem como se estivessem vivos.

Tenho certeza de que há muitos outros exemplos, talvez você possa nos contar sobre o seu jogo e podemos ser mais específicos :-)

Joel Martinez
fonte
4

Uma maneira rápida de tornar uma IA perfeita combatível é fazê-la tomar decisões imperfeitas, adicionando algum 'ruído' às suas entradas ou saídas. Por ruído, quero dizer alguns fatores aleatórios.

Aqui está um pequeno exemplo de saída:

  • O algoritmo perfeito produz três ações possíveis classificadas com uma pontuação.
  • Adicione um valor aleatório para cada pontuação.
  • Escolha a melhor pontuação.

Aqui estão algumas idéias para entrada:

  • Se as ações são baseadas na saúde do oponente, adicione um fator aleatório (digamos +/- 10 para uma barra de saúde de 0 a 100) ao estado percebido pela IA.
  • O mesmo para classificação de ações, se a IA souber que alguns ataques são mais fortes que outros, adicione / subtraia aleatoriamente alguns valores lá.

Uma coisa óbvia a ser levada em consideração é a velocidade da IA. Na maioria dos jogos, as IAs podem reagir MUITO mais rápido que os seres humanos (especialmente nos combates) e fazer multitarefa aparente (muito visível nos jogos RTS). Portanto, você deve agir de acordo com isso, mantendo a IA um pouco lenta (talvez de forma adaptativa) e limitando a quantidade de coisas que ela pode fazer em um determinado período de tempo (ou seja, uma ação a cada meio segundo).

Espero que isso ajude e boa sorte!

jv42
fonte
3

É difícil dar uma resposta diretamente útil sem saber exatamente o que você está tentando fazer.

Tenho duas coisas a dizer sobre o assunto que podem ajudá-lo.

A primeira coisa (e essa é de longe a mais importante), se você está tentando fazer o inimigo parecer mais interessante e humano, suas táticas de combate são irrelevantes. O truque para fazer os jogadores "acreditarem" que um inimigo está vivo é usar animação, sons e pequenos detalhes para implicar o comportamento humano. A IA perfeita pode dobrar a esquina, ver um jogador e atirar. Uma IA humana pode dobrar uma esquina, ver um jogador, ter um olhar surpreso no rosto e gritar alarmada e disparar. O primeiro parece robótico. O segundo parece humano. Ambos estão usando IA idêntica em todos os aspectos, exceto na inserção da animação antes do disparo (ou, para manter o comportamento tático igual durante o disparo).

Segundo, evite aleatorizar. Os jogadores não apreciam isso tanto quanto os designers querem pensar que vão. Os jogadores não veem "o computador gerou 1 em 100, seguido por 5, 3 e 4; portanto, os fatores de erro para as quatro últimas fotos foram de apenas 1%, 5%, 3% e 4%, e isso é por que você morreu em meio segundo nesta rodada. " Os jogadores apenas veem inimigos que às vezes erram demais e outras vezes os acertam repetidamente sem motivo discernível, o que é incrivelmente frustrante. Um bom design de jogo é basicamente sobre a criação de padrões que os jogadores humanos podemobserve, aprenda e bata, e obtenha o sucesso do jogador com base em seu próprio julgamento, habilidades e intuição, em vez de determinar se o jogador teve sorte. O desejo de randomizar vem da experiência com jogos de mesa e jogos de azar, ambos meios incrivelmente diferentes dos videogames (e o que funciona em um meio geralmente não faz sentido em outro).

Sean Middleditch
fonte
1

Lembro que no nosso curso de IA na faculdade havia um tópico sobre tornar a IA mais "humana" e menos perfeita. Isso foi há muitos anos, então eu me lembro de alguns pontos do topo da minha mente.

  • Use "bibliotecas de movimentos". Se você estiver lutando com um orc, diga a ele três rotinas de combate que eles repetem de vez em quando. Isso facilita os combates por ser mais previsível, o que parece ser o oposto do que você deseja, mas ainda torna a IA menos "máquina perfeita" e mais "noob repetindo o mesmo movimento repetidamente".
  • Suboptimize, se possível. Se, como você diz, sua IA for baseada no cálculo da melhor jogada, coloque um limite artificial nesse cálculo. Torne a pesquisa mais superficial ou limite o número de etapas. Em vez da melhor jogada de todos os tempos, a IA escolherá simplesmente uma boa jogada. Isso pode adicionar muita variedade ao comportamento de seus inimigos, pois existem muito mais do que boas jogadas.
  • Cometer erros de propósito. Em vez da melhor jogada, escolha a segunda ou terceira melhor. Ou até mesmo escolha uma jogada com pouca utilidade. Isso pode tratar do seu ponto de "imprevisibilidade".

É claro que esses são apenas conselhos gerais que devem ser estudados e testados para cada caso e podem de fato fazer sua IA parecer ainda mais artificial do que o pretendido. No entanto, acho que eles são um bom ponto de partida.

angarg12
fonte
0

Acabei de ver isso aparecer e queria compartilhar uma ideia que usei no passado.

Digamos que o personagem tenha três jogadas e cada uma seja pontuada, uma pontuação maior é uma jogada melhor. (Outras respostas falam sobre adicionar ruído à criação dessa pontuação.)

  • Ataque com uma espada (30 pontos)
  • Feitiço de fogo (50 pontos)
  • Feitiço de gelo (20 pontos)

Resuma o total de pontos (100)

Tire o status de inteligência do personagem do valor máximo possível para esse status (digamos 60 de 100).

Gere um número aleatório entre 0 (ou algum outro andar) e a taxa de inteligência (0,6), multiplicada pelo total de pontos (100). No nosso exemplo, digamos que o resultado seja 45.

Agora você começa a subtrair os movimentos ruins desse valor até atingir zero. (Subtraia em ordem.)

Primeiro, consideramos o feitiço Ice, que obteve 20. 45 - 20 = 25. Como está acima de zero, jogamos fora o feitiço Ice.

Segundo, olhe para o ataque com uma espada, no valor de 30 pontos. 25-30 = -5. Atingimos nosso limiar, então escolhemos o ataque com uma ação de espada.

Neste sistema, um personagem com pouca inteligência não escolherá a melhor jogada. E um personagem com alta inteligência geralmente escolhe a melhor jogada. (Neste exemplo, um personagem com inteligência perfeita escolhe a melhor jogada 50% do tempo.)

Adicionar um mecanismo de piso ao número aleatório aumentará a chance de melhores movimentos serem selecionados.

Xtros
fonte