Permalink
Browse files

Prune evasions with negative SEE in qsearch

Only pure blocking evasions are candidate
for pruning.

After 998 games at 1+0

Mod vs Orig +215 =596 -187  +10 ELO

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
  • Loading branch information...
1 parent d844a75 commit 81cfd81366cf06dc403476a4782ef34703346c61 @mcostalba committed Jan 20, 2010
Showing with 10 additions and 3 deletions.
  1. +10 −3 src/search.cpp
View
@@ -1643,7 +1643,7 @@ namespace {
StateInfo st;
Move ttMove, move;
Value staticValue, bestValue, value, futilityBase, futilityValue;
- bool isCheck, enoughMaterial, moveIsCheck;
+ bool isCheck, enoughMaterial, moveIsCheck, evasionPrunable;
const TTEntry* tte = NULL;
int moveCount = 0;
bool pvNode = (beta - alpha != 1);
@@ -1744,8 +1744,15 @@ namespace {
}
}
- // Don't search captures and checks with negative SEE values
- if ( !isCheck
+ // Detect blocking evasions that are candidate to be pruned
+ evasionPrunable = isCheck
+ && bestValue != -VALUE_INFINITE
+ && !pos.move_is_capture(move)
+ && pos.type_of_piece_on(move_from(move)) != KING
+ && !pos.can_castle(pos.side_to_move());
+
+ // Don't search moves with negative SEE values
+ if ( (!isCheck || evasionPrunable)
&& move != ttMove
&& !move_is_promotion(move)
&& pos.see_sign(move) < 0)

0 comments on commit 81cfd81

Please sign in to comment.