Uma implementação simplificada, altamente flexível, comentada e (espero) fácil de entender do aprendizado de reforço baseado em auto-jogadores com base no artigo do AlphaGo Zero (Silver et al). Ele foi projetado para ser fácil de adotar para qualquer jogo adversário baseado em dois jogadores e qualquer estrutura de aprendizado profundo de sua escolha. Uma implementação de amostra foi fornecida para o jogo de Otelo em Pytorch e Keras. Um tutorial que o acompanha pode ser encontrado aqui. Também temos implementações para muitos outros jogos, como Gobang e Tictactoe.
Para usar um jogo de sua escolha, subclasse as classes em Game.py e NeuralNet.py e implemente suas funções. Exemplo de implementações para Othello podem ser encontradas em othello/OthelloGame.py e othello/{pytorch,keras}/NNet.py .
Coach.py contém o circuito principal de treinamento e MCTS.py executa a pesquisa de Monte Carlo Tree. Os parâmetros para o auto-jogo podem ser especificados em main.py Os parâmetros de rede neural adicionais estão em othello/{pytorch,keras}/NNet.py (sinalizador CUDA, tamanho do lote, épocas, taxa de aprendizado etc.).
Para começar a treinar um modelo para Othello:
python main.py Escolha sua estrutura e jogo em main.py
Para fácil configuração do ambiente, podemos usar o NVIDIA-Docker. Depois de configurar o NVIDIA-Docker, podemos simplesmente executar:
./setup_env.sh
Para configurar um contêiner (padrão: pytorch) Jupyter Docker. Agora podemos abrir um novo terminal e entrar:
docker exec -ti pytorch_notebook python main.py
Treinamos um modelo Pytorch para 6x6 otelo (~ 80 iterações, 100 episódios por iteração e 25 simulações de mcts por turno). Isso levou cerca de 3 dias em um Nvidia Tesla K80. O modelo pré -ridículo (pytorch) pode ser encontrado em pretrained_models/othello/pytorch/ . Você pode jogar um jogo contra ele usando pit.py Abaixo está o desempenho do modelo contra uma linha de base aleatória e gananciosa com o número de iterações. 
Uma descrição concisa do nosso algoritmo pode ser encontrada aqui.
Se você achou esse trabalho útil, fique à vontade para citar como
@misc{thakoor2016learning,
title={Learning to play othello without human knowledge},
author={Thakoor, Shantanu and Nair, Surag and Jhunjhunwala, Megha},
year={2016},
publisher={Stanford University, Final Project Report}
}
Embora o código atual seja bastante funcional, poderíamos nos beneficiar das seguintes contribuições:
Game.py , junto com suas redes neuraisAlgumas extensões foram implícitas aqui.
NOTA: As versões Chainner e Tensorflow V1 foram removidas, mas podem ser encontradas antes do comprometimento 2AD461C.