Files
projet_dd/rapport.md
Amaël Kesteman d3ca2193af Feat: Fin du rapport en MD et en PDF.
Fin du notebook ( amélioration possible)
2025-12-17 22:13:11 +01:00

22 KiB
Raw Blame History

Authors

  • Alexis Leboeuf
  • Minh Tuan Vu
  • Thibaut Rochas
  • Amaël Kesteman

Rapport au format PDF

Vous trouverez également le rapport au format PDF dans le projet.

Introduction

Depuis la création du jeu d'échecs, celui-ci a toujours été considéré comme un symbole d'intelligence, où l'on considère les meilleurs joueurs de ce jeu comme parmi les personnes les plus intelligentes de notre monde.

Il fut donc logique pour les informaticiens, au fil du temps, de vouloir développer différents programmes d'échecs afin de montrer la supériorité de la machine et de ceux-ci. Un des premiers exemples de cette volonté est le programme Turochamp, développé par Alan Turing et David Gawen Champernowne.
Turochamp a été conçu avant même la création des premiers ordinateurs, ce qui montre l'intérêt des échecs pour pouvoir comparer l'intelligence de la machine face à celle de l'homme.

L'ordinateur a pu battre pour la première fois l'homme lors du fameux match Deep Blue contre Garry Kasparov lors de la revanche de 1997 (source INA, Wikipédia) avec un score de 3,5 à 2,5 (3 égalités, 2 victoires et 1 défaite pour Deep Blue).
Lors de ce match, Deep Blue a utilisé pour la première fois « l'ancêtre » des Tablebases, inspiré d'une base de données à 5 pièces créée en 1980 par Ken Thompson. Depuis, différentes Tablebases ont été développées et vont jusqu'à 7 pièces sur l'échiquier ; cependant, nous allons nous concentrer sur une Tablebase 35 pièces pour des raisons de taille de la base. La Tablebase 35 contient donc toutes les combinaisons possibles de coups jusqu'à une fin de partie, en partant de 3 à 5 pièces sur le plateau.

Actuellement, les ordinateurs ont largement dépassé les joueurs humains et les Tablebases en sont une raison principale, car elles permettent de connaître le résultat des finales, peu importe les coups joués par les deux joueurs.

Pour étudier ces bases de données, nous allons nous concentrer sur Redis (Wikipédia), la base de données key/value (source) la plus utilisée.
Dans un premier temps, nous présenterons Redis, son fonctionnement et son histoire. Puis, dans un deuxième temps, nous expliquerons le fonctionnement du stockage de la position : comment transformer la position du plateau d'échecs en une simple clé. Enfin, nous analyserons les performances daccès à laide de Redis et verrons si le nombre de pièces a une incidence sur ces performances.

Redis

Redis est une structure de données NoSQL(NoSQL) clés/valeurs open source, elle a été lancée en 2009 par Salvatore Sanfilippo, son nom signifie Remote Dictionary Server. Sa caractéristique principale est sa rapidité, car les données sont stockées et manipulées principalement en mémoire vive (RAM), contrairement aux systèmes classiques reposant sur le disque dur. Cette architecture permet des temps d'accès très faibles, ce qui la rend particulièrement adaptée comme cache applicatif.

Dans le cadre de notre étude, Redis est utilisé pour stocker les positions d'échecs dans les Tablebases. Chaque position est représentée par une clé unique dérivée par la notation FEN (Forsyth-Edwards Notation) et les informations associées comme les résultats WDL (Win/Draw/Loss) ou DTZ (Distance to Zeroing) sont stockées en tant que valeurs.

Cette approche présente plusieurs avantages. Le chargement et linterrogation des positions pré-calculées sont extrêmement rapides, et ce, même lorsque les requêtes portent sur des millions dentrées. Cela permet dexploiter les Tablebases comme un "oracle" quasi instantané. Cependant, ces performances reposent sur un coût important : comme Redis stocke l'entièreté de ses données en mémoire vive, la consommation de celle-ci augmente directement avec le nombre de positions chargées. Pour des Tablebases à 3, 4 ou 5 pièces, la taille reste raisonnable, mais au fur et à mesure que le nombre de pièces augmente, le volume de données devient très important. Dans ce cas, lutilisation de Redis peut atteindre des dizaines ou centaines de gigaoctets de mémoire, posant un compromis entre performance et ressources matérielles disponibles.

Ainsi, Redis offre une solution particulièrement efficace pour manipuler des positions déchecs pré-calculées, mais nécessite une maîtrise fine du stockage mémoire et de la structure des données utilisées, surtout lorsque la taille des Tablebases augmente.

Stockage

Afin de stocker efficacement les positions déchecs, qui sont extrêmement nombreuses, nous utilisons la notation FEN (ForsythEdwards Notation). Celle-ci encode de manière compacte lensemble de létat dun échiquier dans une chaîne de caractères unique.
Les bases de données de type Syzygy (site officiel, GitHub) utilisent cette FEN comme point de départ : elle est ensuite hachée ou convertie en un index interne afin daccéder rapidement aux informations de Tablebase.

Dans notre étude, nous utilisons Redis, qui peut stocker cette FEN directement comme clé dans un schéma key/value.
Prenons pour exemple la FEN suivante :

4k3/8/3n4/8/7p/1P6/4B3/4K3 b - - 0 1

![Exemple FEN](image/FEN exemple.png)

Chaque élément de la FEN représente une ligne du plateau. Nous allons pouvoir la décomposer :

  • 4k3 pour la 8e ligne indique 4 cases vides, puis le roi noir (k), puis 3 cases vides.
  • Les lettres minuscules (k, q, r, b, n, p) représentent les pièces noires.
  • Les lettres majuscules (K, Q, R, B, N, P) représentent les pièces blanches.
  • La lettre b indique que cest au tour des Noirs de jouer.
  • Les symboles qui suivent concernent les règles particulières du jeu : roque, prise en passant, compteur de coups et numéro du tour.

Voici les lettres correspondant à chaque pièce :

K = roi, N = cavalier, B = fou, R = Tour, Q = Reine, P = pion

Par la suite, il y a une lettre b ou w indiquant le jour qui joue le prochain coup. Enfin, il y a 4 caractères par la suite concernant les règles d'échecs particulières qui ne seront pas détaillés ici. Voici un second exemple représentant la position de départ d'une partie d'échecs : rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1

Utilisation comme clé de stockage

Une fois la position encodée en FEN, on peut utiliser directement comme clé unique dans une base de données. Dans le cas de Syzygy, la chaîne FEN est transformée en un index interne ou hachée pour pointer vers les données de Tablebase. Dans Redis, cette même FEN peut servir telle quelle comme clé (string) doù lon peut associer des valeurs comme WDL ou DTZ. Cette approche garantit qu'une position donnée correspond toujours à une clé unique et reproductible, ce qui permet un accès direct à linformation associée, sans ambiguïté.

Approche Scientifique et Méthodologie Expérimentale

Cette section décrit la méthodologie utilisée pour évaluer les performances de Redis par rapport à Syzygy dans le stockage et laccès aux positions déchecs.
Lobjectif est dobtenir des mesures reproductibles, interprétables et valides, tout en identifiant les biais possibles pouvant affecter lanalyse.

Objectifs expérimentaux

Les expériences menées ont pour but de répondre aux hypothèses suivantes :

  • H1 Incidence du nombre de pièces
    Nous supposons que le nombre de pièces présentes sur léchiquier ninflue pas sur les performances daccès de Redis.

  • H2 Gain de performance
    Nous supposons que Redis, en tant que base de données spécialisée dans les systèmes key/value, offre de meilleures performances que laccès direct sur disque aux tablebases Syzygy.
    De plus, Redis stockant ses paires clé/valeur en mémoire vive, nous nous attendons à un gain de performance significatif dû au temps daccès à la RAM, bien inférieur à celui du disque.

  • H3 Optimisation des clés via Zobrist
    Nous supposons que lutilisation du hash Zobrist fourni par la bibliothèque python-chess permet daméliorer le temps daccès ou lutilisation mémoire par rapport à une clé FEN classique.

  • H4 Optimisation des clés via un hash classique
    Nous supposons que lutilisation dun hash classique permet également daméliorer le temps daccès ou lutilisation mémoire, mais de manière moins efficace que le hash Zobrist.

Environnement expérimental

Cette section décrit lenvironnement matériel et logiciel utilisé pour la réalisation des expériences (configuration matérielle, système dexploitation, versions des logiciels et bibliothèques).

Méthodologie de mesure

Afin de vérifier chacune de ces hypothèses, nous étudions différentes métriques sur des jeux de données de test :

  1. Temps moyen dexécution :
    mesure du temps nécessaire pour accéder à une position dans Redis ou Syzygy, analysée à laide de tests statistiques.

  2. Espace mémoire utilisé par Redis :
    évaluation de la consommation de mémoire vive à partir des outils fournis par Redis.

  3. Nombre de requêtes par seconde (RPS) :
    mesure du débit maximal supporté par chaque solution.

  4. Temps médian et percentile 95 :
    analyse de la dispersion des temps daccès et des valeurs extrêmes.

Génération des positions

Pour chacun de ces tests, nous utilisons une base de 2250 positions, tirées des configurations de tablebases Syzygy que nous avons exploitées.
Ce nombre a été choisi afin de permettre lexécution des tests sur des machines disposant de capacités mémoire limitées, quelle que soit la quantité de mémoire vive (RAM) disponible.

Comparatif

Étant donné que le même jeu de données est utilisé pour lensemble des expériences et que plusieurs machines sont à disposition, nous pouvons comparer le comportement de Redis en fonction :

  • de la quantité de mémoire RAM,
  • du type de disque utilisé,
  • du processeur.

Nous analysons ainsi limpact de ces paramètres sur le temps de réponse et lutilisation des ressources.
Si possible, nous envisageons également détendre les expériences à des jeux de données plus grands ou plus petits afin dobtenir des statistiques plus fines et représentatives.

Résultats et Interprétations

Test 1 : Incidence du nombre de pièces

Afin de tester si le nombre de pièces présentes dans une configuration a une incidence sur le temps de chargement depuis Redis, nous avons réalisé un script permettant deffectuer plusieurs requêtes sur un serveur Redis pour des configurations à 3, 4 et 5 pièces.

Pour chaque configuration, nous avons exécuté un nombre variable de requêtes :

  • 100
  • 1 000
  • 5 000
  • 10 000
  • 50 000
  • 100 000

Pour chaque test, nous avons mesuré le temps minimal, moyen et maximal daccès aux positions.

Après analyse des valeurs obtenues, nous constatons que les temps mesurés restent très proches, malgré laugmentation significative du nombre de requêtes.
De plus, que ce soit pour 3 ou 5 pièces, on observe sur la Figure 1 que les temps moyens restent de lordre du dixième de seconde.

Moyenne du temps de requête

Les graphiques des temps minimum et maximum montrent également des valeurs cohérentes. Les quelques valeurs aberrantes observées sont probablement liées au matériel plutôt quà lalgorithme lui-même.

En effet, la documentation indique que la mémoire DDR4 cadencée autour de 3 000 MHz permet des débits de lecture denviron 20 Go/s. Étant donné que les tables utilisées ne dépassent pas 20 Mo, les résultats obtenus apparaissent cohérents.

Concernant les temps minimum et maximum, ceux-ci étant fortement dépendants du comportement matériel, ils sont moins représentatifs et ne permettent pas de tirer des conclusions solides.
Néanmoins, lanalyse des temps minimum montre des valeurs proches entre les différentes configurations, ce qui confirme labsence dimpact significatif du nombre de pièces sur les performances.

Test 2 : Gain de performances

Après avoir testé Syzygy et Redis sur un même jeu de données (voir Notebook Python), nous sommes arrivés aux conclusions suivantes :

  • Redis est près de 11 fois plus rapide que Syzygy.
  • La latence moyenne de Redis est de 0,35 ms, contre 3,82 ms pour Syzygy.
  • La médiane est également plus faible pour Redis (0,33 ms) que pour Syzygy (1,06 ms).
  • Redis permet en moyenne 1 969 requêtes par seconde, contre seulement 280 requêtes par seconde pour Syzygy.

Ces résultats sont statistiquement significatifs, comme le montrent :

  • le test t de Student apparié (t = 92,45, p < 0,001),
  • le test de KolmogorovSmirnov (KS = 0,708, p < 0,001).

Ces résultats valident lhypothèse H2.

Test 3 : Optimisation des clés avec le hash Zobrist

Afin de vérifier si une autre structure de clé pouvait améliorer les performances ou lutilisation mémoire, nous avons testé, en plus du stockage classique via la FEN, lutilisation du hash Zobrist fourni par la bibliothèque python-chess.

La comparaison entre la base utilisant des clés FEN et celle utilisant des clés Zobrist met en évidence les points suivants :

  • Le hash Zobrist est environ 20 % plus rapide que le stockage en FEN
    (moyenne de 252,5 s contre 308,1 s).
  • Le débit est nettement supérieur, avec en moyenne 55 % de requêtes supplémentaires
    (3 405 contre 2 197).
  • Lutilisation mémoire est également améliorée, avec une clé FEN occupant en moyenne
    117,26 bytes/clé, contre 107,64 bytes/clé pour Zobrist (gain denviron 8 %).

Ces résultats sont statistiquement significatifs, selon :

  • le test t de Student apparié (t = 111,79, p < 0,001),
  • le test de KolmogorovSmirnov (KS = 0,45, p < 0,001).

Lhypothèse H3 est donc validée.

Test 4 : Optimisation des clés avec un hash classique

Pour vérifier lhypothèse H4, nous avons créé une base de données utilisant des clés hashées classiques, puis comparé ses performances avec une base utilisant des clés FEN.

Les résultats observés sont les suivants :

  • Avec les clés FEN :
    • latence moyenne de 0,709 ms,
    • 1 068 requêtes par seconde.
  • Avec les clés hashées :
    • latence moyenne de 0,448 ms,
    • 1 496 requêtes par seconde en moyenne.

Cela représente une amélioration de plus de 35 % en termes de latence et de débit.

Le gain est également notable sur la consommation mémoire :

  • une clé FEN occupe en moyenne 136,46 bytes,
  • une clé hashée occupe en moyenne 97,94 bytes,

soit un gain de 28,3 %.

Ces résultats sont statistiquement significatifs, comme lindiquent :

  • le test t de Student apparié (t = -44,042, p < 0,001),
  • le test de KolmogorovSmirnov (KS = 0,69, p < 0,001).

Lhypothèse H4 est ainsi validée.

Conclusion

Synthèse des résultats

Avec laide de nos expériences, nous avons pu montrer que dautres solutions plus rapides que
les solutions actuellement mises en place par les sites déchecs existent. En effet, nous avons vu
que Redis est nettement plus rapide que Syzygy et quil offre également un débit presque 7 fois
supérieur. Il en va de même pour la façon de stocker les positions.Si lon garde le système de
stockage classique des échecs, on ralentit encore plus le système, car les fonctions de hashage
nous permettent également de gagner en performance et en mémoire, avec pour chacune des
fonctions, une augmentation de minimum 18% en termes de débit mais aussi dun gain en
mémoire conséquent avec plus de 25% pour la fonction de hashage classique. La question se
pose alors de pourquoi lon nutilise pas Redis et le hashage. Utiliser le hashage reviendrait à
perdre de linformation, ce qui est dans ce cas contradictoire comme cest justement ce que lon
cherche à stocker. Enfin, le gain entre Redis et Syzygy est minime et nest pas pertinent pour
plusieurs raisons : Redis en tant que système in-memory est inadapté pour les Tablebases qui
font des centaines de Go, il faut donc un système sur disque où Syzygy est bien meilleur grâce
à la compression. Laccès aux Tablebases est aussi très rare et se fait de manière ciblée, sur
une position et sil y a un changement, cela se tourne vers une position très similaire, le gain de
performances de Redis est donc moins pertinent dans le véritable usage. Enfin, il ne serait pas
possible économiquement de maintenir un tel système avec Redis.

Cette étude nous a néanmoins permis de comparer les différences de performances entre les
approches disques (Syzygy) et les approches mémoires (Redis), de démontrer le poids du choix
de la structure des clés et de mieux comprendre quel système doit être utilisé selon le contexte.

Pour conclure, bien que Redis et le hashage offrent des gains non négligeables, le système
actuel utilisant la FEN et Syzygy reste le meilleur en sappuyant sur lefficacité du stockage et
la maintenabilité que la performance brute dans le cadre du stockage complet des Tablebases.

Limites de létude

Même si les résultats obtenus sont informatifs, plusieurs aspects doivent être pris en compte.
Tout dabord, notre étude ne sappuie que sur un sous-ensemble réduit des véritables tablebases
Syzygy : seules les configurations jusquà 5 pièces ont été testées, ce qui exclut les tablebases
plus volumineuses à 6 et 7 pièces. Léchantillon utilisé reste donc limité et ne permet pas de
tirer des conclusions définitives sur la performance à grande échelle.

Les expériences ont été menées sur nos machines personnelles plutôt que sur des serveurs
dédiés ou des configurations hautes performances utilisées par certaines organisations spécialisées.[8]
Cela peut influencer à la fois la consommation mémoire observée et les temps daccès, et limite
la généralisation des résultats.

Enfin, notre analyse sest concentrée uniquement sur les aspects performance (latence, RPS,
mémoire vive). Dautres dimensions importantes des tablebases — telles que la fiabilité, la com-
pression, lintégrité des données, ou encore les implications pratiques pour les moteurs déchecs
— nont pas été explorées dans cette étude.

À ces limitations sajoute une contrainte méthodologique liée à la mesure de la mémoire :
Redis stocke et traite ses données exclusivement en mémoire vive, ce qui rend impossible une
séparation nette entre mémoire de stockage et mémoire dexécution. Pour Syzygy, nous avons dû
mesurer la mémoire du processus via la bibliothèque psutil, tandis que pour Redis nous navons
accès quà la consommation totale rapportée par le serveur. Nous avons observé que Syzygy
a utilisé environ 205Mo de RAM pour exécuter et lire des tablebases qui est 21,6 Mo, tandis
que Redis a consommé seulement environ 169 Mo pour le même jeu de données. Toutefois, ces
valeurs sont fortement dépendantes de la taille réduite du dataset utilisé. Sur des bases plus
importantes, la consommation de Redis pourrait croı̂tre beaucoup plus rapidement, rendant les
comparaisons moins triviales.

Ouverture (Tablebases à 8 pièces)

Depuis 2012, Les Tablebases à 7 pièces existent, mais il a fallu attendre août 2018 avant quelles
soient complètes. Ceci illustre la difficulté du jeu déchecs et montre pourquoi, au contraire
dautres jeux comme le jeu de dames, ne sera pas résolu. Actuellement, les Tablebases à 8 pièces
ont 15 % des finales sans pions résolues. [10] Ceci montre la difficulté de la progression pour finir
les Tablebases. De plus, on estime la taille totale à plusieurs Pétaoctects, ce qui ne serait même
pas utilisable pour la majorité des ordinateurs, même les plus puissants. Ceci vient du fait que
la base serait 90 fois plus grande que la base à 7 pièces. Enfin ceci aurait seulement un intérêt
théorique et changerait juste la vision de certaines finales (certaines fins de partie autrefois
considérées comme perdantes ont été classifiées comme nulle avec lapparition des tablebases).

Annexe

Figure 2 : Minimum du temps de requête en fonction du nombre de pièces et du nombre de requêtes.

Minimum du temps de requête

Figure 3 : Maximum du temps de requête en fonction du nombre de pièces et du nombre de requêtes.

Maximum du temps de requête

Glossaire

FEN
Notation standard utilisée dans le monde des échecs pour exprimer une position en chaı̂ne
de caractères..

Tablebase
Base de données exhaustive, contenant toutes les possibilités dans un monde limité
ainsi donc que leur résultat optimal..

Références