Como criar uma IA razoável?

11

Estou criando um jogo de lógica baseado no jogo Fox and Hounds. O jogador interpreta a raposa e a IA interpreta os cães. (tanto quanto posso ver) eu consegui tornar a IA perfeita, para que nunca perca. Deixá-lo como tal não seria muito divertido para jogadores humanos.

Agora, tenho que emburrecer a IA para que os humanos possam vencer, mas não sei como. A lógica atual da IA ​​é baseada na correspondência de padrões - se eu introduzir movimentos aleatórios que fazem o tabuleiro ficar sem espaço, provavelmente a IA ficaria boba até o final do jogo.

Alguma idéia de como emburrecer a IA de tal maneira que não passa de "gênio" para "completamente burro" em um único movimento?

Milan Babuškov
fonte
Então você encontrou e implementou a estratégia ideal, sempre vencedora. Por que não mudar para jogos um pouco mais complicados agora? Ou, que tal um desafio: implemente uma estratégia que sempre perca , não importa o que o outro jogador faça. Veja também: Xadrez Perdido / Antichess
Martin Sojka
Talvez você queira dar uma olhada na minha resposta nesta outra pergunta: gamedev.stackexchange.com/questions/12858/…
Tyn
Raposa e cães não são tão complexos quanto o xadrez. Um movimento errado e a IA perde com certeza. É muito fácil fazer a IA parecer burra. O fato de eu ter resolvido usando papel e caneta e horas de pensamento estratégico, não significa que meus jogadores farão o mesmo.
Milan Babuškov 29/09/11

Respostas:

7

Muitas implementações podem levar a uma chance ponderada aleatória de movimentos - digamos, a chance de fazer um movimento ideal e a chance de fazer um movimento abaixo do ideal. Determinar quão subótima é uma jogada pode ser um problema muito complicado, mas também levará sua IA a tomar muito mais decisões aparentemente inteligentes.

Nota importante: não importa a configuração de dificuldade, provavelmente seria uma má idéia que a IA passasse a chance de ganhar o jogo imediatamente. Se houver a possibilidade de fazer uma jogada que termine o jogo naquele turno, ela sempre deve ser tomada. Caso contrário, isso destruirá absolutamente a impressão do jogador de como a IA está agindo.

Conta
fonte
Obrigado. Decidi deixá-lo jogar de forma inteligente para todos os padrões simples. Existem dois padrões complexos em que o caminho para a liberdade do jogador não é facilmente visível, então eu criei padrões adicionais que fazem a IA perder ao jogar movimentos que se assemelhariam a um jogador humano iniciante nessa posição. No início do jogo, alterno aleatoriamente o padrão de vitória com a perda de um para essas posições.
Milan Babuškov
10

Como esse parece ser um jogo "resolvido", a única resposta é que o computador deve fazer movimentos intencionalmente ruins.

Uma solução rápida pode ser calcular a melhor jogada e também calcular outra jogada legal que pode não ser tão boa. A classificação de dificuldade da IA ​​seria medida na porcentagem de chance de escolher a outra jogada não tão boa, sobre a jogada perfeita.

  • Difícil - 90% de boas jogadas
  • Difícil - 70% de boas jogadas
  • Normal - 50% de boas jogadas
  • Simples - 20% de boas jogadas
  • Foi descartado quando criança - <5% de boas jogadas
  • Hotdog - Tudo aleatório
Adrian Seeley
fonte
10
Provavelmente, é uma boa ideia, mas você acabaria com uma IA retardada se ela intencionalmente executar movimentos errados. De cabeça para baixo, eu primeiro fazia um passe para movimentos "legais", depois aplicava pesos a cada movimento e os ordenava por peso, sendo o peso mais alto o melhor. Você pode fazer um RNG convergir para melhores movimentos, dependendo da dificuldade.
Jonathan Connell
4
Eu concordo com @ Jonathan Connell. Considere: se esconder atrás de caixotes vs se esconder atrás de barris explosivos vs se esconder entre caixotes e uma granada ativa. A IA deve avaliar o quão ruim é a jogada, com uma IA melhor fazendo movimentos melhores com mais frequência. Uma IA não será ótima ou difícil se 70% das vezes você atirar em você e 30% das vezes explodir. Será apenas hilário.
Doppelgreener
2
@ Adrian Seeley Seu último comentário realmente toca no maior problema; para mim, um ser humano jogando contra a IA sempre encontrará instintivamente um raciocínio por trás de suas escolhas, mesmo que teoricamente sejam completamente aleatórias. Em um jogo de tabuleiro, por exemplo, isso pode ser combatido limitando o número de iterações na previsão de jogadas; talvez essa seja uma boa solução em um jogo solucionável?
Jonathan Connell
2
Eu concordo com os dois Jonathans, mas estou dando esta resposta +1 para 'Foi descartado como uma criança' e '
Cachorro
2
@ Jonathan Connell: Você deve postar sua proposta / solução como resposta. Mereceria alguns votos positivos.
precisa saber é o seguinte