Aleatoriedade no jogo do motor


11

Se eu conseguir dois motores para jogar um contra o outro com as mesmas cores, o mesmo jogo resultará sempre? Se não, de onde vem a aleatoriedade no jogo do motor? (Negligenciando o livro de abertura, onde, se não me engano, o livro pode dizer ao mecanismo para escolher entre dois movimentos aleatoriamente, pois são igualmente bons.)

Suponho que haja aleatoriedade, porque no jogo Alphazero x Stockfish não tivemos o mesmo jogo várias vezes seguidas. No entanto, eu não entendo o porquê. Presumivelmente, a única maneira de fazer isso é fazer com que o mecanismo execute um movimento subparcial algumas vezes, o que soa como seppuku.


O AlphaZero aprende jogando, portanto, após cada jogo, seu modelo é atualizado.
ferit 21/12/19

A adição de pequeno valor aleatório à avaliação é uma das maneiras possíveis. Eu acho que o bacalhau está fazendo isso.
hoacin

Respostas:


7

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).


6

Graças a @Phonon, cobrindo minhas respostas anteriores em detalhes. Eu gostaria de acrescentar mais um ponto: controle de tempo .

O único controle de tempo determinístico é pelo número de nós , mas isso é incomum. O controle de tempo muito mais comum - número fixo de segundos ou tempo de jogo geralmente não são determinísticos.

Vamos tentar um exemplo. Execute o bacalhau no seu terminal. Tipo:

go movetime 20000

Este comando instrui o mecanismo a fazer uma mudança após 20 segundos. Meus resultados:

info depth 23 seldepth 32 multipv 1 score cp 6 upperbound nodes 24325860 nps 1216171 hashfull 999 tbhits 0 time 20002 pv g1f3 d7d5
bestmove g1f3 ponder d7d5

O movimento foi 1.Nf3. Em seguida, matei meu Stockfish, comecei um novo. Mais uma vez, 20 segundos. Eu tenho:

info depth 23 seldepth 32 multipv 1 score cp 20 nodes 26185280 nps 1309067 hashfull 999 tbhits 0 time 20003 pv d2d4
bestmove d2d4 ponder g8f6

É 1.d4! Mesma posição, ambos os 20 segundos pesquisados!

Você vê? Ambos os 20 segundos para a mudança, mas devido à flutuação no sistema operacional Linux, minha segunda execução teve uma pesquisa mais profunda (26185280> 24325860).

Observe que este pequeno experimento nem foi multithread (número de threads = 1). A multithreading tornaria as coisas ainda mais não determinísticas.

O Stockfish recebeu um minuto por jogada na partida do Google AlphaZero. O número de threads foi 64. As decisões de Stockfish na partida não poderiam ser determinísticas.


De fato, muito instrutivo exemplo e observação.
usar o seguinte comando

agradável! ideia legal para mostrar até o estojo de 1 linha.
Ellie

Obrigado pela resposta. Pergunta estúpida de acompanhamento: o que é um nó (no contexto de máquinas de xadrez)?
Allure

@ user3727079 Os nós são os vértices (posições únicas) na árvore do jogo . Por exemplo, se o nó raiz for a posição inicial, ele terá 20 nós filhos, que são as 20 posições legais únicas que estão a uma camada da raiz.
Ellie
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.