Esse problema é bastante semelhante a alguns problemas de codificação. O Stockfish já possui vários conjuntos de movimentos pré-calculados. Representa o estado do tabuleiro de xadrez usando vários painéis de bits, que são usados para avaliar as posições do tabuleiro usando uma representação categórica (cheques, tempos, xeques) e estatística (valores da peça). Quase imediatamente, ele usa um algoritmo de pesquisa alfa-beta avançado. Para não analisar a mesma posição várias vezes, uma tabela de transposição é usada. Isso é essencialmente uma memorização aplicada à função de pesquisa, que é fundamental em muitos problemas de programação da teoria dos grafos. Assim, ele realmente usa um algoritmo bastante simples. Aqui estão algumas pesquisas feitas antes:
Etapa 1. Inicialize o Nó
Etapa 2. Verifique a busca interrompida e o sorteio imediato. Aplique o limite do nó aqui. (Isso funciona apenas com 1 segmento de pesquisa, a partir do Stockfish 2.3.1.)
Etapa 3. Acople a poda à distância. Mesmo que nos posicionemos no próximo movimento, nossa pontuação seria, na melhor das hipóteses, mate_in (textsrightarrowtextply + 1textssrightarrowtextply + 1, mas se alfa já for maior porque um posicionamento mais curto foi encontrado na árvore, não há necessidade de pesquisar mais, nunca iremos bater a corrente alfa.A mesma lógica, mas com sinais invertidos, também se aplica na condição oposta de ser acasalado em vez de dar posicionamento, nesse caso, retorne uma pontuação alta.
Etapa 4. Pesquisa de tabela de transposição. Não queremos que a pontuação de uma pesquisa parcial substitua uma pesquisa completa anterior. Usamos uma tecla de posição diferente no caso de um movimento excluído.
Etapa 5. Avalie a posição estaticamente e atualize as estatísticas de ganho dos pais
Etapa 6. Razoring (é omitido nos nós PV)
Etapa 7. Poda de movimentação nula estática (é omitida nos nós PV). Apostamos que o oponente não tem um movimento que reduzirá a pontuação em mais do que futility_margin (depth) se fizermos um movimento nulo.
Etapa 8. Pesquisa de movimentação nula com pesquisa de verificação
Etapa 9. ProbCut. Se tivermos uma captura muito boa e uma pesquisa reduzida retornar um valor muito acima da versão beta, podemos (quase) podar com segurança a jogada anterior.
Etapa 10. Aprofundamento iterativo interno.
Etapa 11. Passe pelos movimentos. Repita todos os movimentos pseudo-legais até que não haja mais movimentos ou ocorra um corte beta
Etapa 12. Estenda verificações e também movimentos perigosos
Etapa 13. Poda de futilidade.
Etapa 14. Faça a mudança
Etapa 15. Pesquisa de profundidade reduzida (LMR). Se o movimento falhar alto, será pesquisado novamente em profundidade total.
Etapa 16. Pesquisa completa, quando o LMR é ignorado ou falha com alta.
Etapa 17. Desfazer movimento
Etapa 18. Verifique se há nova melhor jogada
Etapa 19. Verifique se há divisão
Etapa 20. Verifique o posicionamento e o empate
Etapa 21. Atualize tabelas. Atualizar entrada da tabela de transposição, killers e histórico
Vou tentar explicar o que a pesquisa do professor está falando. O Stockfish cria uma árvore de pesquisa da jogada legal.
Em seguida, começa a avaliar se cada movimento é bom ou ruim, e quão bom ou ruim, executando primeiro um campo de pesquisa superficial e, em seguida, usando os valores de corte alfa / beta resultantes como valores iniciais para uma pesquisa mais profunda. O bacalhau também prioriza peças. Por exemplo, os cavaleiros seriam priorizados no centro; portanto, se um cavaleiro e um bispo forem bifurcados no centro, ele moverá o cavaleiro, a menos que haja outros ganhos significativos ao mover o bispo. Embora isso possa parecer complicado, essa execução é aproximadamente log (número de movimentos possíveis), tornando-o ainda mais rápido.