]> git.sesse.net Git - stockfish/blob - src/psqtab.h
Benchmark: print nodes searched at the end of testing
[stockfish] / src / psqtab.h
1 /*
2   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
3   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
4   Copyright (C) 2008 Marco Costalba
5
6   Stockfish is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10   
11   Stockfish is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15   
16   You should have received a copy of the GNU General Public License
17   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20
21 #if !defined(PSQTAB_H_INCLUDED)
22 #define PSQTAB_H_INCLUDED
23
24 ////
25 //// Includes
26 ////
27
28 #include "position.h"
29 #include "value.h"
30
31
32 ////
33 //// Variables
34 ////
35
36 static const Value MP = PawnValueMidgame;
37 static const Value MK = KnightValueMidgame;
38 static const Value MB = BishopValueMidgame;
39 static const Value MR = RookValueMidgame;
40 static const Value MQ = QueenValueMidgame;
41
42 static const int MgPST[][64] = {
43   { },
44   {// Pawn
45    // A      B      C      D      E      F      G      H
46         0,     0,     0,     0,     0,     0,     0,     0,
47     MP-38, MP-12, MP- 0, MP+12, MP+12, MP- 0, MP-12, MP-38,
48     MP-38, MP-12, MP+ 6, MP+38, MP+38, MP+ 6, MP-12, MP-38,
49     MP-38, MP-12, MP+16, MP+64, MP+64, MP+16, MP-12, MP-38,
50     MP-38, MP-12, MP+16, MP+38, MP+38, MP+16, MP-12, MP-38,
51     MP-38, MP-12, MP+ 6, MP+12, MP+12, MP+ 6, MP-12, MP-38,
52     MP-38, MP-12, MP- 0, MP+12, MP+12, MP- 0, MP-12, MP-38,
53         0,     0,     0,     0,     0,     0,     0,     0
54   },
55   {// Knight
56    //  A      B       C      D      E      F      G       H
57     MK-128, MK-102, MK-76, MK-64, MK-64, MK-76, MK-102, MK-128,
58     MK- 89, MK- 64, MK-38, MK-25, MK-25, MK-38, MK- 64, MK- 89,
59     MK- 51, MK- 25, MK- 0, MK+12, MK+12, MK- 0, MK- 25, MK- 51,
60     MK- 25, MK-  0, MK+25, MK+38, MK+38, MK+25, MK-  0, MK- 25,
61     MK- 12, MK+ 12, MK+38, MK+51, MK+51, MK+38, MK+ 12, MK- 12,
62     MK- 12, MK+ 12, MK+38, MK+51, MK+51, MK+38, MK+ 12, MK- 12,
63     MK- 51, MK- 25, MK- 0, MK+12, MK+12, MK- 0, MK- 25, MK- 51,
64     MK-182, MK- 64, MK-38, MK-25, MK-25, MK-38, MK- 64, MK-182
65   },
66   {// Bishop
67    // A      B      C      D      E      F      G      H
68     MB-46, MB-46, MB-40, MB-35, MB-35, MB-40, MB-46, MB-46,
69     MB-20, MB- 0, MB- 5, MB- 0, MB- 0, MB- 5, MB- 0, MB-20,
70     MB-15, MB- 5, MB+10, MB+ 5, MB+ 5, MB+10, MB- 5, MB-15,
71     MB-10, MB- 0, MB+ 5, MB+20, MB+20, MB+ 5, MB- 0, MB-10,
72     MB-10, MB- 0, MB+ 5, MB+20, MB+20, MB+ 5, MB- 0, MB-10,
73     MB-15, MB- 5, MB+10, MB+ 5, MB+ 5, MB+10, MB- 5, MB-15,
74     MB-20, MB- 0, MB- 5, MB- 0, MB- 0, MB- 5, MB- 0, MB-20,
75     MB-20, MB-20, MB-15, MB-10, MB-10, MB-15, MB-20, MB-20
76   },
77   {// Rook
78    // A      B      C     D     E     F     G      H
79     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
80     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
81     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
82     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
83     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
84     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
85     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18,
86     MR-18, MR-10, MR-3, MR+4, MR+4, MR-3, MR-10, MR-18
87   },
88   {// Queen
89    //A   B   C   D   E   F   G   H
90     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
91     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
92     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
93     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
94     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
95     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
96     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ,
97     MQ, MQ, MQ, MQ, MQ, MQ, MQ, MQ
98   },
99   {// King
100    //A    B    C    D    E    F    G    H
101     302, 328, 276, 225, 225, 276, 328, 302,
102     276, 302, 251, 200, 200, 251, 302, 276,
103     225, 251, 200, 149, 149, 200, 251, 225,
104     200, 225, 175, 124, 124, 175, 225, 200,
105     175, 200, 149,  98,  98, 149, 200, 175,
106     149, 175, 124,  72,  72, 124, 175, 149,
107     124, 149,  98,  47,  47,  98, 149, 124,
108      98, 124,  72,  21,  21,  72, 124,  98
109   }
110 };
111
112 static const Value EP = PawnValueEndgame;
113 static const Value EK = KnightValueEndgame;
114 static const Value EB = BishopValueEndgame;
115 static const Value ER = RookValueEndgame;
116 static const Value EQ = QueenValueEndgame;
117
118 static const int EgPST[][64] = {
119   { },
120   {// Pawn
121    //A   B   C   D   E   F   G   H
122      0,  0,  0,  0,  0,  0,  0,  0,
123     EP, EP, EP, EP, EP, EP, EP, EP,
124     EP, EP, EP, EP, EP, EP, EP, EP,
125     EP, EP, EP, EP, EP, EP, EP, EP,
126     EP, EP, EP, EP, EP, EP, EP, EP,
127     EP, EP, EP, EP, EP, EP, EP, EP,
128     EP, EP, EP, EP, EP, EP, EP, EP,
129      0,  0,  0,  0,  0,  0,  0,  0
130   },
131   {// Knight
132    // A       B      C      D      E      F      G      H
133     EK-102, EK-76, EK-51, EK-38, EK-38, EK-51, EK-76, EK-102,
134     EK- 76, EK-51, EK-25, EK-12, EK-12, EK-25, EK-51, EK-76,
135     EK- 51, EK-25, EK- 0, EK+12, EK+12, EK- 0, EK-25, EK-51,
136     EK- 38, EK-12, EK+12, EK+25, EK+25, EK+12, EK-12, EK-38,
137     EK- 38, EK-12, EK+12, EK+25, EK+25, EK+12, EK-12, EK-38,
138     EK- 51, EK-25, EK- 0, EK+12, EK+12, EK- 0, EK-25, EK-51,
139     EK- 76, EK-51, EK-25, EK-12, EK-12, EK-25, EK-51, EK-76,
140     EK-102, EK-76, EK-51, EK-38, EK-38, EK-51, EK-76, EK-102
141   },
142   {// Bishop
143    // A      B      C      D      E      F      G      H
144     EB-46, EB-30, EB-23, EB-15, EB-15, EB-23, EB-30, EB-46,
145     EB-30, EB-15, EB- 7, EB- 0, EB- 0, EB- 7, EB-15, EB-30,
146     EB-23, EB- 7, EB- 0, EB+ 7, EB+ 7, EB- 0, EB- 7, EB-23,
147     EB-15, EB- 0, EB+ 7, EB+15, EB+15, EB+ 7, EB- 0, EB-15,
148     EB-15, EB- 0, EB+ 7, EB+15, EB+15, EB+ 7, EB- 0, EB-15,
149     EB-23, EB- 7, EB- 0, EB+ 7, EB+ 7, EB- 0, EB- 7, EB-23,
150     EB-30, EB-15, EB- 7, EB- 0, EB- 0, EB- 7, EB-15, EB-30,
151     EB-46, EB-30, EB-23, EB-15, EB-15, EB-23, EB-30, EB-46
152   },
153   {// Rook
154    // A     B     C     D     E     F     G     H
155     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
156     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
157     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
158     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
159     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
160     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
161     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3,
162     ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3, ER-3
163   },
164   {// Queen
165    // A      B      C      D      E      F      G      H
166     EQ-61, EQ-40, EQ-30, EQ-20, EQ-20, EQ-30, EQ-40, EQ-61,
167     EQ-40, EQ-20, EQ-10, EQ- 0, EQ- 0, EQ-10, EQ-20, EQ-40,
168     EQ-30, EQ-10, EQ- 0, EQ+10, EQ+10, EQ- 0, EQ-10, EQ-30,
169     EQ-20, EQ- 0, EQ+10, EQ+20, EQ+20, EQ+10, EQ- 0, EQ-20,
170     EQ-20, EQ- 0, EQ+10, EQ+20, EQ+20, EQ+10, EQ- 0, EQ-20,
171     EQ-30, EQ-10, EQ- 0, EQ+10, EQ+10, EQ- 0, EQ-10, EQ-30,
172     EQ-40, EQ-20, EQ-10, EQ- 0, EQ- 0, EQ-10, EQ-20, EQ-40,
173     EQ-61, EQ-40, EQ-30, EQ-20, EQ-20, EQ-30, EQ-40, EQ-61
174   },
175   {// King
176    //A    B    C    D    E    F    G    H
177      16,  78, 108, 139, 139, 108,  78,  16,
178      78, 139, 170, 200, 200, 170, 139,  78,
179     108, 170, 200, 230, 230, 200, 170, 108,
180     139, 200, 230, 261, 261, 230, 200, 139,
181     139, 200, 230, 261, 261, 230, 200, 139,
182     108, 170, 200, 230, 230, 200, 170, 108,
183      78, 139, 170, 200, 200, 170, 139,  78,
184      16,  78, 108, 139, 139, 108,  78,  16
185   }
186 };
187
188
189 #endif // !defined(PSQTAB_H_INCLUDED)