following a previous post about some TT issue (viewtopic.php?f=7&t=67599), I started investigate my own implementation step by step. The current implementation is as follows (both at root and inside the tree):
Storing :
* tt_store at beta cut-off as bound_beta
* tt_store at the end of root moves loop as alphaRaised?bound_exact:bound_alpha
Getting :
* at root : only use bound_exact
* inside the tree : only use if
Code: Select all
(!fromPV || (ttt.t_type == Transposition::tt_exact && ttt.score > alpha && ttt.score < beta))
The problem is that :
* using TT just for getting best move (I mean just sorting the TT move first) both at root and in the tree is worth +120elo in Weini
* using TT only inside the tree to directly return a score under the previous condition is worth +90elo more
* BUT using TT at root in order to (I tried to differente implementations)
a) skip current depth of the iterative deepening loop, or
b) return a score in the window search (introducing the same condition on score as inside the tree)
both lead to a great elo loss (at least -80elo)
Any idea where I can be wrong ? I am wondering if it can be a time management issue. Very often (when pondering even more), when using TT at root, the move that is used is the TT one, because the first iterative depth that is not skipped is to long to fit in the available search time.
ps : Yesterday I switch Weini score from float to int without any impact on the engine strenght (so this is not the problem).