Skip to content

DanielWhite94/robocide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

Robocide is a free, open-source UCI chess engine written in C from scratch. It is not a complete chess playing program and requires an interface supporting the UCI protocol.

In addition to the usual features of modern chess engines such as a transposition table and null-move-pruning, Robocide also tries to implement much special case knowledge. An example of this can be seen in blocked/fortress positions such as 3B4/1r2p3/r2p1p2/bkp1P1p1/1p1P1PPp/p1P1K2P/PPB5/8 w - -. Another non-standard feature is the ability to compile a 'tuning' version, where many of the search and evaluation parameters can be adjusted, see the section on UCI options for more information.

SMP (threaded search) is not currently supported, although it is on the TODO list.

Files

This distribution contains the following files:

  • Readme.md - this file.
  • Copying.txt - the GNU General Public License under which Robocide is released.
  • src - Full source code and makefile.

UCI Options

By default, the following options are available:

  • PawnHash - Size of the pawn hash table in megabytes. While a larger number should result in more hits, the memory is probably better used on the standard hash table (as the pawn table already enjoys a high hit-rate).
  • UCI_Chess960 - standard UCI option to enable/disable Chess960 mode (changes representation and logic of castling rights and moves)
  • MatHash - Similar to the PawnHash option but for the material combination table.
  • Hash - The size of the main transposition table in megabytes. Generally, a larger value will result in better play, especially in longer games.
  • Ponder - Turn pondering on/off. Note that as per the UCI specification, Robocide will not start pondering automatically, instead requiring the GUI/interface to send 'go ponder'.

Furthermore, if tuning is enabled (see the section on compiling) many more options are available:

  • [PIECE][MG/EG] - The material value of PIECE.
  • PawnCentre[MG/EG] - Bonus for each pawn on D4, D5, E4 or E5.
  • PawnOuterCentre[MG/EG] - Bonus for each pawn on C3-C6, D3-D6, E3-E6 or F3-F6.
  • PawnFiles[FILE][MG/EG] - Bonus for each pawn on the given file, FILE.
  • PawnRank[RANK][MG/EG] - Bonus for each pawn on the given rank, RANK.
  • PawnDoubled[MG/EG] - Bonus for each doubled pawn.
  • PawnIsolated[MG/EG] - Bonus for each isolated pawn.
  • PawnBlocked[MG/EG] - Bonus for each blocked pawn.
  • PawnPassedQuad[COEFFICIENT][MG/EG] - Specifies the quadratic coefficients for the bonus applied to a passed pawns (the bonus is given by ar^2+br+c, for a pawn on rank r).
  • [PIECE]PawnAffinity[MG/EG] - Bonus a given piece PIECE receives for each friendly pawn.
  • BishopPair[MG/EG] - Bonus for having at least one bishop of each colour.
  • BishopMobility[MG/EG] - Bonus for each square a bishop attacks.
  • OppositeBishopFactor[MG/EG] - Factor to reduce the score by if we are in an opposite bishop situation. A value of 256 represents no change, 128 would half the score.
  • RookMobilityFile[MG/EG] - Bonus for each square a rook attacks along a file.
  • RookMobilityRank[MG/EG] - Bonus for each square a rook attacks along a rank.
  • RookOpenFile[MG/EG] - Bonus for each rook on an open file (a file without any pawns).
  • RookSemiOpenFile[MG/EG] - Bonus for each rook on a semi-open file (a file with opponent pawns but without any friendly pawns).
  • RookOn7th[MG/EG] - Bonus for having a rook on the 7th rank (does not always apply, see eval.c for full details).
  • RookTrapped[MG/EG] - Bonus for rook trapped in by pawns and own king.
  • KingShieldClose[MG/EG] - Bonus for each pawn one rank infront of the king, and at most one file away.
  • KingShieldFar[MG/EG] - Bonus for each pawn two ranks infront of the king, and at most one file away.
  • Tempo[COMBINATION][MG/EG] - Bonus for having the side to move in the given material combination.
  • HalfMoveFactor - How severely to drag score towards 0 as we approach the 50-move rule. A lower value will drag the score towards 0 sooner.
  • WeightFactor - Determines how we interpolate the score between middlegame and endgame values. A lower value will cause the endgame score to be considered more important for the same material combination.
  • NullReduction - How much to reduce the search depth by in the case of performing null-move-pruning.
  • IIDMin - Minimum depth when entering a node at which internal iterative deepening is considered.
  • IIDReduction - How much to reduce the search depth by in the case of performing internal iterative deepening.

Compiling

On Unix-like systems, running 'make' in the src/ directory should be sufficient. It is also possible to produce a 'tuning' version by running 'make tune'. See the section on UCI options for more information. It is wise to run 'make clean' before each 'make' call, to ensure all object files are up to date, especially if changing from the standard to the tuning version, or vice-versa.

Windows is not currently supported, although hopefully this will change in the near future.

Acknowledgements

I would like to thank the Computer Chess Club and the Chess Programming Wiki for providing inspiration and indeed many of the ideas used. In addition, the bitboard magic move generator written by Pradyumna Kannan was hugely helpful in avoiding having to reinvent the wheel and proceeding quickly to the more interesting parts of chess engine development (see magicmoves.c/h).

Terms of use

Robocide is free, and distributed under the GNU General Public License (GPL). Essentially, this means that you are free to do almost exactly what you want with the program, including distributing it among your friends, making it available for download from your web site, selling it (either by itself or as part of some bigger software package), or using it as the starting point for a software project of your own.

The only real limitation is that whenever you distribute Robocide in some way, you must always include the full source code, or a pointer to where the source code can be found. If you make any changes to the source code, these changes must also be made available under the GPL.

For full details, read the copy of the GPL found in the file named Copying.txt.