Skip to content

Commit

Permalink
Fix the pawn hash failure when the pawn key is 0
Browse files Browse the repository at this point in the history
This patch fixed bugs official-stockfish#859 and official-stockfish#882.
At initialization we generate a new random key (Zobrist::noPawns).
It's added to the pawn key of all positions, so that the pawn key
of a pawnless position is no longer 0.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 21307 W: 3738 L: 3618 D: 13951

LTC:
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 45270 W: 5737 L: 5648 D: 33885

No functional change.
  • Loading branch information
atumanian authored and mcostalba committed Nov 25, 2016
1 parent ca464fc commit 9eccba7
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/position.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ namespace Zobrist {
Key psq[PIECE_NB][SQUARE_NB];
Key enpassant[FILE_NB];
Key castling[CASTLING_RIGHT_NB];
Key side;
Key side, noPawns;
}

namespace {
Expand Down Expand Up @@ -145,6 +145,7 @@ void Position::init() {
}

Zobrist::side = rng.rand<Key>();
Zobrist::noPawns = rng.rand<Key>();
}


Expand Down Expand Up @@ -331,7 +332,8 @@ void Position::set_check_info(StateInfo* si) const {

void Position::set_state(StateInfo* si) const {

si->key = si->pawnKey = si->materialKey = 0;
si->key = si->materialKey = 0;
si->pawnKey = Zobrist::noPawns;
si->nonPawnMaterial[WHITE] = si->nonPawnMaterial[BLACK] = VALUE_ZERO;
si->psq = SCORE_ZERO;
si->checkersBB = attackers_to(square<KING>(sideToMove)) & pieces(~sideToMove);
Expand Down

0 comments on commit 9eccba7

Please sign in to comment.