Chess engine: Loki 3.0.0
Loki is a UCI-compliant chess engine written in C++. Author: Niels Abildskov
Rating JCER=2355
v. 3.0.0:
Major changes:
Completely reworked search and evaluation:
Changed the transposition table to a two-bucket system.
Removed the lockless hashing in transposition table.
Changed history heuristic to give negative values for moves that didn't beat beta (+242 elo)
Changed the reduction value, R, in NMP to R = 2 (if depth > 6: R = 3)
Removed a bug in the hash move ordering where it would stop everytime after the first iteration when looping through the movelist.
Changed razoring implementation (+19 elo)
Changed mobility implementation (+88 elo). Initially, Stockfish's mobility weights were used, but these were later tuned to fit Loki's evaluation better.
Disabled the following methods in search: Aspiration windows (also disabled in 2.0), Internal iterative deepening, Delta pruning in quiescence, futility pruning in quiescence and the countermove heuristic.
Added space term to the evaluation function (+ 11 elo)
Added imbalance term to the evaluation function (+17 elo)
Added texel tuning with stochastic gradient descent (SPSA):
Tuned material values (+37 elo)
Tuned piece-square tables (+122 elo)
Tuned the newly added space term (+0 elo)
Tuned mobility bonuses (+0 elo)
Removed the lockless hashing in transposition table.
Changed history heuristic to give negative values for moves that didn't beat beta (+242 elo)
Changed the reduction value, R, in NMP to R = 2 (if depth > 6: R = 3)
Removed a bug in the hash move ordering where it would stop everytime after the first iteration when looping through the movelist.
Changed razoring implementation (+19 elo)
Changed mobility implementation (+88 elo). Initially, Stockfish's mobility weights were used, but these were later tuned to fit Loki's evaluation better.
Disabled the following methods in search: Aspiration windows (also disabled in 2.0), Internal iterative deepening, Delta pruning in quiescence, futility pruning in quiescence and the countermove heuristic.
Added space term to the evaluation function (+ 11 elo)
Added imbalance term to the evaluation function (+17 elo)
Added texel tuning with stochastic gradient descent (SPSA):
Tuned material values (+37 elo)
Tuned piece-square tables (+122 elo)
Tuned the newly added space term (+0 elo)
Tuned mobility bonuses (+0 elo)
Minor changes:
Added 50-move draw recognition in search. No real elo gain expected.
With inspiration from Ethereal, I added a python script to run through 128 positions with known perft results, which is useful for debugging the move generator. Unfortunately, I haven't gotten this to work for Loki yet.
Fixed zobrist update bug when making a null-move #13 (+5 elo)
Joined material and piece-square table scoring into one function (each) for speed. (+27 elo)
Added seldepth to UCI. No elo change expected.
Joined material and piece-square table scoring into one function (each) for speed. (+27 elo)
Added seldepth to UCI. No elo change expected.
Known issues:
Bad time management #5
Sometimes, the PV as collected in a stack doesn't match the one in the transposition table (#17 ). Fortunately, this doesn't seem to affect the playing strength since the moves suggested at the root aren't affected by this bug. It just makes analysis faulty.
There has been some complains about the time it takes Loki to find a checkmate in version 1.2.0 and 2.0.0 (#16). I have tried to test this myself, but haven't noticed any issues.
Note: All elo gains except the total estimate has been tested using self-play against the version with the feature disabled.
Note: All elo gains except the total estimate has been tested using self-play against the version with the feature disabled.
Comments
Post a Comment