Did anyone try storing multiple "best" moves inside transposition table entry to help move ordering?
I did an experiment in my Caissa engine and it gave ~30 Elo improvement.
I reduced TT entry hash from 64 bits to 32 bits so I could store two additional moves, so in total I store 3 moves, and the memory footprint of TT is the same.
It works as follows: First, inside alpha-beta search function I read the move list from TT entry and try them in the first place (then comes captures, history heuristics etc.). Once best score in a node is beaten, I push this move to the front of the list. In the end, I write back the moves to transposition table.
I made sure it works correctly by printing TT entry with some "ttprobe" command. For example, in initial position, after searching 10 plys deep it ends up with c2c4, e2e4, d2d4 as best moves:
Code: Select all
> position startpos
> go depth 10
info depth 10 seldepth 21 score cp 52 time 31 nodes 32920 nps 1049319 pv c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 e2e3 d7d5 d2d4 e5d4
bestmove c2c4 ponder e7e5
> ttprobe
Score: 52
Depth: 10
Bounds: exact
Generation: 1
Moves: c2c4 e2e4 d2d4