Una implementación de refuerzo basada en el juego basado en la jugada simplificada, altamente flexible, comentada y (con suerte) fácil de entender del aprendizaje de refuerzo basado en la jugada propia basada en el papel Alphago Zero (Silver et al). Está diseñado para ser fácil de adoptar para cualquier juego adversario de turnos de dos jugadores y cualquier marco de aprendizaje profundo de su elección. Se ha proporcionado una implementación de muestra para el juego de Othello en Pytorch y Keras. Se puede encontrar un tutorial acompañante aquí. También tenemos implementaciones para muchos otros juegos como Gobang y Tictactoe.
Para usar un juego de tu elección, subclase las clases en Game.py y NeuralNet.py e implementa sus funciones. Las implementaciones de ejemplo para Othello se pueden encontrar en othello/OthelloGame.py y othello/{pytorch,keras}/NNet.py .
Coach.py contiene el bucle de entrenamiento central y MCTS.py realiza la búsqueda de árbol de Monte Carlo. Los parámetros para la autoplaz se pueden especificar en main.py Los parámetros de red neuronales adicionales están en othello/{pytorch,keras}/NNet.py (bandera CUDA, tamaño por lotes, épocas, tasa de aprendizaje, etc.).
Para comenzar a entrenar un modelo para Othello:
python main.py Elija su marco y juego en main.py
Para una fácil configuración del entorno, podemos usar nvidia-docker. Una vez que tenga configurado Nvidia-Docker, podemos simplemente ejecutar:
./setup_env.sh
Para configurar un contenedor Jupyter Docker (predeterminado: pytorch). Ahora podemos abrir una nueva terminal e ingresar:
docker exec -ti pytorch_notebook python main.py
Entrenamos un modelo de Pytorch para 6x6 Othello (~ 80 iteraciones, 100 episodios por iteración y simulaciones de 25 MCT por turno). Esto tomó alrededor de 3 días en un Nvidia Tesla K80. El modelo previo a la aparición (Pytorch) se puede encontrar en pretrained_models/othello/pytorch/ . Puedes jugar un juego contra él usando pit.py A continuación se muestra el rendimiento del modelo contra una línea de base aleatoria y codiciosa con el número de iteraciones. 
Aquí se puede encontrar una descripción concisa de nuestro algoritmo.
Si encontró este trabajo útil, no dude en citarlo 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}
}
Si bien el código actual es bastante funcional, podríamos beneficiarnos de las siguientes contribuciones:
Game.py , junto con sus redes neuronalesAlgunas extensiones se han implicado aquí.
NOTA: Se han eliminado las versiones de Chainer y TensorFlow V1, pero se pueden encontrar antes de Commit 2Ad461c.