From: Joona Kiiski Date: Thu, 21 Jan 2010 15:58:00 +0000 (+0200) Subject: Collect MaxGain statistics X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=22b8dc8c98156045c0e7987646c85503100b000b Collect MaxGain statistics Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index 6232f0cb..e9941287 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -894,6 +894,14 @@ namespace { Value oldAlpha = alpha; Value value = -VALUE_INFINITE; CheckInfo ci(pos); + bool isCheck = pos.is_check(); + + // Evaluate the position statically + EvalInfo ei; + if (!isCheck) + ss[0].eval = evaluate(pos, ei, 0); + else + ss[0].eval = VALUE_NONE; // Loop through all the moves in the root move list for (int i = 0; i < rml.move_count() && !AbortSearch; i++) @@ -1156,9 +1164,25 @@ namespace { tte = TT.retrieve(pos.get_key()); } + // Evaluate the position statically + isCheck = pos.is_check(); + EvalInfo ei; + if (!isCheck) + { + ss[ply].eval = evaluate(pos, ei, threadID); + + // Store gain statistics + Move m = ss[ply - 1].currentMove; + if ( m != MOVE_NULL + && pos.captured_piece() == NO_PIECE_TYPE + && !move_is_castle(m) + && !move_is_promotion(m)) + MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval); + + } + // Initialize a MovePicker object for the current position, and prepare // to search all moves - isCheck = pos.is_check(); mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move())); CheckInfo ci(pos); MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); @@ -1394,6 +1418,14 @@ namespace { ss[ply].eval = staticValue; futilityValue = staticValue + FutilityValueMargin; staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible + + // Store gain statistics + Move m = ss[ply - 1].currentMove; + if ( m != MOVE_NULL + && pos.captured_piece() == NO_PIECE_TYPE + && !move_is_castle(m) + && !move_is_promotion(m)) + MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval); } // Null move search @@ -1685,6 +1717,19 @@ namespace { else staticValue = evaluate(pos, ei, threadID); + if (!isCheck) + { + ss[ply].eval = staticValue; + // Store gain statistics + Move m = ss[ply - 1].currentMove; + if ( m != MOVE_NULL + && pos.captured_piece() == NO_PIECE_TYPE + && !move_is_castle(m) + && !move_is_promotion(m)) + MG.store(pos.piece_on(move_to(m)), move_from(m), move_to(m), ss[ply - 1].eval, -ss[ply].eval); + } + + // Initialize "stand pat score", and return it immediately if it is // at least beta. bestValue = staticValue;