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.
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 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.
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.
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.
