Em relação ao jogo AlphaZero x Stockfish, esta questão já foi abordada aqui pelo SmallChess .
Além do AlphaZero (que emprega uma rotina especializada Monte Carlo 1 na exploração das linhas de jogo), que é feita de maneira não determinística na construção, para os motores de xadrez habituais baseados em heurísticas, como Stockfish e outros (embora existam outros motores que possuem rotinas baseadas em MC, o AFAIK Rybka costumava ter esse recurso), a fonte da aleatoriedade é geralmente apenas uma consequência de aspectos técnicos na implementação, em vez de a aleatoriedade intencional ser introduzida algoritmicamente na tomada de decisão do mecanismo. Abstratamente falando, uma razão para isso é o fato de os mecanismos não estarem funcionando de maneira puramente seqüencial (executando uma tarefa após a outra). Em vez disso, para tornar os mecanismos mais eficientes, eles executam pesquisas paralelas em vários ramos da árvore de possíveis movimentos. Eles fazem isso através do que é chamado de multiencadeamento (ou processamento, mas isso é um pouco diferente). Portanto, vários threads das CPUs são simultaneamenteexecutando operações para pesquisar na árvore (e armazenar em cache as avaliações das posições visitadas), então imagine cada segmento que está sendo atribuído a uma subárvore. O problema com esse tipo de implementação é que a execução geral dos encadeamentos se torna altamente dependente de todos os tipos de condições (tempos de espera, trocas de RAM, ...), portanto, no final, uma variação principal pode ser escolhida sem ter permitido todas as outras tópicos para concluir sua pesquisa.
Na verdade, isso geralmente acontece porque o mecanismo está definido para tomar uma decisão em um determinado período de tempo, portanto, o gerenciamento de tempo altera o comportamento. Você também pode reverter essa afirmação dizendo: conhecer o algoritmo e implementar rotinas de encadeamento determinístico não são suficientes para prever com segurança o estado do programa após qualquer momento t. Obviamente, se alguém sempre permite que todos os threads concluam sua pesquisa e não houve problemas de simultaneidade durante a execução (por exemplo, um thread tentando acessar um determinado cache que não está acessível), o comportamento será realmente totalmente reproduzível dado tudo o resto é o mesmo 2 .
1 : Juntamente com o fato de que, por meio de treinamento adicional (por exemplo, reprodução automática), sua rede neural continua evoluindo (parâmetros reajustados) ou, se você desejar, sua função de avaliação não possui uma definição constante e fixa (diferentemente dos mecanismos baseados em heurística) )
2 : Mesmo assim, como você disse, no nível de abertura, com um livro de abertura, às vezes há decisões aleatórias intencionais tomadas pelo mecanismo sobre qual variação escolher. Da mesma forma, fora da fase de abertura, pode haver momentos em que várias variações têm avaliações quase iguais (dentro da resolução escolhida para o Eval) e, com base no design, podem acabar escolhendo uma aleatoriamente. Por fim, no nível das configurações do mecanismo, é preciso ter cuidado também, por exemplo, a profundidade da pesquisa e os tempos de ponderação escolhidos para cada mecanismo (e se eles podem calcular ainda mais durante os tempos de ponderação um do outro).