A question about Transposition Table
Posted: Thu Dec 29, 2016 10:17 pm
Hello,
Could someone knowledgeable tell me this:
I'm doing an iterative deepening. Each time a best move is found (beating alpha), I store it in the transposition table, with an additional information, the depth searched.
Say I found this move when my depth was 5, it means I found this move with an accuracy of depth 5. So in my iterative deepening, instead of doing AlphaBeta for every depth, I check if a best move was found at this position (from earlier searches). If so, I start the iterative deepening at depth found+1.
Code looks like this:
This enables me to start generally at depth 7-8, and get another one "for free". But is there a risk to this?
I don't see a reason this should not work, but other programs seem to search from depth 1 for every move instead.
Could someone knowledgeable tell me this:
I'm doing an iterative deepening. Each time a best move is found (beating alpha), I store it in the transposition table, with an additional information, the depth searched.
Say I found this move when my depth was 5, it means I found this move with an accuracy of depth 5. So in my iterative deepening, instead of doing AlphaBeta for every depth, I check if a best move was found at this position (from earlier searches). If so, I start the iterative deepening at depth found+1.
Code looks like this:
Code: Select all
for (mSearchDepth = 1; mSearchDepth < MAX_DEPTH; mSearchDepth++) {
line = "";
mNodes = 0;
node = mHashMap.get(mGame.getCurrentPosition());
if (node != null) {
bestMove = node.getMove();
mSearchDepth = node.getSearchDepth() + 1;
}
bestScore = alphaBeta(-Values.INFINITE, Values.INFINITE, mSearchDepth);
if (stop) {
break;
}
node = mHashMap.get(mGame.getCurrentPosition());
if (node != null) {
bestMove = node.getMove();
} else {
break;
}
}
I don't see a reason this should not work, but other programs seem to search from depth 1 for every move instead.