From: Joona Kiiski Date: Sat, 21 Nov 2009 13:22:52 +0000 (+0200) Subject: Only move extension based on exclusion search X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=16acf57773ca4558b60ac4af4bc5ad16998df686 Only move extension based on exclusion search Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index 98bf24a8..d0ddbd55 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -172,6 +172,9 @@ namespace { const bool PruneDefendingMoves = false; const bool PruneBlockingMoves = false; + // Only move margin + const Value OnlyMoveMargin = Value(100); + // Margins for futility pruning in the quiescence search, and at frontier // and near frontier nodes. const Value FutilityMarginQS = Value(0x80); @@ -1136,6 +1139,25 @@ namespace { // Decide the new search depth ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous); + + // Only move extension + if ( moveCount == 1 + && ext < OnePly + && depth >= 8 * OnePly + && tte + && (tte->type() & VALUE_TYPE_LOWER) + && tte->move() != MOVE_NONE + && tte->depth() >= depth - 3 * OnePly) + { + Value ttValue = value_from_tt(tte->value(), ply); + if (abs(ttValue) < VALUE_KNOWN_WIN) + { + Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move()); + if (excValue < ttValue - OnlyMoveMargin) + ext = OnePly; + } + } + newDepth = depth - OnePly + ext; // Make and search the move @@ -1416,6 +1438,26 @@ namespace { // Decide the new search depth ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous); + + // Only move extension + if ( forbiddenMove == MOVE_NONE + && moveCount == 1 + && ext < OnePly + && depth >= 8 * OnePly + && tte + && (tte->type() & VALUE_TYPE_LOWER) + && tte->move() != MOVE_NONE + && tte->depth() >= depth - 3 * OnePly) + { + Value ttValue = value_from_tt(tte->value(), ply); + if (abs(ttValue) < VALUE_KNOWN_WIN) + { + Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move()); + if (excValue < ttValue - OnlyMoveMargin) + ext = OnePly; + } + } + newDepth = depth - OnePly + ext; // Futility pruning