Como escolho o melhor algoritmo para um jogo de tabuleiro como damas?

15

Como escolho o melhor algoritmo para um jogo de tabuleiro como damas?

Até agora, considerei apenas três algoritmos, a saber, minimax, poda alfa-beta e pesquisa em árvore Monte Carlo (MCTS). Aparentemente, a poda alfa-beta e o MCTS são extensões do algoritmo básico minimax.

Joey
fonte

Respostas:

17

tl; dr:

  • Nenhum desses algoritmos é prático para o trabalho moderno, mas são bons lugares para começar pedagogicamente.

  • Você sempre deve preferir usar a poda Alpha-Beta em vez da pesquisa minimax simples.

  • Você deve preferir usar alguma forma de pesquisa guiada heurística, se conseguir criar uma heurística útil. Criar uma heurística útil geralmente requer muito conhecimento de domínio.

  • Você deve preferir usar a pesquisa da Árvore de Monte Carlo quando não tiver uma boa heurística, quando os recursos computacionais forem limitados e quando os erros não terão grandes consequências no mundo real.

Mais detalhes:

Na pesquisa minimax, não tentamos ser muito inteligentes. Nós apenas usamos uma abordagem de programação dinâmica padrão. É fácil descobrir o valor dos movimentos de diferença se estivermos perto do final do jogo (já que o jogo terminará na próxima jogada, não precisamos olhar muito à frente). Da mesma forma, se soubermos o que o nosso oponente fará no último lance do jogo, é fácil descobrir o que devemos fazer no segundo lance. Efetivamente, podemos tratar o segundo último lance como o último lance de um jogo mais curto. Podemos então repetir esse processo. O uso dessa abordagem certamente descobrirá as melhores estratégias em um jogo de formato extensivo padrão, mas exigirá que consideremos todos os movimentos possíveis, o que é inviável para todos, exceto os jogos mais simples.

A poda alfa-beta é uma melhoria estrita na pesquisa Minimax. Faz uso do fato de que alguns movimentos são obviamente piores que outros. Por exemplo, no xadrez, não preciso considerar nenhuma jogada que lhe daria a oportunidade de me colocar em xeque-mate, mesmo que você pudesse fazer outras coisas nessa posição. Quando vejo que um movimento pode levar a uma perda, não vou me preocupar em pensar no que mais pode acontecer a partir desse ponto. Vou procurar outras coisas. Também é certo que esse algoritmo produz o resultado correto e é mais rápido, mas ainda deve considerar a maioria dos movimentos na prática.

Existem duas maneiras comuns de contornar o custo computacional extremo de resolver exatamente esses tipos de jogos:

  1. Use uma heurística (a pesquisa A * é o algoritmo usual para fins pedagógicos, mas a pesquisa por quiescência é uma ideia semelhante em jogos para 2 jogadores). Esta é apenas uma função que fornece uma estimativa do valor de um estado do jogo. Em vez de considerar todos os movimentos de um jogo, você pode considerar movimentos a uma distância finita à frente e, em seguida, usar o valor da heurística para julgar o valor dos estados atingidos. Se sua heurística é consistente (essencialmente: se sempre superestima a qualidade dos estados), isso ainda produzirá a resposta correta, mas com enormes acelerações na prática.

  2. Use implementações (como a Pesquisa de árvore de Monte Carlo). Basicamente, em vez de considerar todos os movimentos, execute alguns milhares de jogos simulados entre jogadores agindo aleatoriamente (isso é mais rápido do que considerar todos os movimentos possíveis). Atribua um valor aos estados igual à taxa média de vitórias dos jogos a partir dele. Isso pode não resultar na resposta correta, mas em alguns tipos de jogos, ele é executado de maneira confiável. É frequentemente usado como uma extensão de técnicas mais exatas, em vez de ser usado por si só.

John Doucette
fonte
A * realmente não se encaixa no contexto de jogos para dois jogadores, como os outros algoritmos? Nota no MCTS: implementações típicas "não consideram todos os movimentos até uma profundidade fixa" e iniciam as implementações; em vez disso, implementações típicas dinamicamente aumentam gradualmente a árvore de pesquisa em árvore, aumentando-a em partes mais promissoras (partes em que muitos lançamentos são direcionados pela estratégia de Seleção), aumentando menos nas partes menos promissoras.
Dennis Soemers
1
@JohnDoucette, por que você diria "Nenhum desses algoritmos é prático para o trabalho moderno, mas são bons lugares para começar pedagogicamente". No caso do MCTS, parece muito apropriado para o trabalho moderno, mesmo para a busca por um jogador, quando a transição para o próximo estado, dado um estado e uma ação, está bem definida. Você concordaria?
Miguel Saraiva
1
@MiguelSaraiva Por si só, o MCTS não é algo que você usaria normalmente para um aplicativo moderno. Combinado com algo como um DNN para fornecer uma heurística aprendida seria muito bom.
31419 John Doucette
1
@JohnDoucette "O MCTS não é algo que você usaria normalmente para um aplicativo moderno". Primeiro de tudo, a "modernidade" a que você se refere teve seu grande avanço em 2016 (MCTS + DNN) e parece que você está sugerindo que tudo o que antes era obsoleto (obviamente falso). De fato, pode ser ainda mais plausível dizer que o MCTS normalmente não é usado por causa do oposto: é MUITO avançado: existem muitos aplicativos na indústria realmente obsoletos e que podem ser atualizados para o MCTS. Para muitos desses MCTS + DNN é apenas um sonho distante, pois o pré-treinamento é praticamente inconcebível.
23419 Johan Johan
1
@ Johan Isso me parece adequado para aplicações industriais , mas a pergunta é sobre "um jogo de tabuleiro como damas". Para esses tipos de problemas com brinquedos, acho que o MCTS não é a abordagem moderna correta. Definitivamente, existem muitos problemas do mundo real nos quais seria uma grande melhoria nos sistemas implantados existentes.
John Doucette
6

NB A razão pela qual escolhi apenas esses três algoritmos foi devido ao tempo que tenho disponível para entendê-los. A partir de uma pequena pesquisa, descobri que esses algoritmos são basicamente entrelaçados no algoritmo minimax. Então, se eu puder entender um, os outros dois simplesmente se encaixam.

Dado este contexto, eu recomendaria começar com o Minimax . Dos três algoritmos, o Minimax é o mais fácil de entender.

O Alpha-Beta , como outros já mencionaram em outras respostas, é uma melhoria estrita em relação ao Minimax. O Minimax é basicamente uma parte da implementação do Alpha-Beta, e um bom entendimento do Alpha-Beta exige que você comece com um bom entendimento do Minimax. Se você tiver tempo sobrando depois de entender e implementar o Minimax, eu recomendaria seguir para o Alpha-Beta posteriormente e construí-lo em cima do Minimax. Começar com o Alpha-Beta se você ainda não entende o Minimax não faz muito sentido.

A Pesquisa de árvores de Monte-Carlo é provavelmente um pouco mais avançada e mais complicada para entender realmente. Nos últimos dez anos, o MCTS realmente tem se tornado muito mais popular que os outros dois, portanto, desse ponto de vista, entender o MCTS pode ser mais "útil".

A conexão entre o Minimax e o MCTS é menos direta / óbvia do que a conexão entre o Minimax e o Alpha-Beta, mas ainda existe uma conexão pelo menos em um nível conceitual. Eu diria que ter um bom entendimento do Minimax ainda é benéfico antes de mergulhar no MCTS ; em particular, entender o Minimax e suas falhas / pontos fracos pode fornecer um contexto útil / ajudá-lo a entender por que o MCTS se tornou "necessário" / popular.


Para concluir, na minha opinião:

  • O Alpha-Beta é estritamente melhor que o Minimax, mas também fortemente relacionado / construído sobre o Minimax; então, comece com Minimax, vá para o Alpha-Beta depois, se o tempo permitir
  • O MCTS tem pontos fortes / fracos diferentes, geralmente é melhor que o Alpha-Beta em problemas "modernos" (mas nem sempre), um bom entendimento do Minimax provavelmente será benéfico antes de começar a mergulhar no MCTS
Dennis Soemers
fonte
Existe algum outro algoritmo que você sugeriria que eu também pudesse usar? Isso é pelo como um nível alfa beta poda
Joey
@ Joey Hmm não, não realmente. Minimax é um ponto de partida muito natural, eu recomendo fortemente que, se você está apenas começando. Esse foi basicamente o primeiro algoritmo desenvolvido para jogos como xadrez / damas / tic tac toe / qualquer outra coisa. Posteriormente, centenas, se não milhares, de melhorias foram desenvolvidas, muitas das quais você provavelmente encontra em chessprogramming.wikispaces.com/Search . O Alpha-Beta é o aprimoramento mais natural a ser observado sobre o Minimax.
Dennis Soemers
O @Joey Monte-Carlo Tree Search é um pouco diferente (não necessariamente tem o Minimax como base), é interessante, divertido, popular e altamente relevante na IA "moderna". Ainda assim, as fundações são importantes, eu não recomendaria começar com o MCTS imediatamente se você ainda não entender o Minimax + Alpha-Beta, mesmo que isso seja tecnicamente possível.
Dennis Soemers
Obrigado por esse site. É uma riqueza de conhecimentos que agora posso ler. O ponto mais difícil de aprender coisas novas é encontrar o material correto para ajudá-lo a entender. Então, obrigado novamente pelo site
Joey
@ Joey Não tenho 100% de certeza se a programação de xadrez é o site mais fácil de aprender (e parece haver um aviso assustador no topo de que o site pode estar desaparecendo no final de julho). Se bem me lembro, muitas descrições são curtas / provavelmente não fáceis de entender se você é iniciante no campo. No entanto, será pelo menos uma boa e abrangente coleção de nomes de todos os tipos de algoritmos / aprimoramentos, e você pode tentar procurar as fontes originais ou pesquisar no google todos esses nomes para obter informações mais detalhadas em outros lugares.
Dennis Soemers
1

Se você precisar escolher entre as podas Minimax e Alpha-Beta, escolha Alpha-beta. É mais eficiente e rápido porque pode podar uma parte substancial da sua árvore de exploração. Mas você precisa ordenar as ações da melhor para a pior, dependendo do ponto de vista máximo ou mínimo, para que o algoritmo possa perceber rapidamente se a exploração é necessária.

Kaizokun
fonte