ChessBrain – Une IA pour les échecs

ChessBrain est un moteur de jeu d’échecs et interface graphique et comprend aussi une IA. Il permet à deux joueurs de jouer l’un contre l’autre, mais comprend aussi une IA qui peut jouer contre le joueur, contre elle-même, ou contre une autre IA. L’IA que j’ai essayé de concevoir est particulièrement mauvaise, mais c’est un premier prototype fonctionnel.

The starting board visualized with the renderer
Un aperçu de l’interface graphique du moteur

Retrouvez le projet sur GitHub: https://github.com/razor7877/ChessBrain

ChessBrain est un moteur de jeu d’échecs que j’ai conçu pendant mon cours d’intelligence artificielle au Cégep de Matane. J’ai conçu le moteur en C++, langage que je souhaitais connaître d’avantage, et l’interface graphique a été conçue avec OpenGL. Pour la partie IA, j’ai utilisé la librairie Keras en Python ainsi qu’un serveur Flask pour permettre la communication entre le C++ et l’IA (avec des requêtes HTTP).

Le projet a été réalisé en quelques semaines seulement mais est tout de même assez complet. Les structures de données ne sont pas du tout optimisées mais le moteur en tant que tel est globalement fonctionnel et presque toutes les règles du jeu d’échecs sont implémentées (il ne manque que le roque et la promotion des pions).

L’intelligence artificielle est un modèle neuronal convolutif (CNN) inspiré du projet suivant: https://github.com/realnihal/Chess-AI-with-TensorFlow. Le modèle permet d’évaluer si un tableau d’échecs est plus ou moins avantageux. Combiné à un algorithme minimax, cela permet d’essayer de déterminer le meilleur choix à faire. Un serveur Flask a été créé avec un endpoint HTTP, qui prend en entrée la représentation FEN d’un tableau, détermine le meilleur mouvement à jouer, et le retourne au moteur en notation SAN (par exemple G2G3). Le moteur utilise libcurl pour les requêtes HTTP.

Je ne prévois pas de continuer le développement de ce projet, mais il m’a apporté de nouvelles connaissances sur des domaines comme l’interconnexion de deux langages.