From: Marco Costalba Date: Wed, 27 Jan 2010 10:19:56 +0000 (+0100) Subject: Integrate gains table in History X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=f37741cc83e620588d49bbb3a2349c9505e87f61;hp=54b3d44194fb0d36a2b4c3cd6d473ec50a4c1ef1 Integrate gains table in History This will be useful to use gains table in move ordering along with history table. No functional change and big code remove. Signed-off-by: Marco Costalba --- diff --git a/src/Makefile b/src/Makefile index aa7d97f8..dafea2dd 100644 --- a/src/Makefile +++ b/src/Makefile @@ -68,7 +68,7 @@ LDFLAGS = -lpthread OBJS = application.o bitboard.o pawns.o material.o endgame.o evaluate.o main.o \ misc.o move.o movegen.o history.o movepick.o search.o piece.o \ position.o direction.o tt.o value.o uci.o ucioption.o \ - maxgain.o mersenne.o book.o bitbase.o san.o benchmark.o + mersenne.o book.o bitbase.o san.o benchmark.o ### General rules. Do not change diff --git a/src/history.cpp b/src/history.cpp index 22116412..8c20f7e0 100644 --- a/src/history.cpp +++ b/src/history.cpp @@ -42,6 +42,7 @@ History::History() { clear(); } void History::clear() { memset(history, 0, 2 * 8 * 64 * sizeof(int)); + memset(maxStaticValueDelta, 0, 16 * 64 * 64 * sizeof(int)); } @@ -94,3 +95,21 @@ int History::move_ordering_score(Piece p, Square to) const { return history[p][to]; } + + +/// History::set_gain() and History::gain() store and retrieve the +/// gain of a move given the delta of the static position evaluations +/// before and after the move. + +void History::set_gain(Piece p, Square from, Square to, Value delta) +{ + if (delta >= maxStaticValueDelta[p][from][to]) + maxStaticValueDelta[p][from][to] = delta; + else + maxStaticValueDelta[p][from][to]--; +} + +Value History::gain(Piece p, Square from, Square to) const +{ + return Value(maxStaticValueDelta[p][from][to]); +} diff --git a/src/history.h b/src/history.h index ddab6cd0..b1216947 100644 --- a/src/history.h +++ b/src/history.h @@ -28,6 +28,7 @@ #include "depth.h" #include "move.h" #include "piece.h" +#include "value.h" //// @@ -49,9 +50,12 @@ public: void success(Piece p, Square to, Depth d); void failure(Piece p, Square to, Depth d); int move_ordering_score(Piece p, Square to) const; + void set_gain(Piece p, Square from, Square to, Value delta); + Value gain(Piece p, Square from, Square to) const; private: int history[16][64]; // [piece][square] + int maxStaticValueDelta[16][64][64]; // [piece][from_square][to_square] }; diff --git a/src/maxgain.cpp b/src/maxgain.cpp deleted file mode 100644 index 394cc225..00000000 --- a/src/maxgain.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Stockfish, a UCI chess playing engine derived from Glaurung 2.1 - Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2009 Marco Costalba - - Stockfish is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Stockfish is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - - -//// -//// Includes -//// - -#include -#include - -#include "maxgain.h" -#include "value.h" - -//// -//// Functions -//// - - -/// Constructor - -MaxGain::MaxGain() { clear(); } - - -/// MaxGain::clear() clears the table - -void MaxGain::clear() { - memset(maxStaticValueDelta, 0, 16 * 64 * 64 * sizeof(int)); -} - - -/// MaxGain::store - -void MaxGain::store(Piece p, Square from, Square to, Value delta) -{ - if (delta >= maxStaticValueDelta[p][from][to]) - maxStaticValueDelta[p][from][to] = delta; - else - maxStaticValueDelta[p][from][to]--; -} - -// MaxGain::retrieve - -Value MaxGain::retrieve(Piece p, Square from, Square to) -{ - return (Value) maxStaticValueDelta[p][from][to]; -} diff --git a/src/maxgain.h b/src/maxgain.h deleted file mode 100644 index 2b7777b2..00000000 --- a/src/maxgain.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Stockfish, a UCI chess playing engine derived from Glaurung 2.1 - Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2009 Marco Costalba - - Stockfish is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Stockfish is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - - -#if !defined(MAXGAIN_H_INCLUDED) -#define MAXGAIN_H_INCLUDED - -//// -//// Includes -//// - -#include "move.h" -#include "piece.h" -#include "value.h" - - -//// -//// Types -//// - -class MaxGain { - -public: - MaxGain(); - void clear(); - void store(Piece p, Square from, Square to, Value delta); - Value retrieve(Piece p, Square from, Square to); - -private: - int maxStaticValueDelta[16][64][64]; // [piece][from_square][to_square] -}; - - -#endif // !defined(MAXGAIN_H_INCLUDED) - diff --git a/src/search.cpp b/src/search.cpp index defe00d6..2fece7ce 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -32,7 +32,6 @@ #include "book.h" #include "evaluate.h" #include "history.h" -#include "maxgain.h" #include "misc.h" #include "movegen.h" #include "movepick.h" @@ -264,9 +263,6 @@ namespace { // History table History H; - // MaxGain table - MaxGain MG; - /// Functions Value id_loop(const Position& pos, Move searchMoves[]); @@ -704,7 +700,6 @@ namespace { // Initialize TT.new_search(); H.clear(); - MG.clear(); init_ss_array(ss); IterationInfo[1] = IterationInfoType(rml.get_move_score(0), rml.get_move_score(0)); Iteration = 1; @@ -1592,7 +1587,7 @@ namespace { if (predictedDepth >= OnePly) preFutilityValueMargin = 112 * bitScanReverse32(int(predictedDepth) * int(predictedDepth) / 2); - preFutilityValueMargin += MG.retrieve(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45; + preFutilityValueMargin += H.gain(pos.piece_on(move_from(move)), move_from(move), move_to(move)) + 45; futilityValueScaled = ss[ply].eval + preFutilityValueMargin - moveCount * IncrementalFutilityMargin; @@ -2646,7 +2641,7 @@ namespace { && 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), -(before + after)); + H.set_gain(pos.piece_on(move_to(m)), move_from(m), move_to(m), -(before + after)); }