mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-23 18:46:59 +08:00
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:
committed by
Stéphane Nicolet
parent
a9a6915e08
commit
e1dd005583
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user