Como um mecanismo decide qual nó pesquisar primeiro?

8

Esta é uma pergunta de acompanhamento para Aleatoriedade no Engine Play . A resposta do SmallChess indica que, em um caso, o Stockfish pesquisou um determinado número de nós após os 20s e um número diferente nos outros 20s; portanto, existe aleatoriedade.

A pergunta: se cada nó é uma determinada posição, como o Stockfish decide qual nó procurar primeiro? Tomemos, por exemplo, a primeira meia-lona. O branco tem 20 possíveis primeiros movimentos, então há 20 nós. Exijo que o Stockfish faça uma jogada depois de pesquisar cinco nós. Isso significa que o Stockfish só pode ter avaliado 1. a4, 1. a3, 1. b4, 1. b3 e 1. c3 antes de precisar fazer uma jogada? Uma pesquisa sistemática como essa significaria que o Stockfish não avaliou os primeiros movimentos mais comuns.

Eu imagino que, mais tarde no jogo, haverá um grande salto no número de nós por meia dobra. Isso significaria que o Stockfish às vezes decide fazer uma mudança, mesmo que não tenha terminado de avaliar todos os nós na meia-lona. Como saberia que ele pesquisou os nós mais promissores?

Allure
fonte
Obrigado pelo link, ainda não o entendi. Diga o gráfico na parte inferior. Presumo que A seja a posição atual e B, C e E são os três movimentos candidatos? Se o IDDFS na profundidade dois for A, B, D, F, C, G, E, F, e a melhor jogada for E, ele poderá errar a melhor jogada se tivesse que terminar a pesquisa antes de alcançá-la.
quer
Não vejo como pode ser uma duplicata - a pergunta é obviamente (?) Diferente.
Allure
Sinto muito @ user3727079, você pode remover esse voto negativo? Também me diga se isso ajuda.
QuIcKmAtHs
@XcoderX ele não pode removê-lo, porque eu sou o único que você downvoted
SmallChess

Respostas:

5

http://rebel13.nl/rebel13/ideas.html explica isso bem.

A idéia básica é ordenar as jogadas com base no que o programa considera a melhor jogada sem pesquisar. Essa pontuação geralmente é baseada na mobilidade, valor em partes quadradas, controle central, histórico, potencial de ataque, capturas e outros elementos que o programador julga importantes. Assim como os humanos baseiam seus movimentos candidatos com base na intuição e na história, o computador pesquisa primeiro o movimento com maior pontuação.

Se o computador estiver limitado a apenas cinco nós, sim, o computador pesquisará apenas os cinco movimentos de pontuação mais alta. Esse fator de limite de tempo pode fazer com que o computador perca um companheiro em um se tiver uma pontuação ruim. O primeiro método para corrigir isso foi estabelecer cofres contra falhas. Isso interromperia uma pesquisa se a posição se tornasse visivelmente pior ou significativamente melhor. A esperança era permitir mais tempo para pesquisar mais variações que pudessem usar o tempo melhor. Outros algoritmos de pesquisa, o aprofundamento iterativo, melhoraram o gerenciamento de tempo, pois eles têm um comprimento menor antes de aprovarem uma proteção contra falhas.

Fred Knight
fonte
0

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. insira a descrição da imagem aqui 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.

QuIcKmAtHs
fonte
@ user3727079 isso ajuda?
QuIcKmAtHs
11
Infelizmente não. Eu não entendo sua resposta. Parece não estar respondendo à minha pergunta, que estava em qual nó pesquisar primeiro, não como o Stockfish toma suas decisões (eu entendo o que significa pesquisar em árvores).
Allure