From bfcfaf71018b3aed274ebd544a10c4508718e7de Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 13 Mar 2009 15:39:22 +0100 Subject: [PATCH] Retire Null Driven IID It does not seem to clearly improve things and in any case is disabled by default, so retire for now. Signed-off-by: Marco Costalba --- src/search.cpp | 38 +------------------------------------- src/ucioption.cpp | 1 - 2 files changed, 1 insertion(+), 38 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index be324c16..92d2c75e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -125,9 +125,6 @@ namespace { const bool UseIIDAtPVNodes = true; const bool UseIIDAtNonPVNodes = false; - // Use null move driven internal iterative deepening? - bool UseNullDrivenIID = false; - // Internal iterative deepening margin. At Non-PV moves, when // UseIIDAtNonPVNodes is true, we do an internal iterative deepening search // when the static evaluation is at most IIDMargin below beta. @@ -437,7 +434,6 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move, if (UseLogFile) LogFile.open(get_option_value_string("Search Log Filename").c_str(), std::ios::out | std::ios::app); - UseNullDrivenIID = get_option_value_bool("Null driven IID"); UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)"); UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)"); @@ -1201,7 +1197,6 @@ namespace { Value approximateEval = quick_evaluate(pos); bool mateThreat = false; - bool nullDrivenIID = false; bool isCheck = pos.is_check(); // Null move search @@ -1226,19 +1221,6 @@ namespace { Value nullValue = -search(pos, ss, -(beta-delta-1), depth-R*OnePly, ply+1, false, threadID); - // Check for a null capture artifact, if the value without the null capture - // is above beta then mark the node as a suspicious failed low. We will verify - // later if we are really under threat. - if ( UseNullDrivenIID - && nullValue < beta - && depth > 6 * OnePly - &&!value_is_mate(nullValue) - && ttMove == MOVE_NONE - && ss[ply + 1].currentMove != MOVE_NONE - && pos.move_is_capture(ss[ply + 1].currentMove) - && pos.see(ss[ply + 1].currentMove) + nullValue >= beta) - nullDrivenIID = true; - pos.undo_null_move(); if (value_is_mate(nullValue)) @@ -1262,10 +1244,8 @@ namespace { // low score (which will cause the reduced move to fail high in the // parent node, which will trigger a re-search with full depth). if (nullValue == value_mated_in(ply + 2)) - { mateThreat = true; - nullDrivenIID = false; - } + ss[ply].threatMove = ss[ply + 1].currentMove; if ( depth < ThreatDepth && ss[ply - 1].reduction @@ -1295,22 +1275,6 @@ namespace { search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID); ttMove = ss[ply].pv[ply]; } - else if (nullDrivenIID) - { - // The null move failed low due to a suspicious capture. Perhaps we - // are facing a null capture artifact due to the side to move change - // and this position should fail high. So do a normal search with a - // reduced depth to get a good ttMove to use in the following full - // depth search. - Move tm = ss[ply].threatMove; - - assert(tm != MOVE_NONE); - assert(ttMove == MOVE_NONE); - - search(pos, ss, beta, depth/2, ply, false, threadID); - ttMove = ss[ply].pv[ply]; - ss[ply].threatMove = tm; - } // Initialize a MovePicker object for the current position, and prepare // to search all moves: diff --git a/src/ucioption.cpp b/src/ucioption.cpp index 5c78c00e..95e3e279 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -120,7 +120,6 @@ namespace { o.push_back(Option("Full Depth Moves (non-PV nodes)", 3, 1, 100)); o.push_back(Option("Threat Depth", 5, 0, 100)); o.push_back(Option("Selective Plies", 7, 0, 10)); - o.push_back(Option("Null driven IID", false)); o.push_back(Option("Futility Pruning (Main Search)", true)); o.push_back(Option("Futility Pruning (Quiescence Search)", true)); o.push_back(Option("Futility Margin (Quiescence Search)", 50, 0, 1000)); -- 2.39.2