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

Author   : Patrice Duhamel (cheesechess@free.fr)

Web site : http://cheesechess.free.fr/en/index.html

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

Windows : 

  cheese-22-win-64-pop.exe   : 64 bits version using a cpu instruction for bitcount (the fastest version)
  cheese-22-win-64.exe       : 64 bits version for cpu without the bitcount instruction
  cheese-22-win-32.exe       : 32 bits version

Windows XP :

  cheese-22-winxp-64-pop.exe   : 64 bits version using a cpu instruction for bitcount (the fastest version)
  cheese-22-winxp-64.exe       : 64 bits version for cpu without the bitcount instruction
  cheese-22-winxp-32.exe       : 32 bits version

Linux : 

  cheese-22-linux-64-pop     : 64 bits version using a cpu instruction for bitcount (the fastest version)
  cheese-22-linux-64         : 64 bits version for cpu without the bitcount instruction
  cheese-22-linux-32         : 32 bits version

Mac OS :

  cheese-22-mac-64-pop	   : 64 bits version using a cpu instruction for bitcount (the fastest version)
  cheese-22-mac-64	   : 64 bits version for cpu without the bitcount instruction

Android :

  cheese-22-android-armv7   : 32 bits version armv7 for Android 5 and more
  cheese-22-android-armv8   : 64 bits version armv8 for Android 5 and more
  cheese-22-android-x86	    : 32 bits version armv7 for Android 5 and more
  cheese-22-android-x86_64  : 64 bits version armv8 for Android 5 and more

Raspberry PI :

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

Windows version was compiled with Visual Studio 2015 Community.
Windows XP version was compiled with Visual Studio 2010 Express.
Linux version was compiled on Linux Mint 20 with gcc 9.3.0, without dynamic library.
Mac OS version was compiled on OS 10.11.6 with clang 4.2.1.
Android Version is compiled with Android NDK r18b.   

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

* Arena Chess

  - Unzip all files in a folder    
  - Launch Arena Chess
  - In "Engines" Menu, choose "Install New Engine"
  - Choose UCI or Xboard (the engine works in both modes)
  - Choose Cheese executable in the folder it was installed
  - To configure Cheese, choose the option Configure in the Engines menu

* Xboard / Winboard

  - Unzip all files in a folder
  - Launche Winboard and choose "Load First Engine" in the "Engine" menu
  - Enter the path of the engine where it was installed
  - to configure Cheese, edit the file cheese.ini

* Android

  - Use an application that accept UCI/Xboard modules, for exemple Chess for Android or Droid Fish.

* Parameters

  The file cheese.ini let you choose some parameters in Xboard version :

  Hash = size of the Hash table in Mb (ex: 8, 16, 32 ,64, 128, 256 ...)
	 minimum = 1, maximum = 16384 for 64 bits version and 2048 for 32 bits version

  Book = 1 or 0 , 1 = use an opening book, compatible with Cheese (cheese use his own file format)
			
  BookFile = path to the opening book file

  BookSelectivity = Percent chance to select a move in the opening book (0..100)

  UseStrength = 0 or 1, 1 = use the StrengthELO parameter to reduce ELO strength of the engine

  StrengthELO = value between 1000 and 2700, corresponding to the ELO level of the engine
	the speed of the engine is reduced until 2000 ELO, and add more randomness under 2000 ELO

  LogLevel = enable or disable logfile (0 = disable, 127 = enable all informations)
    add values for multiple options :
	 1 = basic informations
	 8 = warnings
	16 = errors
	32 = critical errors 
	64 = gui informations (UCI / Xboard)
    note : log file can slow down the engine.

  UseNullMovePruning = 1 or 0, used to enable or disable Null Moves Pruning 
 
  UseLMR = 1 or 0, used to enable or disable Late Move Reduction

  DrawScore = value used for draw score (contempt factor)
	default = 0 (100 = value of a pawn)

  UsePersonality = 0 = disable personality, 1 = enable personality defined in PersonalityFile

  PersonalityFile = .txt file to define a personality

  MaxThreads = maximum number of threads used by the search

  MinSplitDepth = minimum split depth used by YBWC algorightm (using multiple threads)
     default = 4

  UseInputThread = 0 or 1 to use a separate thread for GUI inputs, if disabled pondering 
  will not work in Windows version
  
  UCILimitMode = 0 or 1, 0 = reduce speed to limit strength, 1 = reduce nodes to limit strength

* Command line

  -help

    show available options 

  -testsuite htsize nbthreads mode value filename
  
    run analysis of a EPD file with :
        htsize = hash table size in Mb
	nbthreads = number of threads used
  	mode = depth or time
	value = if mode = depth , depth to reach for each positions
 		if mode = time , time in seconds to search each positions
	filename = .epd file with the positions to search

  -perft depth

    search number of nodes from the current position, to the selected depth 

  -perft depth -fen "position"

    search number of nodes from the selected FEN position, to the selected depth 

  -perftd depth
  -perftd depth -fen "position"

    same as perft but with number of captures, en passant, promotions, castle, checks, and mates

  -divide depth

    search number of nodes for each possible moves from the current position, 
    to the selected depth 

  -divide depth -fen "position"

    search number of nodes for each possible moves from the selected FEN position, 
    to the selected depth 

  -buildbook file.pgn file.bin depth number

    Create a new opening book from a PGN file.
    the depth is the maximum number of moves in the opening, number is the minimum number of moves 
    for the opening to be used.

  -benchmark htsize nbthreads mode value filename

    Run a benchmark with :
        htsize = hash table size in Mb
	nbthreads = number of threads used
  	mode = depth or time
	value = if mode = depth , depth to reach for each positions
 		if mode = time , time in seconds to search each positions
	filename = .epd file with the positions to search

    if filename is not set, 24 default positions are used.

* Opening books

  Cheese can use an opening book in his own format.

  The book cheeseopenbook.bin was created from gm2600.pgn, with a depth of
  10 half-moves, for openings used a minimum of 5 times.

* Personalités

  Default parameters are available in personality/default.txt

  You need to activate personality in the GUI or Cheese.ini, and choose the .txt file corresponding
  to the personality.

  Personality are not compatible with UCI_Strength option, but it's possible to define yourself
  the same parameters used by UCI_Strength in the personality file (Randomness et ReduceSpeed)

  * Parameters :

	- PawnValue 
	- KnightValue
	- BishopValue
	- RookValue
	- QueenValue
		material values for pieces

	- BishopPair
		material value for bishop pair

	- PawnDoubledMid
	- PawnDoubledEnd
		penality for doubled pawns in middle and end game

	- PawnIsolatedMid
	- PawnIsolatedEnd
		penality for isolated pawns in middle and end game

	- PawnBackwardMid
	- PawnBackwardEnd
		penality for backward pawns in middle and end game

	- RookOpenFileMid
	- RookOpenFileEnd
		bonus for rooks on an open file in middle and end game

	- RookSemiOpenFileMid
	- RookSemiOpenFileEnd
		bonus for rooks on a semi open file in middle and end game

	- Rook7thRankMid
	- Rook7thRankEnd
		bonus for rooks on 7th rank in middle and end game

	- KingSafetyOwn
	- KingSafetyOpp
		percentage (0..100) of king safety for the engine (own) and opponent (opp)

	- MobilityOwn
	- MobilityOpp
		percentage (0..100) of mobility for the engine (own) and opponent (opp)

	- Randomness
		value between 0 and 100 to add randomness to evaluation
		0 = disabled
		100 = maximum

	- ReduceSpeed
		limit engine speed in Nodes / seconds
		0 = disabled
		(Minimum value : should not go under 150000)

-------------------------------------------------------------------------------
Changes in version 2.2
-------------------------------------------------------------------------------

    * Version 2.2 - September 5th 2020

	- fix invalid moves in pondering
	- fix FRC makemove problem introduced in version 2.1
	- fix UCI strength problem with UCI protocol
	- randomness is now only used in personality
	- don't count pruned nodes
	- change king PST
	- change LMP parameters
	- remove penality for no pawns in endgame
	- add counter moves
	- use futility pruning and razoring in endgame
	- reduce history for moves not improving the position
	- use a table for MVVLVA
	- optimizations


-------------------------------------------------------------------------------
Thanks
-------------------------------------------------------------------------------

I would like to thanks specially the following people for their work, documents released that helped and motivated me to create
my chess engine :

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

Thanks to everyone participating to winboard and talkchess forums,
and the people spending time to test chess engines and those who reported some problems.

Thanks to authors of Stockfish, Arasan, and Crafty for all informations about using multiple threads.


-------------------------------------------------------------------------------
License
-------------------------------------------------------------------------------

Copyright 2006-2020 DUHAMEL Patrice.
This program is freely distributed, and must not be sold or distributed
without the author authorisation.

