-------------------------------------------------------------------------------
- Cheese version 2.2
-------------------------------------------------------------------------------

Auteur   : Patrice Duhamel (cheesechess@free.fr)

Site web : http://cheesechess.free.fr/

-------------------------------------------------------------------------------
Fichiers
-------------------------------------------------------------------------------

Windows :

  cheese-22-win-64-pop.exe   : version 64 bits utilisant une instruction cpu pour compter les bits (la version la plus rapide).
  cheese-22-win-64.exe       : version 64 bits pour les cpu ne supportant pas l'instruction de comptage de bits
  cheese-22-win-32.exe       : version 32 bits

Windows XP :

  cheese-22-winxp-64-pop.exe   : version 64 bits utilisant une instruction cpu pour compter les bits (la version la plus rapide).
  cheese-22-winxp-64.exe       : version 64 bits pour les cpu ne supportant pas l'instruction de comptage de bits
  cheese-22-winxp-32.exe       : version 32 bits

Linux :

  cheese-22-linux-64-pop     : version 64 bits utilisant une instruction cpu pour compter les bits (la version la plus rapide).
  cheese-22-linux-64         : version 64 bits pour les cpu ne supportant pas l'instruction de comptage de bits
  cheese-22-linux-32         : version 32 bits

Mac OS :

  cheese-22-mac-64-pop	   : version 64 bits utilisant une instruction cpu pour compter les bits (la version la plus rapide).
  cheese-22-mac-64	   : version 64 bits pour les cpu ne supportant pas l'instruction de comptage de bits

Android :

  cheese-22-android-armv7   : version 32 bits armv7 pour Android 4.1 et supérieur
  cheese-22-android-armv8   : version 64 bits armv8 pour Android 5.0 et supérieur
  cheese-22-android-x86	    : version 32 bits x86 pour Android 4.1 et supérieur
  cheese-22-android-x86_64  : version 64 bits x86_64 pour Android 5.0 et supérieur

Raspberry PI :

  cheese-22-rpi-armv6	    : version 32 bits pour Raspberry PI armv6
  cheese-22-rpi-armv7	    : version 32 bits pour Raspberry PI armv7

  
La version Windows est compilé avec Visual Studio 2015 Community.
La version Windows XP est compilé avec Visual Studio 2010 Express.
La version Linux est compilé sous Linux Mint 20 avec gcc 9.3.0, sans librairies dynamiques.
La version Mac OS est compilé sous OS 10.11.6 avec clang 4.2.1.
La version Android est compilé avec le NDK Android r18b. 

-------------------------------------------------------------------------------
Installation
-------------------------------------------------------------------------------

* Arena Chess 

  - Dézipper tous les fichiers dans un même répertoire   
  - Lancer Arena Chess
  - dans le menu Engines choisir "Install New Engine"
  - Choisir UCI ou Xboard (le moteur fonctionne dans les 2 modes)
  - Choisir l'executable de Cheese dans le répertoire où il a été copié
  - Pour configurer Cheese, choisir l'option Configure dans le menu Engines

* Xboard / Winboard

  - Dézipper tous les fichiers dans un même répertoire
  - Lancer Winboard, et choisir "Load First Engine" dans le menu "Engine"
  - Indiquer le chemin de l'executable du moteur, là où il a été installé
  - pour configurer cheese, modifiez le fichier cheese.ini

* Android

  - Utiliser une interface qui accepte les modules UCI/XBoard, par exemple Chess for Android ou Droid Fish.

* Paramètres

  Le fichier cheese.ini permet de choisir certains paramètres en version Xboard :

  Hash = taille de la hash table en Mo (ex: 8, 16, 32 ,64, 128, 256 ...)
	 minimum = 1, maximum = 16384 pour la version 64 bits et 2048 pour la version 32 bits

  Book = 1 ou 0 , 1 = utilisation d'un livre d'ouverture compatible avec Cheese (cheese utilise son propre format)
			
  BookFile = chemin du livre d'ouverture

  BookSelectivity = Pourcentage de chance pour choisir un coup dans le livre d'ouverture (0..100)

  UseStrength = 0 or 1, 1 = utilise le paramètre StrengthELO pour réduire le niveau ELO du programme

  StrengthELO = valeur entre 1000 et 2700, correspondant au niveau ELO du programme
	la vitesse du moteur est réduite jusqu'a 2000 ELO, ensuite l'evaluation est plus aléatoire en dessous 
	de 2000 ELO

  LogLevel = active ou désactive le fichier log (0 = désactivé, 127 = active toutes les options)
    ajouter les valeurs pour plusieurs options :
	 1 = informations basiques
	 8 = avertissements
	16 = erreurs
	32 = erreurs critiques
	64 = informations de l'interface (UCI / Xboard)
    note : le fichier log peut ralentir le moteur.

  UseNullMovePruning = 1 or 0, utilisé pour activer ou désactiver le Null Moves Pruning 
 
  UseLMR = 1 or 0, utilisé pour activer ou désactiver le Late Move Reduction

  DrawScore = vaeur utilisé pour un score nul (contempt factor)
	par defaut = 0 (100 = valeur d'un pion)

  UsePersonality = 0 = désactive la personalité, 1 = active la personalité définit dans PersonalityFile

  PersonalityFile = Ficher .txt pour définir une personalité

  MaxThreads = nombre maximum de threads utilisées par la recherche

  MinSplitDepth = profondeur de partage minimum utilisé par l'algorithme YBWC (plusieurs threads)
     par defaut = 4

  UseInputThread = 0 ou 1 pour utiliser une thread séparée pour les entrées venant de l'interface, 
  si c'est désactivé le pondering ne fonctionnera pas pour la version Windows.  

  UCILimitMode = 0 or 1, 0 = réduit la vitesse pour limiter la force, 1 = réduite le nombre de noeuds
	  pour limiter la force.

* Ligne de commande

  -help

    affichage des options disponibles 

  -testsuite htsize nbthreads mode valeur fichier

    lance l'analyse d'un fichier EPD avec : 	
	htsize = taille de la hashtable en Mo
	nbthreads = nombre de threads utilisées
  	mode = depth ou time
	valeur = si mode = depth, la profondeur a atteindre pour chaque positions 
  		 si mode = time, le temps en secondes de la recherche pour chauqe position
	fichier = fichier .epd avec la liste des positions

  -perft profondeur

    lance le calcul du nombre de noeuds a partir de la position actuelle, jusqu'à la profondeur indiquée 

  -perft profondeur -fen "position"

    lance le calcul du nombre de noeuds a partir de la position FEN donnée, jusqu'à la profondeur indiquée 

  -perftd profondeur
  -perftd profondeur -fen "position"

    même chose que perft mais avec le nombre de captures, en passant, promotions, roques, échecs, et mats

  -divide profondeur

    lance le calcul du nombre de noeuds pour chaque coups possibles, a partir de la position actuelle, 
    jusqu'a la profondeur indiquée 

  -divide profondeur -fen "position"

    lance le calcul du nombre de noeuds pour chaque coups possibles, a partir de la position FEN donnée, 
    jusqu'a la profondeur indiquée 

  -buildbook fichier.pgn fichier.bin profondeur nombre

    création d'un nouveau livre d'ouvertures a partir d'un fichier PGN
    la profondeur est le nombre de coups maximum de l'ouverture, nombre le nombre minimum de fois 
    que doit être utilisé cette ouverture pour être prise en compte

  -benchmark htsize nbthreads mode valeur fichier

    Lance un benchmark avec :
        htsize = taille de la hashtable en Mo
	nbthreads = nombre de threads utilisées
  	mode = depth ou time
	valeur = si mode = depth, la profondeur a atteindre pour chaque positions 
  		 si mode = time, le temps en secondes de la recherche pour chauqe position
	fichier = fichier .epd avec la liste des positions

    si fichier n'est pas indiqué, utilise 24 positions par défaut.

* Livre d'ouvertures

  Cheese peut utiliser un livre d'ouverture dans son propre format.

  le livre cheeseopenbook.bin a été créé a partir de gm2600.pgn, avec une profondeur de 
  10 demi coups, et pour des ouvertures utilisées au minimum 5 fois.

* Personalités

  Les paramètres par défaut sont disponibles dans personality/default.txt

  Il faut activer l'utilisation de la personalité dans l'interface ou le fichier .ini, et choisir 
  le fichier .txt correspndant à la personalité.
 
  Les personalités ne sont pas compatibles avec l'option UCI_Strength, mais il est possible 
  de définir soi même les mêmes paramètres utilisé par UCI_Strength dans le fichier de personalité.
  (Randomness et ReduceSpeed)

  * Parametres :

	- PawnValue 
	- KnightValue
	- BishopValue
	- RookValue
	- QueenValue
		valeur matérielle des différentes pièces

	- BishopPair
		valeur matériel de la paire de fou

	- PawnDoubledMid
	- PawnDoubledEnd
		valeur de la pénalité de pions doublés en milieu et fin de partie

	- PawnIsolatedMid
	- PawnIsolatedEnd
		valeur de la pénalité de pions isolés en milieu et fin de partie

	- PawnBackwardMid
	- PawnBackwardEnd
		valeur de la pénalité de pions arriérés en milieu et fin de partie

	- RookOpenFileMid
	- RookOpenFileEnd
		valeur du bonus pour une tour sur une colonne ouverte en milieu et fin de partie

	- RookSemiOpenFileMid
	- RookSemiOpenFileEnd
		valeur du bonus pour une tour sur une colonne semi ouverte en milieu et fin de partie

	- Rook7thRankMid
	- Rook7thRankEnd
		valeur du bonus pour une tour sur la rangée 7 en milieu et fin de partie

	- KingSafetyOwn
	- KingSafetyOpp
		pourcentage (0..100) d'utilisation de la protection du roi, pour le moteur (own) et l'adversaire (opp)

	- MobilityOwn
	- MobilityOpp
		pourcentage (0..100) d'utilisation de la mobilité pour le moteur (own) et l'adversaire (opp)

	- Randomness
		valeur entre 0 et 100 pour rendre l'évaluation plus ou moins aléatoire 
		0 = désactivé
		100 = maximum

	- ReduceSpeed
		limite la vitesse de recherche en Noeuds / secondes
		0 = désactivé
		(Valeur minimum : ne devrait pas descendre en dessous de 150000)

-------------------------------------------------------------------------------
Changements dans la version 2.2
-------------------------------------------------------------------------------

    * Version 2.2 - 5 Septembre 2020

	- corrige des coups invalides avec le pondering
	- corrige un problème dans makemoke pour le FRC introduit dans la version 2.1
	- corrige un problème avec UCI strength et le protocol UCI
	- le paramètre randomness n'est plus utilisé que dans les personnalités
	- ne compte plus les noeuds supprimés par le pruning
	- change la table PST pour le roi
	- change les paramètres du LMP
	- supprime la pénalité pour aucun pions en fin de partie
	- ajoute les counter moves
	- utilise futility pruning et razoring en fin de partie
	- réduit la table history pour les coups qui n'améliorent pas la position
	- utilise un tableau pour le MVVLVA
	- optimisations

-------------------------------------------------------------------------------
Remerciements
-------------------------------------------------------------------------------

J'aimerai remercier spécialement les personnes suivantes pour leur travail, les documents qu'ils ont publié qui m'ont
aidé et motivé à créer mon moteur de jeu d'échecs :

 Robert M. Hyatt, Bruce Morland, Gerd Isenberg, Pradu Kannan, Grant Osborn, Jonatan Peterson.

Merci aux participants des forums winboard et talkchess, 
aux personnes qui passent du temps à tester les moteurs de jeu d'échec et à ceux qui ont signalé certains problèmes.

Merci aux auteurs de Stockfish, Arasan, et Crafty pour toutes les informations sur l'utilisation de plusieurs 
threads.

-------------------------------------------------------------------------------
Licence
-------------------------------------------------------------------------------

Copyright 2006-2020 DUHAMEL Patrice.
Ce programme est distribué gratuitement, et ne doit pas être vendu ou distribué
sans l'autorisation de l'auteur.

