From 19dd0de4ff83e682bafa56d27f302d8f00d3040d Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 13 May 2013 20:07:10 +0200 Subject: [PATCH] Reformat previous patch No functional change. --- src/evaluate.cpp | 4 ++-- src/movepick.cpp | 7 ++++--- src/movepick.h | 34 +++++++++++++--------------------- src/search.cpp | 12 ++++-------- 4 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 3a10acba..6b590c78 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -159,9 +159,9 @@ namespace { const Score QueenOnPawnBonus = make_score( 4, 20); const Score RookOpenFileBonus = make_score(43, 21); const Score RookHalfOpenFileBonus = make_score(19, 10); - const Score BishopPawnsPenalty = make_score(8, 12); + const Score BishopPawnsPenalty = make_score( 8, 12); const Score UndefendedMinorPenalty = make_score(25, 10); - const Score TrappedRookPenalty = make_score(90, 0); + const Score TrappedRookPenalty = make_score(90, 0); // Penalty for a bishop on a1/h1 (a8/h8 for black) which is trapped by // a friendly pawn on b2/g2 (b7/g7 for black). This can obviously only diff --git a/src/movepick.cpp b/src/movepick.cpp index 8019f374..a604fe14 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -70,8 +70,8 @@ namespace { /// search captures, promotions and some checks) and about how important good /// move ordering is at the current node. -MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const History& h, - Search::Stack* s, Move refutationMove, Value beta) : pos(p), Hist(h), depth(d) { +MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const History& h, const Refutations& r, + Search::Stack* s, Value beta) : pos(p), Hist(h), depth(d) { assert(d > DEPTH_ZERO); @@ -89,7 +89,8 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const History& h, killers[0].move = ss->killers[0]; killers[1].move = ss->killers[1]; - killers[2].move = refutationMove; + Square prevSq = to_sq((ss-1)->currentMove); + killers[2].move = r[pos.piece_on(prevSq)][prevSq]; // Consider sligtly negative captures as good if at low depth and far from beta if (ss && ss->staticEval < beta - PawnValueMg && d < 3 * ONE_PLY) diff --git a/src/movepick.h b/src/movepick.h index 90475b35..acb57b2e 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -30,21 +30,23 @@ /// The Stats struct stores moves statistics. According to the template parameter -/// the class can store both History and Gains type statistics. History records +/// the class can store History, Gains and Refutations statistics. History records /// how often different moves have been successful or unsuccessful during the /// current search and is used for reduction and move ordering decisions. Gains /// records the move's best evaluation gain from one ply to the next and is used -/// for pruning decisions. Entries are stored according only to moving piece and -/// destination square, in particular two moves with different origin but same -/// destination and same piece will be considered identical. -template +/// for pruning decisions. Refutations store the move that refute a previous one. +/// Entries are stored according only to moving piece and destination square, in +/// particular two moves with different origin but same destination and same piece +/// will be considered identical. +template struct Stats { static const Value Max = Value(2000); - const Value* operator[](Piece p) const { return &table[p][0]; } + const T* operator[](Piece p) const { return &table[p][0]; } void clear() { memset(table, 0, sizeof(table)); } + void update(Piece p, Square to, Move m) { table[p][to] = m; } void update(Piece p, Square to, Value v) { if (Gain) @@ -55,23 +57,13 @@ struct Stats { } private: - Value table[PIECE_NB][SQUARE_NB]; + T table[PIECE_NB][SQUARE_NB]; }; -typedef Stats History; -typedef Stats Gains; - -// FIXME: Document me -struct RefutationTable { - - void clear() { memset(table, 0, sizeof(table)); } - void update(Piece p, Square to, Move m) { table[p][to] = m; } - Move get(Piece p, Square to) const { return table[p][to]; } - -private: - Move table[PIECE_NB][SQUARE_NB]; // Mapping: "move A" -> "move B which refutes move A" +typedef Stats Gains; +typedef Stats History; +typedef Stats Refutations; -}; /// MovePicker class is used to pick one pseudo legal move at a time from the /// current position. The most important method is next_move(), which returns a @@ -85,7 +77,7 @@ class MovePicker { MovePicker& operator=(const MovePicker&); // Silence a warning under MSVC public: - MovePicker(const Position&, Move, Depth, const History&, Search::Stack*, Move, Value); + MovePicker(const Position&, Move, Depth, const History&, const Refutations&, Search::Stack*, Value); MovePicker(const Position&, Move, Depth, const History&, Square); MovePicker(const Position&, Move, const History&, PieceType); template Move next_move(); diff --git a/src/search.cpp b/src/search.cpp index 9d3734b8..40561544 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -88,7 +88,7 @@ namespace { Value DrawValue[COLOR_NB]; History Hist; Gains Gain; - RefutationTable Refutation; + Refutations Refutation; template Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth); @@ -766,12 +766,7 @@ namespace { split_point_start: // At split points actual search starts from here - Move prevMove = (ss-1)->currentMove; - Square prevSq = to_sq(prevMove); - Piece prevP = pos.piece_on(prevSq); - Move refutationMove = Refutation.get(prevP, prevSq); - - MovePicker mp(pos, ttMove, depth, Hist, ss, refutationMove, PvNode ? -VALUE_INFINITE : beta); + MovePicker mp(pos, ttMove, depth, Hist, Refutation, ss, PvNode ? -VALUE_INFINITE : beta); CheckInfo ci(pos); value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc singularExtensionNode = !RootNode @@ -1097,7 +1092,8 @@ split_point_start: // At split points actual search starts from here // Increase history value of the cut-off move Value bonus = Value(int(depth) * int(depth)); Hist.update(pos.piece_moved(bestMove), to_sq(bestMove), bonus); - Refutation.update(prevP, prevSq, bestMove); + Square prevSq = to_sq((ss-1)->currentMove); + Refutation.update(pos.piece_on(prevSq), prevSq, bestMove); // Decrease history of all the other played non-capture moves for (int i = 0; i < playedMoveCount - 1; i++) -- 2.39.2