X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=4481cfc727e436b8888825c94ec4bc99d261b21e;hp=c1f90e119a24d82379eac5521bb950ca2732f4de;hb=0d88b832e38430e0add9c8298458569b23e102a7;hpb=2161d8b0b3df48db419a25e3bc626c21eb062d75 diff --git a/src/search.cpp b/src/search.cpp index c1f90e11..4481cfc7 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -139,7 +139,7 @@ namespace { // Use internal iterative deepening? const bool UseIIDAtPVNodes = true; - const bool UseIIDAtNonPVNodes = false; + const bool UseIIDAtNonPVNodes = true; // Internal iterative deepening margin. At Non-PV moves, when // UseIIDAtNonPVNodes is true, we do an internal iterative deepening @@ -1435,7 +1435,7 @@ namespace { // Go with internal iterative deepening if we don't have a TT move if (UseIIDAtNonPVNodes && ttMove == MOVE_NONE && depth >= 8*OnePly && - evaluate(pos, ei, threadID) >= beta - IIDMargin) + !isCheck && evaluate(pos, ei, threadID) >= beta - IIDMargin) { search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID); ttMove = ss[ply].pv[ply]; @@ -1814,6 +1814,7 @@ namespace { bool useFutilityPruning = sp->depth < SelectiveDepth && !isCheck; + const int FutilityMoveCountMargin = 3 + (1 << (3 * int(sp->depth) / 8)); const int FutilityValueMargin = 112 * bitScanReverse32(int(sp->depth) * int(sp->depth) / 2); while ( sp->bestValue < sp->beta @@ -1842,31 +1843,30 @@ namespace { && !captureOrPromotion) { // Move count based pruning - if ( moveCount >= 2 + int(sp->depth) + if ( moveCount >= FutilityMoveCountMargin && ok_to_prune(pos, move, ss[sp->ply].threatMove) && sp->bestValue > value_mated_in(PLY_MAX)) continue; // Value based pruning - if (sp->approximateEval < sp->beta) + if (sp->futilityValue == VALUE_NONE) { - if (sp->futilityValue == VALUE_NONE) - { - EvalInfo ei; - sp->futilityValue = evaluate(pos, ei, threadID) + FutilityValueMargin; - } + EvalInfo ei; + sp->futilityValue = evaluate(pos, ei, threadID) + FutilityValueMargin; + } - if (sp->futilityValue < sp->beta) + Value futilityValueScaled = sp->futilityValue - moveCount * IncrementalFutilityMargin; + + if (futilityValueScaled < sp->beta) + { + if (futilityValueScaled > sp->bestValue) // Less then 1% of cases { - if (sp->futilityValue > sp->bestValue) // Less then 1% of cases - { - lock_grab(&(sp->lock)); - if (sp->futilityValue > sp->bestValue) - sp->bestValue = sp->futilityValue; - lock_release(&(sp->lock)); - } - continue; + lock_grab(&(sp->lock)); + if (futilityValueScaled > sp->bestValue) + sp->bestValue = futilityValueScaled; + lock_release(&(sp->lock)); } + continue; } } @@ -2471,7 +2471,6 @@ namespace { assert(!pos.move_is_check(m)); assert(!pos.move_is_capture_or_promotion(m)); assert(!pos.move_is_passed_pawn_push(m)); - assert(d >= OnePly); Square mfrom, mto, tfrom, tto;