X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsearch.cpp;h=fba9e53559f5b883f0cd479923ac2abe7a88ab78;hb=141410f177c2514493f40d21a426490047cf97de;hp=791cbc6fb580901a567296d23a0eeed08f892969;hpb=b366c7dc38145278a00c51a560a4f7b6e03a0b2a;p=stockfish diff --git a/src/search.cpp b/src/search.cpp index 791cbc6f..fba9e535 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -297,7 +297,6 @@ namespace { Value value_to_tt(Value v, int ply); Value value_from_tt(Value v, int ply); bool ok_to_use_TT(const TTEntry* tte, Depth depth, Value beta, int ply); - bool ok_to_use_TT_PV(const TTEntry* tte, Depth depth, Value alpha, Value beta, int ply); bool connected_threat(const Position& pos, Move m, Move threat); Value refine_eval(const TTEntry* tte, Value defaultEval, int ply); void update_history(const Position& pos, Move move, Depth depth, Move movesSearched[], int moveCount); @@ -658,7 +657,7 @@ namespace { int prevDelta1 = bestValues[iteration - 1] - bestValues[iteration - 2]; int prevDelta2 = bestValues[iteration - 2] - bestValues[iteration - 3]; - aspirationDelta = Max(abs(prevDelta1) + abs(prevDelta2) / 2, 16); + aspirationDelta = Min(Max(abs(prevDelta1) + abs(prevDelta2) / 2, 16), 24); aspirationDelta = (aspirationDelta + 7) / 8 * 8; // Round to match grainSize alpha = Max(bestValues[iteration - 1] - aspirationDelta, -VALUE_INFINITE); @@ -839,10 +838,13 @@ namespace { tte = TT.retrieve(posKey); ttMove = tte ? tte->move() : MOVE_NONE; - // At PV nodes we check for exact scores within (alha, beta) range, while - // at non-PV nodes we check for and return a fail high/low. Biggest advantage - // at probing at PV nodes is to have a smooth experience in analysis mode. - if (!Root && tte && (PvNode ? ok_to_use_TT_PV(tte, depth, alpha, beta, ply) : ok_to_use_TT(tte, depth, beta, ply))) + // At PV nodes we check for exact scores, while at non-PV nodes we check for + // and return a fail high/low. Biggest advantage at probing at PV nodes is + // to have a smooth experience in analysis mode. + if ( !Root + && tte + && (PvNode ? tte->depth() >= depth && tte->type() == VALUE_TYPE_EXACT + : ok_to_use_TT(tte, depth, beta, ply))) { TT.refresh(tte); ss->bestMove = ttMove; // Can be MOVE_NONE @@ -1794,9 +1796,7 @@ split_point_start: // At split points actual search starts from here // ok_to_use_TT() returns true if a transposition table score - // can be used at a given point in search. There are two versions - // one to be used in non-PV nodes and one in PV nodes where we look - // for an exact score that falls between (alha, beta) boundaries. + // can be used at a given point in search. bool ok_to_use_TT(const TTEntry* tte, Depth depth, Value beta, int ply) { @@ -1810,17 +1810,6 @@ split_point_start: // At split points actual search starts from here || ((tte->type() & VALUE_TYPE_UPPER) && v < beta)); } - bool ok_to_use_TT_PV(const TTEntry* tte, Depth depth, Value alpha, Value beta, int ply) { - - Value v = value_from_tt(tte->value(), ply); - - return tte->depth() >= depth - && tte->type() == VALUE_TYPE_EXACT - && tte->move() != MOVE_NONE - && v < beta - && v > alpha; - } - // refine_eval() returns the transposition table score if // possible otherwise falls back on static position evaluation.