## 1. Introduction

Cheese est un moteur de jeu d'échecs gratuit écrit en C++.

Ce programme nécessite l'utilisation d'une interface graphique compatible avec les protocoles UCI ou CECP.

Les exécutables de la dernière version sont disponibles ici :

- http://cheesechess.free.fr/download.html

Le code source est disponible ici :

- https://gitlab.com/cheesechess/cheese

Exemples d'interfaces gratuites compatibles :

- Arena Chess

- XBoard

- Cute Chess

- Banksai GUI

- Scid vs PC

- Chess for Android

## 2. Paramètres de configuration

Les paramètres sont dans le fichier cheese.ini qui doit se trouver dans le même répertoire que l'exécutable.

Pour les paramètres qui sont aussi modifiable avec le protocole UCI, les valeurs dans cheese.ini sont les valeur par défaut de ces paramètres.

Ce fichier est chargé une seule fois au lancement du programme.

- Hash

  (par défaut = 256, minimum = 1, maximum = 65536)

  Mémoire (en Mo) utilisée pour la table de hashage principale. La valeur doit être une puissance de 2, sinon le programme arrondis à la puissance de 2 la plus proche. En 32 bits la valeur maximum n'est que de 4096.

- Book

  (par défaut = 0, valeur 0 ou 1)

  Indique si on utilise un livre d'ouvertures (0 = non, 1 = oui)

- BookFile

  Chemin et nom du livre d'ouvertures au format Polyglot. Si le chemin n'est pas précisé le fichier doit se trouver au même endroit que l'exécutable.

- UseStrength

  (par défaut = 0, valeur = 0 ou 1)

  Active ou désactive la réduction du niveau du moteur, définie dans le paramètre StrengthELO.

- StrengthELO

  (par défaut = 3200, valeur entre 1000 et 3200)

  Définit le niveau du moteur en ELO, si UseStrength = 1 Cela ne correspond pas exactement au niveau en ELO d'un joueur humain ou des autres moteurs, mais essai de s'en approcher le plus possible.

- UCILimitMode

  (par défaut = 0, valeur 0 ou 1)

  Définit la méthode utilisé pour réduire le niveau du moteur. 0 permet de réduire la vitesse du moteur 1 permet de limiter le nombre de noeuds cherchés.

- UseNullMovePruning

  (par défaut = 1, valeur 0 ou 1)

  Active ou désactive l'algorithme Null move pruning, le désactiver réduit généralement le niveau du moteur d'environ 100 ELO.

  Activé, le moteur risque d'ignorer certains coups important dans les positions de type Zugzwang.

- UseLMR

  (par défaut = 1, valeur 0 ou 1)

  Active ou désactive l'algorithme Late Move Reduction, le désactiver réduit généralement le niveau du moteur d'environ 100 ELO.

  Activé, le moteur risque d'ignorer certains coups important.

DrawScore

(par défaut = 0, valeurs généralement maximum entre -50 et 50)

Contempt factor : correspond au score qui représente une position nulle pour le moteur. La valeur doit rester proche de zéro.

- MaxThreads

  (par défaut = 1, valeur entre 1 et le nombre de coeurs CPU disponibles)

  Définit le nombre de threads utilisées pour la recherche.

  La valeur maximum recommandée est le nombre de vrai coeurs CPU disponibles sur la machine.

- SMPMode

  (par défaut ybwc, valeur ybwc ou lazy)

  Définit l'algorithme utilisé pour la gestion de plusieurs threads

  - ybwc = Young Brother Wait Concept
  - lazy = Lazy SMP (shared hash table)

  Dans la version actuelle, ybwc ne gère que 64 threads contre 256 pour lazy SMP (sous Windows le nombre de threads maximum reste limité à 64 pour l'instant)

- MinSplitDepth

  (par défaut 4, valeur entre 4 et 8, voir plus)

  Pour l'algorithme ybwc, correspond à la profondeur minimum à atteindre avant d'utiliser l'algorithme ybwc.

- UsePersonality

  (par défaut 0, valeur 0 ou 1)

  Active ou désactive le système de personnalités pour l'évaluation.

- PersonalityFile

  (par défaut = personality/default.txt)

  Nom du fichier de personnalité, si UsePersonality = 1

- LogLevel

  (par défaut 31, valeur entre 0 et 31)

  Définit le niveau d'affichage des logs, c'est une somme de plusieurs options :

  - 1 = informations normales
  - 2 = warnings
  - 4 = erreurs
  - 8 = debug (désactivé en version release)
  - 16 = messages des protocoles UCI ou CECP

  0 désactive tout, 31 active toutes les options.

  logfile.txt sera créé dans le même répertoire que l'executable.

- SyzygyPath

  (par défaut <empty>)

  Définit le chemin où sont situé les tables de fin de parties Syzygy <empty> si non utilisé

- SyzygyProbeDepth

  (par défaut 1)

  Définit la profondeur utilisé pour les tables de fin de partie.

- Syzygy50MoveRule

  (par défaut 0, valeur 0 ou 1)

  Utilisation de la règle des 50 coups dans l'utilisation des tables de fin de partie.

- SyzygyProbeLimit

  (par défaut 7)

  Définit le nombre de pièces maximum sur le plateau pour commencer à utiliser les tables de fin de partie.

## 3. Options de la ligne de commande

- cheese -help

  Affiche la liste des commandes disponibles.

- cheese -testsuite HASH_SIZE NB_THREADS {depth|time} VALUE FILENAME.epd

  Fait une recherche sur toutes les positions du fichier FILENAME, au format epd compare le meilleur coup avec l'option bm ou am du format epd

  - HASH_SIZE = taille de la hash table pour la recherche
  - NB_THREADS = nombre de threads utilisées
  - depth VALUE = limite la recherche à une profondeur
  - time VALUE = limite la recherche en secondes

- cheese -perft DEPTH [-fen "FEN_STRING"]

  Compte le total de tous les coups possibles jusqu'à une certaine profondeur

- cheese -perftd DEPTH [-fen "FEN_STRING"]

  Compte le total de tous les coups possibles, échecs, mats, captures, en passant, promotions, et roques, jusqu'à une certaine profondeur

- cheese -divide DEPTH [-fen "FEN_STRING"]

  Compte le total de tous les coups possibles jusqu'à une certaine profondeur, pour chaques coups possible de la position

- cheese -benchmark HASH_SIZE NB_THREADS {depth|time} VALUE [FILENAME.epd]

  Lance une analyse de 20 positions par défaut ou les positions données en paramètre, et affiche le temps, nombre de noeuds, et vitesse

- cheese -probetb "FEN_STRING"

  Intéroge les tables de fin de parties (si présentes) pour une position

- cheese -probebook "FEN_STRING"

  Intéroge le livre d'ouvertures (si présent), pour une position

## 4. Paramètres UCI

- Hash

  (par défaut = 256, minimum = 1, maximum = 65536)

  Mémoire (en Mo) utilisée pour la table de hashage principale. La valeur doit être une puissance de 2, sinon le programme arrondis à la puissance de 2 la plus proche. En 32 bits la valeur maximum n'est que de 4096.

- Ponder

  (par défaut = false, true ou false

  Active le pondering, le moteur réfléchis pendant que l'adversaire joue.

- OwnBook

  (par défaut = false, valeur false ou true)

  Indique si on utilise un livre d'ouvertures.

- Book

  Chemin et nom du livre d'ouvertures au format Polyglot. Si le chemin n'est pas précisé le fichier doit se trouver au même endroit que l'exécutable.

- Clear

  Permet d'éffacer le contenu de la table de hashage.

- UsePersonality

  (par défaut false, valeur false ou true)

  Active ou désactive le système de personnalité pour l'évaluation.

- PersonalityFile

  (par défaut = personality/default.txt)

  Nom du fichier de personnalité, si UsePersonality = 1

- UCI_Chess960

  (par défaut = false, valeur false ou true)

  Active ou désactive le mode Chess960 ou FRC.

- MultiPV

  (par défaut = 0, valeur entre 0 et 32)

  Active l'analyse de plusieurs coups possibles pour la positions actuelle, les différents coups sont triés selon le score.

- NullMovePruning

  (par défaut = true, valeur false ou true)

  Active ou désactive l'algorithme Null move pruning, le désactiver réduit généralement le niveau du moteur d'environ 100 ELO.

  Activé, le moteur risque de rater certains coups important dans les positions de type Zugzwang.

- LateMoveReduction

  (par défaut = true, valeur false ou true)

  Active ou désactive l'algorithme Late Move Reduction, le désactiver réduit généralement le niveau du moteur d'environ 100 ELO.

  Activé, le moteur risque de rater certains coups important.

- Threads

  (par défaut = 1, valeur entre 1 et le nombre de coeurs disponibles)

  Définit le nombre de threads utilisées pour la recherche.

  La valeur maximum recommandée est le nombre de vrai coeurs disponibles sur la machine.

- SMPMode

  (par défaut ybwc, valeur ybwc ou lazy)

  Définit l'algorithme utilisé pour la gestion de plusieurs threads

  - ybwc = Young Brother Wait Concept
  - lazy = Lazy SMP (shared hash table)

  Dans la version actuelle, ybwc ne gère que 64 threads contre 256 pour lazy SMP (sous Windows le nombre de threads maximum reste limité à 64 pour l'instant)

- UCI_LimitStrength

  (par défaut = false, valeur false ou true)

  Définit la méthode utilisé pour réduire le niveau du moteur. 0 permet de réduire la vitesse du moteur 1 permet de limiter le nombre de noeuds cherchés

- UCI_Elo

  (par défaut = 3200, valeur entre 1000 et 3200)

  Définit le niveau du moteur en ELO, si UCI_LimitStrength = true Cela ne correspond pas exactement au niveau en ELO d'un joueur humain ou des autres moteurs, mais ça s'en rapproche.

- LimitStrengthMode

  (par défaut = speed, valeur speed ou nodes)

  Définit la méthode utilisé pour réduire le niveau du moteur. speed permet de réduire la vitesse du moteur, nodes permet de limiter le nombre de noeuds cherchés

- DrawScore

  (par défaut = 0, valeurs généralement maximum entre -50 et 50)

  Contempt factor : correspond au score qui représente une position nulle pour le moteur. La valeur doit rester proche de zéro.

- SyzygyPath

  (par défaut <empty>)

  définit le chemin où sont situé les tables de fin de parties Syzygy <empty> si non utilisé

- SyzygyProbeDepth

  (par défaut 1)

  définit la profondeur utilisé pour les tables de fin de partie.

- Syzygy50MoveRule

  (par défaut 0, valeur 0 ou 1)

  Utilisation de la règle des 50 coups dans l'utilisation des tables de fin de partie.

- SyzygyProbeLimit

  (par défaut 7)

  Définit le nombre de pièces sur le plateau maximum pour commencer à utiliser les tables de fin de partie.

## 5. Paramètres de personnalités

Par défaut le système de de personnalités est désactivé, les paramètres de l'évaluation ont été calculés automatiquement à partir de plusieurs millions de positions dans des parties entre différentes versions du moteur.

Pour choisir une personnalité il faut editer cheese.ini et modifier UsePersonality=1 pour l'utiliser , puis choisir le fichier correspondant à la personnalité avec par exemple pour la personnalité par défaut : PersonalityFile=personality/default.txt

Les paramètres du fichier personality/default.txt correspondent aux valeurs par défaut sans personnalité.

Si un paramètre n'est pas définit dans le fichier de personnalité, il aura la valeur par défaut.

Les valeur des paramètres suivants sont basé sur la valeur matériel d'un pion, on donne généralement la valeur 100 à un pion, et donc si un paramètre vaut 25, ça correspond à un avantage de 1/4 de la valeur d'un pion.

Une valeur positive correspond à un avantage, une valeur négative à une pénalité.

Les paramètres se terminant par Mid correspondent à la valeur en début et milieu de partie, et ceux se terminant par End à la valeur en fin de partie.

- PawnValueMid, PawnValueEnd

  Valeur matériel d'un pion.

- KnightValueMid, KnightValueEnd

  Valeur matériel d'un cavalier.

- BishopValueMid, BishopValueEnd

  Valeur matériel d'un fou.

- RookValueMid, RookValueEnd

  Valeur matériel d'une tour.

- QueentValueMid, QueenValueEnd

  Valeur matériel d'une reine.

- BishopPairMid, BishopPairEnd

  Bonus quand on a ses 2 fous.

- PawnDoubledMid, PawnDoubledEnd

  Pénalité pour chaques pions doublés.

- PawnIsolatedMid, PawnIsolatedEnd

  Pénalité pour chaques pions isolés.

- PawnBackwardMid, PawnBackwardEnd

  Pénalité pour chaques pions arriérés.

- RookOpenFileMid, RookOpenFileEnd

  Bonus pour une tour sur une colonne ouverte.

- RookSemiOpenFileMid, RookSemiOpenFileEnd

  Bonus pour une tour sur une colonne semi-ouverte.

- Rook7thRankMid, Rook7thRankEnd

  Bonus pour une tour sur la 7ème rangée.

Les paramètres suivants sont des pourcentage (0..100) mais peuvent éventuellement êtres supérieurs à 100.

- OutpostKnight

  Importance d'un cavalier en avant poste.

- OutpostBishop

  Importance d'un fou en avant poste.

- PawnShield

  Importance du bouclier de pions devant le roi.

- PassedPawns

  Importance des pions passés.

Les paramètres suivants terminé par Own correspondent au point de vue du moteur,et Opp au point de vue de son adversaire.

Cela permet d'avoir des valeurs asymétriques pour l'évaluation, pour la protection du roi cela va permettre d'avoir une personnalité plus ou moins agressive, tandis que pour la mobilité cela permettra de donner plus d'importance au développement des pièces...

- KingSafetyOwn

  Importance de la protection du roi du point de vue du moteur.

- KingSafetyOpp

  Importance de la protection du roi du point de l'adversaire.

- MobilityOwn

  Importance de la mobilité des pièces du point de vue du moteur.

- MobilityOpp

  Importance de la mobilité des pièces du point de vue de l'adversaire.

- Randomness

  Une valeur aléatoire est ajoutée à l'évaluation des positions, plus ou moins importante selon la valeur du pourcentage. Ce paramètre va réduire la force du moteur.

Remarque sur les versions précédentes :

Depuis la version 3.1 on peut définir les paramètres du matériel en milieu et en fin de partie

Depuis la version 3.2, les paramètres des pions isolés, doublés, arriérés, sont négatifs, alors qu'avant ils étaient positifs.

Les paramètres OutpostKnight, OutpostBishop, PawnShield, PassedPawns n'existaient pas avant la version 3.2