Chess Game

Projet de machine learning basée sur la technologie XGBoost

Projet réalisé sous Python3

Pour la réalisation de ce projet les bibliothèques Numpy/Pandas ont été utilisées pour la gestion et l’organisation des données, XGBoost pour de la prédiction des coups et Tkinter pour l'affichage.

Ce projet repose sur une base de donnée de 20 000 parties d'échec disponible en CSV sur la plateforme Kaggle.

Le modèle entraîné a nécessité la puissance de calcul des serveurs de Google Cloud Platform.

Enfin, ce jeu est en accès libre sur GitHub et via Docker.

Accéder au jeu via Docker ou Github :

git clone git@github.com:Mickevin/Chess_Game.git
cd Chess_Game
python -m pip install -r requirements.txt
python Chess_Game.py

Les grandes étapes de l'Algorithme

1. Transformer/décrypter une suite de caractère correspondant à un mouvement en vecteur (ex : a4 ==>  ([0,6],[0,4]).

2. Transformer chaque vecteur en dataframe qui présente la situation présente sur le plateau de jeu.

Pour prédire un coup lors d’une partie, le logiciel se base sur 100 features jugées utiles à la prise de décision, quelques exemples de features : les coordonnées de la pièce à jouer, cette pièce est-elle en sécurité, est-elle protégée, la destination est-elle sure, la destination élimine-t-elle une pièce adverse, la destination mais-elle en échec l’adversaire…

3. Entraîner un modèle de prédiction de coup en fonction des coups jouables (target = 0) et des coups joués (target = 1).

1 -> pour chaque tour le logiciel prédit tout les coup possible 
2 -> les coups sont classés par score, les coordonnées du meilleur coup est retenu dans la variable ‘pred_arg’
3 -> cette variable est ensuite transformé en vecteur pour modifier l’emplacement de la pièce concernée.

4. Afficher tour par tour le résultat via tkinter.

Ce programme a nécessité au total de la création de 2 classes d’objet une dédiée aux pièces du jeu et une autre aux boutons cliquables (les cases du jeu), 23 fonctions dont une de 340 lignes vérifiant de la validité du coup joué et une autre de 95 lignes servant à déchiffrer les caractères vu en 1. en vecteur. Au total ce sont 1 148 lignes de code qui ont été rédigées pour ce projet.

Observations et notions maîtrisées

Déploiement en ligne de Tkinter

Tkinter est un framework assez ancien qui ne support pas le déploiement en ligne des interfaces graphiques crées. La seule façon de lancer le jeu est donc de le télécharger sur GitHub et d'installer les frameworks nécessaires. Le Jeu est également disponible via Docker.

Temps de calcul long même via Google Cloud Plateform

La conversion des caractères puis l'analyse de chaque coup possible ont entraîné un temps de calcul conséquent. Sur les 20 000 paries présentent dans le jeu de données, seules les parties où les pièces noirs gagnaient ont été sélectionné en 'Mat', soit près de 3000 parties. 24 heures ont été nécessaire pour convertir 300 partie sur les 3000 ce qui a généré 340 000 coups jouable pour 8 800 coups joués.

Optimisations possibles

- Amélioration de l'interface graphique - Amélioration de la vitesse de calcule - Optimisation possible du modèle de prédiction.

Chess Game powered by XGBoost