### transposition table pseudocode

Posted:

**Mon Aug 22, 2016 11:51 pm**I've been experiencing a strange TT-related bug lately (doesn't happen when it's disabled). My engine will play an OK game for a while before going bonkers and just ditching its queen for no reason. It might have been there before to a lesser degree, but I'm really noticing it now that I'm using the transposition table in quiescence search (both saving and retrieving).

Below is the basic structure of my alpha-beta search. My question is a sanity check: Does the use of the transposition table look correct? (Notes: zobrist is updated incrementally in make/undoMove, and addTransposition takes the zobrist, depth, eval, and type.).

Thanks,

-Erin

Below is the basic structure of my alpha-beta search. My question is a sanity check: Does the use of the transposition table look correct? (Notes: zobrist is updated incrementally in make/undoMove, and addTransposition takes the zobrist, depth, eval, and type.).

Thanks,

-Erin

Code: Select all

```
function absearch(int a, int b, int depth, bool quiesce)
{
entry = getTransposition(zobrist);
if (entry && entry.depth >= (quiesce ? 0 : depth))
{
if (entry.type == Type.Exact && entry.eval > a && entry.eval < b)
{
return entry.eval;
}
else if (entry.type == Type.Beta && entry.eval >= b)
{
return b;
}
else if (entry.eval <= a)
{
return a;
}
}
if (quiesce)
{
eval = evaluate();
if (eval > a)
{
if (eval >= b)
{
addTransposition(zobrist, 0, b, Type.Beta);
return b;
}
a = eval;
}
}
if (null_move_allowed)
{
makeMove(null);
eval = -absearch(-b, -b + 1, depth - R - 1);
undoMove(null);
if (eval >= b)
{
addTransposition(zobrist, max(0, depth - R), b, Type.Beta);
return b;
}
}
localBest = -inf;
movelist = getMoves(quiesce);
foreach move in movelist
{
makeMove(move);
eval = -absearch(-b, -a, depth - 1);
undoMove(move);
if (eval > a)
{
if (eval >= b)
{
addTransposition(zobrist, quiesce ? 0 : depth, b, Type.Beta, move);
return b;
}
addTransposition(zobrist, quiesce ? 0 : depth, eval, Type.Exact, move);
localBest = eval;
a = eval;
}
}
if (localBest < a)
{
addTransposition(zobrist, quiesce ? 0 : depth, a, Type.Alpha);
}
return a;
}
```