Skip to content

Eubos v2.7

Compare
Choose a tag to compare
@cjbolt cjbolt released this 05 Feb 14:17
· 1033 commits to master since this release

Features

  • Introduce tapered evaluation, based on the version from the Fruit engine (from Chess Programming Wiki), but with optimisation for unsigned 16 bit width scores (to aid incremental udates).
  • Introduce dynamic tracking of game phase through the search. Previously this was just a static boolean flag indicating whehter we were in an endgame or not (based on material assessment on the FEN position received from the GUI at the start of search).
  • Differentiated piece square tables for rooks and pawns depending on game phase. For example, in the opening centralise the rooks on the D and E files, and avoid a2, h2, a7, h7 squares. Incentivise rooks on 7th rank. For pawns, don't over extend in the opening. Don't push wing pawns.
  • Incrementally update game phase.

Tuning / Optimisation / Tweaks

  • Bug fix so that the MoveList class, which was modified to use static memory allocation for each ply level (as opposed to dumb dynamic allocation) in version 2.5, works corrently in multithreaded searches. Each worker thread has their own instance ofthe MoveList class, it is no longer static.
  • Reduced default size of transposition table from 4000 to 256 MBytes.
  • Aspiration window tightened to 25 from 50 centipawns.
  • Refactor the MoveList class to include a MoveAdder interface. This allows different (and optimised) functions to be used for adding quiescent/extended and normal search node moves to the MoveList.
  • Change the order of move insertion for quiet moves into the MoveList. Use the static order of Pawn moves ahead of Queen moves in the endgame, for example. In the middlegame add queen moves after bishop and knight moves.
  • Do piece mobility calculation even in the endgame. Previously this wasn't done to aid mate search. Ihave now introduced an explicit mate search mode for when one side has only King on the board.
  • Tweaked time management to use more clock in positions when losing.
  • Significant optimisations and simplification to creation of the MoveList at each ply.

Fixes

  • Bug fix for cloning the DrawChecker, which is needed for multi-threaded mode.
  • Bug fix for situations where we would not use the hash move as the best move in the Move List if a path dependent three fold repetition occured whilst performing the search. We should still use this move if no better information is present (for example if the previous principal continuation is not set).

Quality

  • Removed various obsolete classes (e.g. Search Context) and refactored for removal of the isEndgame flag.

Potential Improvements

  • Experimented with incorporating opposing side pawn and knight attacks when computing piece mobility. Although this seems to be a logical improvement to merely counting squares available for movement, in testing I found this regressed playing strength. Perhaps this could be revisited later?