From 6f079ae7203d56edca74722990c1f40db555de8a Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 30 Jun 2013 10:32:09 +0200 Subject: [PATCH] Simplify aspiration window loop Don't open the window in case we find a mate score: this will be takes care with next patch. No functional change. --- src/search.cpp | 49 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 15981755..4e0e8f9f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -296,9 +296,12 @@ namespace { Value bestValue, alpha, beta, delta; memset(ss-1, 0, 4 * sizeof(Stack)); - depth = BestMoveChanges = 0; - bestValue = delta = -VALUE_INFINITE; (ss-1)->currentMove = MOVE_NULL; // Hack to skip update gains + + depth = BestMoveChanges = 0; + bestValue = delta = alpha = -VALUE_INFINITE; + beta = VALUE_INFINITE; + TT.new_search(); History.clear(); Gains.clear(); @@ -328,18 +331,13 @@ namespace { // MultiPV loop. We perform a full root search for each PV line for (PVIdx = 0; PVIdx < PVSize; PVIdx++) { - // Set aspiration window default width - if (depth >= 5 && abs(RootMoves[PVIdx].prevScore) < VALUE_KNOWN_WIN) + // Reset aspiration window starting size + if (depth >= 5) { delta = Value(16); alpha = RootMoves[PVIdx].prevScore - delta; beta = RootMoves[PVIdx].prevScore + delta; } - else - { - alpha = -VALUE_INFINITE; - beta = VALUE_INFINITE; - } // Start with a small aspiration window and, in case of fail high/low, // research with bigger window until not failing high/low anymore. @@ -368,33 +366,26 @@ namespace { // In case of failing high/low increase aspiration window and // research, otherwise exit the loop. - if (bestValue > alpha && bestValue < beta) - break; - - // Give some update (without cluttering the UI) before to research - if (Time::now() - SearchTime > 3000) - sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl; - - if (abs(bestValue) >= VALUE_KNOWN_WIN) - { - alpha = -VALUE_INFINITE; - beta = VALUE_INFINITE; - } - else if (bestValue >= beta) - { + if (bestValue >= beta) beta += delta; - delta += delta / 2; - } - else + + else if (bestValue <= alpha) { + alpha -= delta; + Signals.failedLowAtRoot = true; Signals.stopOnPonderhit = false; - - alpha -= delta; - delta += delta / 2; } + else + break; + + delta += delta / 2; assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE); + + // Give some update (without cluttering the UI) before to research + if (Time::now() - SearchTime > 3000) + sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl; } // Sort the PV lines searched so far and update the GUI -- 2.39.2