X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovepick.h;h=7d6651bb5da07c8c1bd87b9c6b26e7cb86384732;hp=9459b8c2a389e9e2aec27e830ba078931b845df7;hb=53051eefc741586f72ccbf9a765592c4ca6030bd;hpb=9f94d2280110a1ba5eb9eb15b0756883037a817d diff --git a/src/movepick.h b/src/movepick.h index 9459b8c2..7d6651bb 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -20,12 +20,36 @@ #if !defined MOVEPICK_H_INCLUDED #define MOVEPICK_H_INCLUDED -#include "history.h" #include "position.h" #include "search.h" #include "types.h" +/// The History class stores statistics about how often different moves +/// have been successful or unsuccessful during the current search. These +/// statistics are used for reduction and move ordering decisions. History +/// 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. + +class History { +public: + + static const Value Max = Value(2000); + + const Value* operator[](Piece p) const { return &history[p][0]; } + Value gain(Piece p, Square to) const { return gains[p][to]; } + + void clear(); + void update(Piece p, Square to, Value bonus); + void update_gain(Piece p, Square to, Value gain); + +private: + Value history[PIECE_NB][SQUARE_NB]; + Value gains[PIECE_NB][SQUARE_NB]; +}; + + /// 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 /// new pseudo legal move each time it is called, until there are no moves left,