X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=e28b866e9cb26b2bc26c5bc5460a6e091aa2ef81;hp=8da12118d21979d3941e984743fb6f5e8794235c;hb=2d4e2bc62a4ee3fa93004755d4b93fa466d1e93e;hpb=3f610e2b13340ca65d0f9d63aa0cb8da92e80117 diff --git a/src/search.cpp b/src/search.cpp index 8da12118..e28b866e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1148,7 +1148,8 @@ namespace { UndoInfo u; pos.do_null_move(u); - Value nullValue = -search(pos, ss, -(beta-1), depth-4*OnePly, ply+1, false, threadID); + int R = (depth > 7 ? 4 : 3); + Value nullValue = -search(pos, ss, -(beta-1), depth-R*OnePly, ply+1, false, threadID); pos.undo_null_move(u); if (nullValue >= beta) @@ -1468,6 +1469,18 @@ namespace { // Update transposition table TT.store(pos, value_to_tt(bestValue, ply), depth, MOVE_NONE, VALUE_TYPE_EXACT); + // Update killers only for good check moves + Move m = ss[ply].currentMove; + if (alpha >= beta && ok_to_history(pos, m)) // Only non capture moves are considered + { + // Wrong to update history when depth is <= 0 + + if (m != ss[ply].killer1) + { + ss[ply].killer2 = ss[ply].killer1; + ss[ply].killer1 = m; + } + } return bestValue; } @@ -2142,13 +2155,11 @@ namespace { // ok_to_history() returns true if a move m can be stored - // in history. Should be a non capturing move. + // in history. Should be a non capturing move nor a promotion. bool ok_to_history(const Position& pos, Move m) { - return pos.square_is_empty(move_to(m)) - && !move_promotion(m) - && !move_is_ep(m); + return !pos.move_is_capture(m) && !move_promotion(m); } @@ -2161,8 +2172,11 @@ namespace { H.success(pos.piece_on(move_from(m)), m, depth); for (int i = 0; i < moveCount - 1; i++) - if (ok_to_history(pos, movesSearched[i]) && m != movesSearched[i]) + { + assert(m != movesSearched[i]); + if (ok_to_history(pos, movesSearched[i])) H.failure(pos.piece_on(move_from(movesSearched[i])), movesSearched[i]); + } } // fail_high_ply_1() checks if some thread is currently resolving a fail