From: Marco Costalba Date: Sun, 16 Feb 2014 12:06:31 +0000 (+0100) Subject: Update SEE to return a Value X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=7b0a2f2a90b63d9e5e092786fbfb54cd8ad3d8e5 Update SEE to return a Value It seems more natural because the actual returned value is from PieceValue[] array. No functional change. --- diff --git a/src/movepick.cpp b/src/movepick.cpp index 09f7611c..539c4868 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -193,12 +193,12 @@ void MovePicker::score() { // is not under attack, ordered by history value, then bad-captures and quiet // moves with a negative SEE. This last group is ordered by the SEE score. Move m; - int seeScore; + Value seeScore; for (ExtMove* it = moves; it != end; ++it) { m = it->move; - if ((seeScore = pos.see_sign(m)) < 0) + if ((seeScore = pos.see_sign(m)) < VALUE_ZERO) it->score = seeScore - HistoryStats::Max; // At the bottom else if (pos.capture(m)) @@ -317,7 +317,7 @@ Move MovePicker::next_move() { move = pick_best(cur++, end)->move; if (move != ttMove) { - if (pos.see_sign(move) >= 0) + if (pos.see_sign(move) >= VALUE_ZERO) return move; // Losing capture, move it to the tail of the array diff --git a/src/movepick.h b/src/movepick.h index c4676ca4..caec8d4a 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -103,7 +103,8 @@ private: Move ttMove; ExtMove killers[6]; Square recaptureSquare; - int captureThreshold, stage; + Value captureThreshold; + int stage; ExtMove *cur, *end, *endQuiets, *endBadCaptures; ExtMove moves[MAX_MOVES]; }; diff --git a/src/position.cpp b/src/position.cpp index 72681e8d..78fccbb2 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1013,7 +1013,7 @@ void Position::undo_null_move() { /// Position::see() is a static exchange evaluator: It tries to estimate the /// material gain or loss resulting from a move. -int Position::see_sign(Move m) const { +Value Position::see_sign(Move m) const { assert(is_ok(m)); @@ -1021,16 +1021,17 @@ int Position::see_sign(Move m) const { // is not less then capturing one. Note that king moves always return // here because king midgame value is set to 0. if (PieceValue[MG][moved_piece(m)] <= PieceValue[MG][piece_on(to_sq(m))]) - return 1; + return VALUE_KNOWN_WIN; return see(m); } -int Position::see(Move m) const { +Value Position::see(Move m) const { Square from, to; Bitboard occupied, attackers, stmAttackers; - int swapList[32], slIndex = 1; + Value swapList[32]; + int slIndex = 1; PieceType captured; Color stm; @@ -1046,7 +1047,7 @@ int Position::see(Move m) const { // handled correctly. Simply return 0 that is always the correct value // unless in the rare case the rook ends up under attack. if (type_of(m) == CASTLING) - return 0; + return VALUE_ZERO; if (type_of(m) == ENPASSANT) { diff --git a/src/position.h b/src/position.h index 5d3048ae..03aa97d8 100644 --- a/src/position.h +++ b/src/position.h @@ -141,8 +141,8 @@ public: void undo_null_move(); // Static exchange evaluation - int see(Move m) const; - int see_sign(Move m) const; + Value see(Move m) const; + Value see_sign(Move m) const; // Accessing hash keys Key key() const; diff --git a/src/search.cpp b/src/search.cpp index 01d2a387..0d1a401c 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -779,7 +779,7 @@ moves_loop: // When in check and at SpNode search starts from here || pos.advanced_pawn_push(move); // Step 12. Extend checks - if (givesCheck && pos.see_sign(move) >= 0) + if (givesCheck && pos.see_sign(move) >= VALUE_ZERO) ext = ONE_PLY; // Singular extension search. If all moves but one fail low on a search of @@ -850,7 +850,7 @@ moves_loop: // When in check and at SpNode search starts from here } // Prune moves with negative SEE at low depths - if (predictedDepth < 4 * ONE_PLY && pos.see_sign(move) < 0) + if (predictedDepth < 4 * ONE_PLY && pos.see_sign(move) < VALUE_ZERO) { if (SpNode) splitPoint->mutex.lock(); @@ -1175,7 +1175,7 @@ moves_loop: // When in check and at SpNode search starts from here continue; } - if (futilityBase < beta && pos.see(move) <= 0) + if (futilityBase < beta && pos.see(move) <= VALUE_ZERO) { bestValue = std::max(bestValue, futilityBase); continue; @@ -1193,7 +1193,7 @@ moves_loop: // When in check and at SpNode search starts from here && (!InCheck || evasionPrunable) && move != ttMove && type_of(move) != PROMOTION - && pos.see_sign(move) < 0) + && pos.see_sign(move) < VALUE_ZERO) continue; // Check for legality just before making the move