-------------------------------------------------------------------------------
- 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 suprieur
  cheese-22-android-armv8   : version 64 bits armv8 pour Android 5.0 et suprieur
  cheese-22-android-x86	    : version 32 bits x86 pour Android 4.1 et suprieur
  cheese-22-android-x86_64  : version 64 bits x86_64 pour Android 5.0 et suprieur

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 

  - Dzipper tous les fichiers dans un mme rpertoire   
  - 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 rpertoire o il a t copi
  - Pour configurer Cheese, choisir l'option Configure dans le menu Engines

* Xboard / Winboard

  - Dzipper tous les fichiers dans un mme rpertoire
  - 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.

* Paramtres

  Le fichier cheese.ini permet de choisir certains paramtres 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 paramtre StrengthELO pour rduire le niveau ELO du programme

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

  LogLevel = active ou dsactive le fichier log (0 = dsactiv, 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 dsactiver le Null Moves Pruning 
 
  UseLMR = 1 or 0, utilis pour activer ou dsactiver le Late Move Reduction

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

  UsePersonality = 0 = dsactive la personalit, 1 = active la personalit dfinit dans PersonalityFile

  PersonalityFile = Ficher .txt pour dfinir une personalit

  MaxThreads = nombre maximum de threads utilises 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 spare pour les entres venant de l'interface, 
  si c'est dsactiv le pondering ne fonctionnera pas pour la version Windows.  

  UCILimitMode = 0 or 1, 0 = rduit la vitesse pour limiter la force, 1 = rduite 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 utilises
  	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 indique 

  -perft profondeur -fen "position"

    lance le calcul du nombre de noeuds a partir de la position FEN donne, jusqu' la profondeur indique 

  -perftd profondeur
  -perftd profondeur -fen "position"

    mme 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 indique 

  -divide profondeur -fen "position"

    lance le calcul du nombre de noeuds pour chaque coups possibles, a partir de la position FEN donne, 
    jusqu'a la profondeur indique 

  -buildbook fichier.pgn fichier.bin profondeur nombre

    cration 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 utilises
  	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 dfaut.

* 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 utilises au minimum 5 fois.

* Personalits

  Les paramtres par dfaut 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 personalits ne sont pas compatibles avec l'option UCI_Strength, mais il est possible 
  de dfinir soi mme les mmes paramtres utilis par UCI_Strength dans le fichier de personalit.
  (Randomness et ReduceSpeed)

  * Parametres :

	- PawnValue 
	- KnightValue
	- BishopValue
	- RookValue
	- QueenValue
		valeur matrielle des diffrentes pices

	- BishopPair
		valeur matriel de la paire de fou

	- PawnDoubledMid
	- PawnDoubledEnd
		valeur de la pnalit de pions doubls en milieu et fin de partie

	- PawnIsolatedMid
	- PawnIsolatedEnd
		valeur de la pnalit de pions isols en milieu et fin de partie

	- PawnBackwardMid
	- PawnBackwardEnd
		valeur de la pnalit de pions arrirs 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 range 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 alatoire 
		0 = dsactiv
		100 = maximum

	- ReduceSpeed
		limite la vitesse de recherche en Noeuds / secondes
		0 = dsactiv
		(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 problme dans makemoke pour le FRC introduit dans la version 2.1
	- corrige un problme avec UCI strength et le protocol UCI
	- le paramtre randomness n'est plus utilis que dans les personnalits
	- ne compte plus les noeuds supprims par le pruning
	- change la table PST pour le roi
	- change les paramtres du LMP
	- supprime la pnalit pour aucun pions en fin de partie
	- ajoute les counter moves
	- utilise futility pruning et razoring en fin de partie
	- rduit la table history pour les coups qui n'amliorent pas la position
	- utilise un tableau pour le MVVLVA
	- optimisations

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

J'aimerai remercier spcialement les personnes suivantes pour leur travail, les documents qu'ils ont publi qui m'ont
aid et motiv  crer 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 problmes.

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.

