Skip to content

Eubos v2.8

Compare
Choose a tag to compare
@cjbolt cjbolt released this 18 Feb 21:06
· 874 commits to master since this release

Features

  • Aspiration window is now progressively widened on a failure; as per 25 centipawn; 2 pawns; 1 rook, fully open window.
  • Attribute a 25 centipawn bonus for the bishop pair in the evaluation function.
  • Lazy evaluation; try to optimise by avoiding performing a full evaluation if the crude evaluation score is outside a threshold of alpha/beta. This threshold was empirically derived at 350 centipawns, assessed by sampling the delta between full and crude evaluations during play and post-processing the logs.
  • Passed pawn scoring in the evaluation function is now weighted by game phase. That is, when deep in the endgame, then passed pawns are subject to a multiplier. The thresholds for increasing the multiplication are when we reach KQ endgames and KB, KN endgames respectively.

Tuning / Optimisation / Tweaks

  • Pieces attacked by a knight, king or pawn are now sequenced in the MoveList at the start of the quiet/regular moves.
  • When assessing whether a valid capture exists in a position (required for alpha lazy evaluation check), check knight, king or pawn atacks first, as these are low hanging fruit.
  • Changed passed pawn scoring to 12/8 centipawns, for regular/rook pawns accordingly.
  • IsAttacked method refactored to improve likelihood of early termination.
  • Optimised the Piece static class
  • Optimised the Move static class

Fixes

  • Bug fix for potential corruption of the previous best move retrieved from the last principal continuation. This could occur at non-PV nodes for which there was no hash move. The defect was caused by assuming the move was valid in the position - it often wouldn't be, as its validity is inherently path dependent - and trying to populate the origin piece and target piece from the board, regardless of validity.
  • Fixed a time management defect which could cause flags in high depth searches when clock time is low. Because we try to increase the previous reference score at each ply, in a high-depth search, when we don't have good hash information, the search time could exceed the sample rate at which we try to stop the search, causing Eubos to flag.

Quality

  • Moved to JUnit 5 for unit test framework
  • Tightened assertions in ENABLE_ASSERTS builds, particularly regarding move encoding (Move.valueOf and friends)

Potential Improvements

  • The empirically-derived lazy valuation threshold could be self-monitored by Eubos in a debug mode (i.e. when a static const is set). This debug mode would compute the delta at each leaf and maintain statistics like the leaf count, the number of times it was outside the threshold, the min/max delta and the number of times we saved a full evaluation hit. These could then be reported in the log.

Full Changelog: v2.7...V2.8