### 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](https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs), [Wikipédia](https://fr.wikipedia.org/wiki/Matchs_Deep_Blue_contre_Kasparov)) 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 **3–5 pièces** pour des raisons de taille de la base. La Tablebase 3–5 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](https://en.wikipedia.org/wiki/Redis)), la base de données **key/value** ([source](https://en.wikipedia.org/wiki/Key%E2%80%93value_database)) 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 d’accès à l’aide 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](https://fr.wikipedia.org/wiki/NoSQL)) clés/valeurs open source, elle a été lancée en 2009 par Salvatore Sanfilippo, son nom signifie **Re**mote **Di**ctionary **S**erver. 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 l’interrogation des positions pré-calculées sont extrêmement rapides, et ce, même lorsque les requêtes portent sur des millions d’entrées. Cela permet d’exploiter 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, l’utilisation 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** (Forsyth–Edwards Notation). Celle-ci encode de manière compacte l’ensemble de l’état d’un échiquier dans une chaîne de caractères unique.  
Les bases de données de type **Syzygy** ([site officiel](https://syzygy-tables.info/), [GitHub](https://github.com/syzygy1/tb)) utilisent cette FEN comme point de départ : elle est ensuite hachée ou convertie en un index interne afin d’accé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 **c’est 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) d’où l’on 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 à l’information associée, sans ambiguïté.

## Références

- **1997 : l'ordinateur bat Garry Kasparov, un tournant dans l'histoire des échecs**  
  https://www.ina.fr/ina-eclaire-actu/1997-l-ordinateur-deep-blue-bat-garry-kasparov-un-tournant-dans-l-histoire-des-echecs

- **Matchs Deep Blue contre Kasparov — Wikipédia**  
  https://fr.wikipedia.org/wiki/Matchs_Deep_Blue_contre_Kasparov

- **Redis — Wikipédia (EN)**  
  https://en.wikipedia.org/wiki/Redis

- **Key/value — Wikipédia (EN)**  
  https://en.wikipedia.org/wiki/Key%E2%80%93value_database

- **NoSQL — Wikipédia**  
  https://fr.wikipedia.org/wiki/NoSQL

- **Syzygy Endgame Tablebases — Ronald de Man**  
  https://syzygy-tables.info/

- **Syzygy Endgame Tablebases — GitHub Repository**  
  https://github.com/syzygy1/tb

- **What is Redis? — IBM**  
  https://www.ibm.com/think/topics/redis

- **Eight-piece tablebases — Peter Wong**  
  https://www.chess.com/blog/Rocky64/eight-piece-tablebases-a-progress-update-and-some-results

- **Taux de transfert, bande passante et latences DDR4 — Jean-Pierre Novak**  
  https://www.eatyourbytes.com/fr/debit-vitesse-latences-et-voltage-des-memoires-ram-ddr4

- **Microsoft Azure, partenaire de la FFE**  
  https://www.echecs.asso.fr/Actu.aspx?Ref=14252
