Reintroduce SEE verification against discovered attacks

Reintroduces https://github.com/official-stockfish/Stockfish/pull/4453
along with https://github.com/official-stockfish/Stockfish/pull/4469

Leaving out
https://github.com/official-stockfish/Stockfish/pull/4533
https://github.com/official-stockfish/Stockfish/pull/4572

Passed STC:
https://tests.stockfishchess.org/tests/view/647d8c37726f6b400e408a0a
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 143168 W: 38346 L: 37892 D: 66930
Ptnml(0-2): 352, 15672, 39164, 15962, 434

Passed LTC:
https://tests.stockfishchess.org/tests/view/647ee8c528c4431bcb58e432
LLR: 2.94 (-2.94,2.94) <0.50,2.50>
Total: 71538 W: 19560 L: 19190 D: 32788
Ptnml(0-2): 49, 6905, 21499, 7259, 57

closes https://github.com/official-stockfish/Stockfish/pull/4609

bench: 2595430
This commit is contained in:
Guenther Demetz
2023-06-07 09:01:05 +02:00
committed by Stéphane Nicolet
parent a9a6915e08
commit e1dd005583
3 changed files with 34 additions and 9 deletions

View File

@@ -990,9 +990,28 @@ moves_loop: // When in check, search starts here
+ captureHistory[movedPiece][to_sq(move)][type_of(pos.piece_on(to_sq(move)))] / 7 < alpha)
continue;
Bitboard occupied;
// SEE based pruning (~11 Elo)
if (!pos.see_ge(move, Value(-205) * depth))
continue;
if (!pos.see_ge(move, occupied, Value(-205) * depth))
{
if (depth < 2 - capture)
continue;
// Don't prune the move if opponent Queen/Rook is under discovered attack after the exchanges
// Don't prune the move if opponent King is under discovered attack after or during the exchanges
Bitboard leftEnemies = (pos.pieces(~us, KING, QUEEN, ROOK)) & occupied;
Bitboard attacks = 0;
occupied |= to_sq(move);
while (leftEnemies && !attacks)
{
Square sq = pop_lsb(leftEnemies);
attacks |= pos.attackers_to(sq, occupied) & pos.pieces(us) & occupied;
// don't consider pieces which were already threatened/hanging before SEE exchanges
if (attacks && (sq != pos.square<KING>(~us) && (pos.attackers_to(sq, pos.pieces()) & pos.pieces(us))))
attacks = 0;
}
if (!attacks)
continue;
}
}
else
{