Add simple debug hit rate counter
[stockfish] / src / history.h
1 /*
2   Glaurung, a UCI chess playing engine.
3   Copyright (C) 2004-2008 Tord Romstad
4
5   Glaurung is free software: you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation, either version 3 of the License, or
8   (at your option) any later version.
9   
10   Glaurung is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14   
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20 #if !defined(HISTORY_H_INCLUDED)
21 #define HISTORY_H_INCLUDED
22
23 ////
24 //// Includes
25 ////
26
27 #include "depth.h"
28 #include "move.h"
29 #include "piece.h"
30
31
32 ////
33 //// Types
34 ////
35
36 /// The History class stores statistics about how often different moves have
37 /// been successful or unsuccessful during the current search.  These
38 /// statistics are used for reduction and move ordering decisions.
39
40 class History {
41
42 public:
43   History();
44   void clear();
45   void success(Piece p, Move m, Depth d);
46   void failure(Piece p, Move m);
47   int move_ordering_score(Piece p, Move m) const;
48   bool ok_to_prune(Piece p, Move m, Depth d) const;
49
50 private:
51   int history[16][64];  // [piece][square]
52   int successCount[16][64];
53   int failureCount[16][64];
54 };
55
56
57 ////
58 //// Constants and variables
59 ////
60
61 /// HistoryMax controls how often the history counters will be scaled down:
62 /// When the history score for a move gets bigger than HistoryMax, all
63 /// entries in the table are divided by 2.  It is difficult to guess what
64 /// the ideal value of this constant is.  Scaling down the scores often has
65 /// the effect that parts of the search tree which have been searched
66 /// recently have a bigger importance for move ordering than the moves which
67 /// have been searched a long time ago.
68 ///
69 /// Note that HistoryMax should probably be changed whenever the constant
70 /// OnePly in depth.h is changed.  This is somewhat annoying.  Perhaps it
71 /// would be better to scale down the history table at regular intervals?
72
73 const int HistoryMax = 50000;
74
75
76 #endif // !defined(HISTORY_H_INCLUDED)