Aller au contenu
Martin Poiroux
Langue : English
Projets · CodeCode · Moteurs d’échecs · 2022

OptiChess

Un moteur d’échecs écrit en C++, avec sa propre interface d’analyse et un bot qui joue sur Lichess.

Le premier moteur, en Python, date de 2019 et s’est révélé trop lent pour ce qu’on voulait lui faire faire. Il a été réécrit en C++ pour la vitesse, et le projet n’a pas vraiment cessé depuis.

Schéma animé : une recherche minimax. L’arbre pousse en défilant, puis la meilleure ligne remonte jusqu’à la racine. Survolez un nœud pour suivre sa ligne.

Le moteur et son interface sont écrits de zéro en C++ avec raylib : la recherche, l’évaluation, le rendu, et jusqu’aux pièces, dessinées à la main. Aucun morceau de Stockfish à l’intérieur, aucun fichier venu d’ailleurs.

La recherche trouve un sacrifice de dame : 1. Dxa7 Txa7 2. Txc8+, évalué +3,1. À droite, le détail de l’évaluation et les cinq lignes les plus explorées.

La recherche est hybride, et c’est le choix intéressant du projet : un arbre de type UCT au-dessus d’un alpha-bêta et d’une quiescence, plutôt que l’alpha-bêta seul, plus courant. C’est un chemin plus difficile aux échecs, où la profondeur tactique pardonne peu ; la recherche est bornée sans allocation pendant l’exploration, pour éviter que la mémoire ne devienne le facteur limitant.

L’évaluation reste écrite à la main, matériel, structure de pions, sécurité du roi, activité, et elle est rendue en probabilités de résultat, victoire, nulle, défaite, plutôt qu’en un seul score. L’interface affiche ces composantes séparément, seule façon commode de voir quel terme se trompe.

Plateau retourné, les noirs au trait : leur fou est enfermé en a2. Les blancs, un pion de plus, sont estimés nettement mieux (+5,1), terme par terme en haut à droite.

Le moteur tourne comme bot sur Lichess sous le nom Grogros_Zero, ce qui l’oblige à tenir devant de vrais adversaires, dans de vraies cadences et avec un vrai protocole.

Ce choix de recherche s’écarte volontairement de l’approche classique. Il s’inspire d’AlphaZero mais vise un calcul proche de celui d’un joueur humain plutôt que d’un réseau : explorer d’abord ce qui a l’air prometteur, et savoir dire pourquoi. Faute de documentation toute faite pour cette approche, l’interface déroule la réflexion coup par coup : sans elle, impossible de voir ce que la recherche croit.

Dans une position mauvaise (−2,9), la recherche préfère rendre la qualité, 21. Txf6, plutôt que d’attendre.

Quatre ans après, la cohabitation des tables de transposition et de la détection de répétition reste un problème ouvert. Une position identique n’a pas la même valeur selon le chemin qui y mène, et rien ne garantit que la conception actuelle le permette. C’est le seul endroit du projet où l’on ne sait pas si le problème est un bug ou une décision prise trop tôt.

C’est le plus ancien projet encore vivant du site. Commencé en 2022, précédé d’un premier moteur en Python, il est antérieur aux outils d’IA utilisés aujourd’hui : celui-là est écrit à la main.

Le code sur GitHub