From 3ef4fdeaa01f4d41fc723d54c0a17cea712cf035 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 21 May 2011 10:40:36 +0100 Subject: [PATCH] Introduce MovePicker::isBadCapture() and use in probcut Small functional change due to the fact that now we skip probcut on evasions. Signed-off-by: Marco Costalba --- src/movepick.cpp | 1 + src/movepick.h | 1 + src/search.cpp | 20 ++++++++------------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index 4be0f69a..69d60bad 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -46,6 +46,7 @@ namespace { const uint8_t QsearchWithoutChecksTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_STOP }; } +bool MovePicker::isBadCapture() const { return phase == PH_BAD_CAPTURES; } /// Constructor for the MovePicker class. Apart from the position for which /// it is asked to pick legal moves, MovePicker also wants some information diff --git a/src/movepick.h b/src/movepick.h index 765cae29..fb3d4a62 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -43,6 +43,7 @@ public: MovePicker(const Position&, Move, Depth, const History&, SearchStack*, Value); MovePicker(const Position&, Move, Depth, const History&); Move get_next_move(); + bool isBadCapture() const; private: void score_captures(); diff --git a/src/search.cpp b/src/search.cpp index dcfb7d46..2fdd2840 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -681,7 +681,7 @@ namespace { ValueType vt; Value bestValue, value, oldAlpha; Value refinedValue, nullValue, futilityBase, futilityValueScaled; // Non-PV specific - bool isPvMove, inCheck, singularExtensionNode, givesCheck, captureOrPromotion, dangerous, isBadCap; + bool isPvMove, inCheck, singularExtensionNode, givesCheck, captureOrPromotion, dangerous; int moveCount = 0, playedMoveCount = 0; int threadID = pos.thread(); SplitPoint* sp = NULL; @@ -1023,16 +1023,6 @@ split_point_start: // At split points actual search starts from here } } - // Bad capture detection. Will be used by prob-cut search - isBadCap = depth >= 3 * ONE_PLY - && depth < 8 * ONE_PLY - && captureOrPromotion - && move != ttMove - && !dangerous - && !move_is_promotion(move) - && abs(alpha) < VALUE_MATE_IN_PLY_MAX - && pos.see_sign(move) < 0; - // Step 13. Make the move pos.do_move(move, st, ci, givesCheck); @@ -1076,7 +1066,13 @@ split_point_start: // At split points actual search starts from here // Probcut search for bad captures. If a reduced search returns a value // very below beta then we can (almost) safely prune the bad capture. - if (isBadCap) + if ( depth >= 3 * ONE_PLY + && depth < 8 * ONE_PLY + && mp.isBadCapture() + && move != ttMove + && !dangerous + && !move_is_promotion(move) + && abs(alpha) < VALUE_MATE_IN_PLY_MAX) { ss->reduction = 3 * ONE_PLY; Value rAlpha = alpha - 300; -- 2.39.2