Skip to content
UCI chess engine
Branch: master
Clone or download
Latest commit 79105fa Jul 12, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
syzygy Tweaks to pruning, LMR, move ordering and alignment. Jun 14, 2019
testing Added king position to the pawn hash table (slight regression) Jun 27, 2019
tools Implemented Texel-style tuning, with some partly tuned evaluation par… Jan 6, 2019
tuning Adjust evaluation of blocked pawns Jul 1, 2019
.gitignore Initial commit Mar 11, 2018
CMakeLists.txt Adjusted pawn and king evaluation Jun 29, 2019
LICENSE Create LICENCE Mar 11, 2018
README.md Refactored and modularised PVS, replacing YBWC with Lazy SMP again. May 13, 2019
bb.cpp Implemented YBWC (-30 elo) Mar 17, 2019
bb.h Replaced king PST with a symmetrical version. (Simplification) May 15, 2019
board.cpp Added king position to the pawn hash table (slight regression) Jun 27, 2019
board.h Added king position to the pawn hash table (slight regression) Jun 27, 2019
endgame.cpp General code cleanup Jan 1, 2019
endgame.h Significantly improved evaluation, with endgames and PST. +150 ELO Jun 9, 2018
eval.cpp Evaluation of king-pawn tropism Jun 30, 2019
eval.h Adjust evaluation of blocked pawns Jul 1, 2019
hash.cpp LMP + Stability improvements Jun 24, 2019
hash.h LMP + Stability improvements Jun 24, 2019
main.cpp LMP + Stability improvements Jun 24, 2019
move.h
movegen.cpp Tweaks to pruning, LMR, move ordering and alignment. Jun 14, 2019
movegen.h Tweaks to pruning, LMR, move ordering and alignment. Jun 14, 2019
movesort.cpp LMP + Stability improvements Jun 24, 2019
movesort.h Tweaks to pruning, LMR, move ordering and alignment. Jun 14, 2019
pawns.cpp Adjust evaluation of blocked pawns Jul 1, 2019
pawns.h Evaluation of king-pawn tropism Jun 30, 2019
pvs.cpp Added king position to the pawn hash table (slight regression) Jun 27, 2019
pvs.h LMP + Stability improvements Jun 24, 2019
search.cpp Adjusted pawn and king evaluation Jun 29, 2019
search.h LMP + Stability improvements Jun 24, 2019
types.h LMP + Stability improvements Jun 24, 2019

README.md

Topple

Topple is a UCI-compatible chess engine. Topple v0.5.0 is rated 2801 in CCRL 40/40 and 2845 in CCRL 40/4.

Usage

Topple requires a GUI that supports the UCI protocol to be used comfortably, although it can be used from the command line. Five configuration options are made available: Hash, Threads, SyzygyPath, SyzygyResolve and Ponder.

The Hash option sets the size of the main transposition table in MiB. If the size given is not a power of two, Topple will round it down to next lowest power of 2 to maximise probing efficiency. For example, if a value of 1000 is specified, Topple will only use a 512 MiB hash table. Hash does not control the value of the other tables in Topple, such as those used for move generation, evaluation and other data structures.

The Threads option sets the number of search threads that Topple will use. Topple may use additional threads for keeping track of inputs (such as the UCI stop command). Topple utilises additional threads by using Lazy SMP, so the Hash value should be increased to improve scaling with additional threads.

The SyzygyPath option sets the location in which Topple should search for Syzygy tablebases. These can be used to significantly improve playing strength in the endgame. Multiple paths should be delimited by a semicolon on Windows and a colon on other operating systems.

The SyzygyResolve option allows Topple to prettify searches which end in a tablebase position by playing out a DTZ optimal line to mate, and returning an appropriate mate score. The value of this option determines the maximum length of the playout.

The Ponder option has no effect, but is used to indicate that Topple has the ability to think during their opponent's time.

Techniques used

  • Alpha-beta Principal Variation Search
  • Iterative deepening
  • Basic time management and search limits
  • Aspiration windows
  • Quiescence search
  • SEE move ordering
  • SEE pruning
  • Delta pruning
  • 4-bucket transposition table with Zobrist hashing
  • Killer move heuristic
  • History heuristic
  • Bitboard representation
  • Check extensions
  • Internal iterative deepening
  • Restricted singular extension search
  • Adaptive null move pruning
  • Mate distance pruning
  • Late move reductions
  • History pruning
  • Futility pruning
  • Pawn evaluation hash table
  • Tapered evaluation
  • Specialised endgame evaluation
  • Piece-square tables
  • Pawn structure evaluation
  • King safety evaluation
  • Parameter tuning with an adapted version of Texel's tuning method
  • Unit testing with the CATCH framework
  • Multithreading with Lazy SMP
  • Extensions to UCI:
    • "eval" command returns a static evaluation of the position
    • "print" displays a textual representation of the board and previous moves
    • "mirror" flips the colours in the current position
    • "position moves ..." is stateful and can be used to continue an existing position
    • "tbprobe dtz|wdl" can be used to directly probe Syzygy tablebases for the current position
You can’t perform that action at this time.