Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
99 | pmbaty | 1 | /* |
2 | Texel - A UCI chess engine. |
||
3 | Copyright (C) 2012-2014 Peter Ă–sterlund, peterosterlund2@gmail.com |
||
4 | |||
5 | This program 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 | This program 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 | * parameters.cpp |
||
21 | * |
||
22 | * Created on: Feb 25, 2012 |
||
23 | * Author: petero |
||
24 | */ |
||
25 | |||
26 | #include "parameters.hpp" |
||
27 | #include "computerPlayer.hpp" |
||
28 | |||
29 | namespace UciParams { |
||
30 | std::shared_ptr<Parameters::SpinParam> hash(std::make_shared<Parameters::SpinParam>("Hash", 1, 524288, 16)); |
||
31 | std::shared_ptr<Parameters::CheckParam> ownBook(std::make_shared<Parameters::CheckParam>("OwnBook", false)); |
||
32 | std::shared_ptr<Parameters::CheckParam> ponder(std::make_shared<Parameters::CheckParam>("Ponder", true)); |
||
33 | std::shared_ptr<Parameters::CheckParam> analyseMode(std::make_shared<Parameters::CheckParam>("UCI_AnalyseMode", false)); |
||
34 | std::shared_ptr<Parameters::SpinParam> strength(std::make_shared<Parameters::SpinParam>("Strength", 0, 1000, 1000)); |
||
35 | std::shared_ptr<Parameters::SpinParam> threads(std::make_shared<Parameters::SpinParam>("Threads", 1, 64, 1)); |
||
36 | std::shared_ptr<Parameters::SpinParam> multiPV(std::make_shared<Parameters::SpinParam>("MultiPV", 1, 256, 1)); |
||
37 | |||
38 | std::shared_ptr<Parameters::StringParam> gtbPath(std::make_shared<Parameters::StringParam>("GaviotaTbPath", "")); |
||
39 | std::shared_ptr<Parameters::SpinParam> gtbCache(std::make_shared<Parameters::SpinParam>("GaviotaTbCache", 1, 2047, 1)); |
||
40 | std::shared_ptr<Parameters::StringParam> rtbPath(std::make_shared<Parameters::StringParam>("SyzygyPath", "")); |
||
41 | std::shared_ptr<Parameters::SpinParam> minProbeDepth(std::make_shared<Parameters::SpinParam>("MinProbeDepth", 0, 100, 1)); |
||
42 | |||
43 | std::shared_ptr<Parameters::ButtonParam> clearHash(std::make_shared<Parameters::ButtonParam>("Clear Hash")); |
||
44 | } |
||
45 | |||
46 | int pieceValue[Piece::nPieceTypes]; |
||
47 | |||
48 | DEFINE_PARAM(pV); |
||
49 | DEFINE_PARAM(nV); |
||
50 | DEFINE_PARAM(bV); |
||
51 | DEFINE_PARAM(rV); |
||
52 | DEFINE_PARAM(qV); |
||
53 | DEFINE_PARAM(kV); |
||
54 | |||
55 | DEFINE_PARAM(pawnIslandPenalty); |
||
56 | DEFINE_PARAM(pawnBackwardPenalty); |
||
57 | DEFINE_PARAM(pawnSemiBackwardPenalty1); |
||
58 | DEFINE_PARAM(pawnSemiBackwardPenalty2); |
||
59 | DEFINE_PARAM(pawnRaceBonus); |
||
60 | DEFINE_PARAM(passedPawnEGFactor); |
||
61 | DEFINE_PARAM(RBehindPP1); |
||
62 | DEFINE_PARAM(RBehindPP2); |
||
63 | |||
64 | DEFINE_PARAM(QvsRMBonus1); |
||
65 | DEFINE_PARAM(QvsRMBonus2); |
||
66 | DEFINE_PARAM(knightVsQueenBonus1); |
||
67 | DEFINE_PARAM(knightVsQueenBonus2); |
||
68 | DEFINE_PARAM(knightVsQueenBonus3); |
||
69 | DEFINE_PARAM(krkpBonus); |
||
70 | DEFINE_PARAM(krpkbBonus); |
||
71 | DEFINE_PARAM(krpkbPenalty); |
||
72 | DEFINE_PARAM(krpknBonus); |
||
73 | DEFINE_PARAM(RvsBPBonus); |
||
74 | |||
75 | DEFINE_PARAM(pawnTradePenalty); |
||
76 | DEFINE_PARAM(pieceTradeBonus); |
||
77 | DEFINE_PARAM(pawnTradeThreshold); |
||
78 | DEFINE_PARAM(pieceTradeThreshold); |
||
79 | |||
80 | DEFINE_PARAM(threatBonus1); |
||
81 | DEFINE_PARAM(threatBonus2); |
||
82 | |||
83 | DEFINE_PARAM(rookHalfOpenBonus); |
||
84 | DEFINE_PARAM(rookOpenBonus); |
||
85 | DEFINE_PARAM(rookDouble7thRowBonus); |
||
86 | DEFINE_PARAM(trappedRookPenalty1); |
||
87 | DEFINE_PARAM(trappedRookPenalty2); |
||
88 | |||
89 | DEFINE_PARAM(bishopPairPawnPenalty); |
||
90 | DEFINE_PARAM(trappedBishopPenalty); |
||
91 | DEFINE_PARAM(oppoBishopPenalty); |
||
92 | |||
93 | DEFINE_PARAM(kingSafetyHalfOpenBCDEFG1); |
||
94 | DEFINE_PARAM(kingSafetyHalfOpenBCDEFG2); |
||
95 | DEFINE_PARAM(kingSafetyHalfOpenAH1); |
||
96 | DEFINE_PARAM(kingSafetyHalfOpenAH2); |
||
97 | DEFINE_PARAM(kingSafetyWeight1); |
||
98 | DEFINE_PARAM(kingSafetyWeight2); |
||
99 | DEFINE_PARAM(kingSafetyWeight3); |
||
100 | DEFINE_PARAM(kingSafetyWeight4); |
||
101 | DEFINE_PARAM(kingSafetyThreshold); |
||
102 | DEFINE_PARAM(knightKingProtectBonus); |
||
103 | DEFINE_PARAM(bishopKingProtectBonus); |
||
104 | DEFINE_PARAM(pawnStormBonus); |
||
105 | |||
106 | DEFINE_PARAM(pawnLoMtrl); |
||
107 | DEFINE_PARAM(pawnHiMtrl); |
||
108 | DEFINE_PARAM(minorLoMtrl); |
||
109 | DEFINE_PARAM(minorHiMtrl); |
||
110 | DEFINE_PARAM(castleLoMtrl); |
||
111 | DEFINE_PARAM(castleHiMtrl); |
||
112 | DEFINE_PARAM(queenLoMtrl); |
||
113 | DEFINE_PARAM(queenHiMtrl); |
||
114 | DEFINE_PARAM(passedPawnLoMtrl); |
||
115 | DEFINE_PARAM(passedPawnHiMtrl); |
||
116 | DEFINE_PARAM(kingSafetyLoMtrl); |
||
117 | DEFINE_PARAM(kingSafetyHiMtrl); |
||
118 | DEFINE_PARAM(oppoBishopLoMtrl); |
||
119 | DEFINE_PARAM(oppoBishopHiMtrl); |
||
120 | DEFINE_PARAM(knightOutpostLoMtrl); |
||
121 | DEFINE_PARAM(knightOutpostHiMtrl); |
||
122 | |||
123 | |||
124 | DEFINE_PARAM(aspirationWindow); |
||
125 | DEFINE_PARAM(rootLMRMoveCount); |
||
126 | |||
127 | DEFINE_PARAM(razorMargin1); |
||
128 | DEFINE_PARAM(razorMargin2); |
||
129 | |||
130 | DEFINE_PARAM(reverseFutilityMargin1); |
||
131 | DEFINE_PARAM(reverseFutilityMargin2); |
||
132 | DEFINE_PARAM(reverseFutilityMargin3); |
||
133 | DEFINE_PARAM(reverseFutilityMargin4); |
||
134 | |||
135 | DEFINE_PARAM(futilityMargin1); |
||
136 | DEFINE_PARAM(futilityMargin2); |
||
137 | DEFINE_PARAM(futilityMargin3); |
||
138 | DEFINE_PARAM(futilityMargin4); |
||
139 | |||
140 | DEFINE_PARAM(lmpMoveCountLimit1); |
||
141 | DEFINE_PARAM(lmpMoveCountLimit2); |
||
142 | DEFINE_PARAM(lmpMoveCountLimit3); |
||
143 | DEFINE_PARAM(lmpMoveCountLimit4); |
||
144 | |||
145 | DEFINE_PARAM(lmrMoveCountLimit1); |
||
146 | DEFINE_PARAM(lmrMoveCountLimit2); |
||
147 | |||
148 | DEFINE_PARAM(quiesceMaxSortMoves); |
||
149 | DEFINE_PARAM(deltaPruningMargin); |
||
150 | |||
151 | DEFINE_PARAM(timeMaxRemainingMoves); |
||
152 | DEFINE_PARAM(bufferTime); |
||
153 | DEFINE_PARAM(minTimeUsage); |
||
154 | DEFINE_PARAM(maxTimeUsage); |
||
155 | DEFINE_PARAM(timePonderHitRate); |
||
156 | |||
157 | /** Piece/square table for king during middle game. */ |
||
158 | ParamTable<64> kt1b { -200, 200, useUciParam, |
||
159 | { 71, 118, 113, 98, 88, 112, 129, 44, |
||
160 | 117, 3, 36, 37, 64, 37, 3, 99, |
||
161 | -28, -4, 13, 12, 18, 28, 25, -41, |
||
162 | -11, -11, -15, -20, -12, 4, -9, -19, |
||
163 | -36, -14, -29, -31, -33, -33, -19, -76, |
||
164 | -12, 1, -25, -49, -23, -11, 7, -17, |
||
165 | 24, 23, 3, -7, 2, -1, 39, 36, |
||
166 | -2, 34, 24, -27, 14, -15, 31, 10 }, |
||
167 | { 1, 2, 3, 4, 5, 6, 7, 8, |
||
168 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
169 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
170 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
171 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
172 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
173 | 49, 50, 51, 52, 53, 54, 55, 56, |
||
174 | 57, 58, 59, 60, 61, 62, 63, 64 } |
||
175 | }; |
||
176 | ParamTableMirrored<64> kt1w(kt1b); |
||
177 | |||
178 | /** Piece/square table for king during end game. */ |
||
179 | ParamTable<64> kt2b { -200, 200, useUciParam, |
||
180 | { -18, 48, 73, 82, 82, 73, 48, -18, |
||
181 | 33, 93, 108, 100, 100, 108, 93, 33, |
||
182 | 78, 104, 110, 109, 109, 110, 104, 78, |
||
183 | 68, 97, 105, 108, 108, 105, 97, 68, |
||
184 | 54, 79, 92, 97, 97, 92, 79, 54, |
||
185 | 43, 61, 75, 82, 82, 75, 61, 43, |
||
186 | 28, 47, 63, 62, 62, 63, 47, 28, |
||
187 | 0, 20, 33, 20, 20, 33, 20, 0 }, |
||
188 | { 1, 2, 3, 4, 4, 3, 2, 1, |
||
189 | 5, 6, 7, 8, 8, 7, 6, 5, |
||
190 | 9, 10, 11, 12, 12, 11, 10, 9, |
||
191 | 13, 14, 15, 16, 16, 15, 14, 13, |
||
192 | 17, 18, 19, 20, 20, 19, 18, 17, |
||
193 | 21, 22, 23, 24, 24, 23, 22, 21, |
||
194 | 25, 26, 27, 28, 28, 27, 26, 25, |
||
195 | 0, 29, 30, 31, 31, 30, 29, 0 } |
||
196 | }; |
||
197 | ParamTableMirrored<64> kt2w(kt2b); |
||
198 | |||
199 | /** Piece/square table for pawns during middle game. */ |
||
200 | ParamTable<64> pt1b { -200, 300, useUciParam, |
||
201 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
202 | 137, 103, 117, 123, 74, 97, -12, 148, |
||
203 | 19, 31, 28, 26, 22, 41, 32, 8, |
||
204 | -7, -5, -11, -1, 4, -12, -9, -7, |
||
205 | -9, -2, -7, 0, -1, 2, -2, -17, |
||
206 | -12, -9, -27, -15, -5, -12, -5, -6, |
||
207 | -10, -14, -24, -20, -13, 0, 5, -5, |
||
208 | 0, 0, 0, 0, 0, 0, 0, 0 }, |
||
209 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
210 | 1, 2, 3, 4, 5, 6, 7, 8, |
||
211 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
212 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
213 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
214 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
215 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
216 | 0, 0, 0, 0, 0, 0, 0, 0 } |
||
217 | }; |
||
218 | ParamTableMirrored<64> pt1w(pt1b); |
||
219 | |||
220 | /** Piece/square table for pawns during end game. */ |
||
221 | ParamTable<64> pt2b { -200, 200, useUciParam, |
||
222 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
223 | -10, 9, 4, -9, -9, 4, 9, -10, |
||
224 | 33, 35, 22, 7, 7, 22, 35, 33, |
||
225 | 22, 26, 15, 6, 6, 15, 26, 22, |
||
226 | 12, 23, 13, 13, 13, 13, 23, 12, |
||
227 | 4, 17, 17, 21, 21, 17, 17, 4, |
||
228 | 3, 17, 27, 32, 32, 27, 17, 3, |
||
229 | 0, 0, 0, 0, 0, 0, 0, 0 }, |
||
230 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
231 | 1, 2, 3, 4, 4, 3, 2, 1, |
||
232 | 5, 6, 7, 8, 8, 7, 6, 5, |
||
233 | 9, 10, 11, 12, 12, 11, 10, 9, |
||
234 | 13, 14, 15, 16, 16, 15, 14, 13, |
||
235 | 17, 18, 19, 20, 20, 19, 18, 17, |
||
236 | 21, 22, 23, 24, 24, 23, 22, 21, |
||
237 | 0, 0, 0, 0, 0, 0, 0, 0 } |
||
238 | }; |
||
239 | ParamTableMirrored<64> pt2w(pt2b); |
||
240 | |||
241 | /** Piece/square table for knights during middle game. */ |
||
242 | ParamTable<64> nt1b { -300, 200, useUciParam, |
||
243 | {-258, -21, -42, -4, 22, -65, -22,-239, |
||
244 | -57, -52, 13, 40, 35, 98, -2, 20, |
||
245 | -41, -5, 22, 39, 95, 102, 47, -13, |
||
246 | -15, 1, 9, 38, 16, 45, 22, 23, |
||
247 | -18, 6, 11, 9, 27, 25, 27, -12, |
||
248 | -49, -10, -1, 11, 19, 0, -5, -35, |
||
249 | -55, -39, -23, 2, -2, -7, -30, -27, |
||
250 | -78, -38, -42, -34, -24, -31, -39, -94 }, |
||
251 | { 1, 2, 3, 4, 5, 6, 7, 8, |
||
252 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
253 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
254 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
255 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
256 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
257 | 49, 50, 51, 52, 53, 54, 55, 56, |
||
258 | 57, 58, 59, 60, 61, 62, 63, 64 } |
||
259 | }; |
||
260 | ParamTableMirrored<64> nt1w(nt1b); |
||
261 | |||
262 | /** Piece/square table for knights during end game. */ |
||
263 | ParamTable<64> nt2b { -200, 200, useUciParam, |
||
264 | { -87, 7, 11, -2, -2, 11, 7, -87, |
||
265 | -10, 8, 20, 37, 37, 20, 8, -10, |
||
266 | -6, 20, 36, 41, 41, 36, 20, -6, |
||
267 | -1, 29, 46, 47, 47, 46, 29, -1, |
||
268 | 2, 30, 43, 44, 44, 43, 30, 2, |
||
269 | -24, 6, 23, 34, 34, 23, 6, -24, |
||
270 | -35, -3, 4, 9, 9, 4, -3, -35, |
||
271 | -42, -57, -15, -12, -12, -15, -57, -42 }, |
||
272 | { 1, 2, 3, 4, 4, 3, 2, 1, |
||
273 | 5, 6, 7, 8, 8, 7, 6, 5, |
||
274 | 9, 10, 11, 12, 12, 11, 10, 9, |
||
275 | 13, 14, 15, 16, 16, 15, 14, 13, |
||
276 | 17, 18, 19, 20, 20, 19, 18, 17, |
||
277 | 21, 22, 23, 24, 24, 23, 22, 21, |
||
278 | 25, 26, 27, 28, 28, 27, 26, 25, |
||
279 | 29, 30, 31, 32, 32, 31, 30, 29 } |
||
280 | }; |
||
281 | ParamTableMirrored<64> nt2w(nt2b); |
||
282 | |||
283 | /** Piece/square table for bishops during middle game. */ |
||
284 | ParamTable<64> bt1b { -200, 200, useUciParam, |
||
285 | { -56, -6, 28, -46, 16, -71, 18, -41, |
||
286 | -35, -29, -29, 19, -24, -11, -52, -54, |
||
287 | -19, 11, -10, 2, 41, 56, 42, 3, |
||
288 | -25, -10, -5, 30, -6, 4, -17, -4, |
||
289 | -5, -17, -8, 9, 14, -20, -13, -1, |
||
290 | -17, 0, -2, -4, -5, -5, -5, 0, |
||
291 | 10, -5, 5, -7, -1, -5, 11, 9, |
||
292 | -31, 6, -16, -15, -20, -11, -26, -12 }, |
||
293 | { 1, 2, 3, 4, 5, 6, 7, 8, |
||
294 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
295 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
296 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
297 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
298 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
299 | 49, 50, 51, 52, 53, 54, 55, 56, |
||
300 | 57, 58, 59, 60, 61, 62, 63, 64 } |
||
301 | }; |
||
302 | ParamTableMirrored<64> bt1w(bt1b); |
||
303 | |||
304 | /** Piece/square table for bishops during end game. */ |
||
305 | ParamTable<64> bt2b { -200, 200, useUciParam, |
||
306 | { 20, 20, 17, 22, 22, 17, 20, 20, |
||
307 | 20, 20, 25, 30, 30, 25, 20, 20, |
||
308 | 17, 25, 36, 38, 38, 36, 25, 17, |
||
309 | 22, 30, 38, 43, 43, 38, 30, 22, |
||
310 | 22, 30, 38, 43, 43, 38, 30, 22, |
||
311 | 17, 25, 36, 38, 38, 36, 25, 17, |
||
312 | 20, 20, 25, 30, 30, 25, 20, 20, |
||
313 | 20, 20, 17, 22, 22, 17, 20, 20 }, |
||
314 | { 10, 1, 2, 3, 3, 2, 1, 10, |
||
315 | 1, 4, 5, 6, 6, 5, 4, 1, |
||
316 | 2, 5, 7, 8, 8, 7, 5, 2, |
||
317 | 3, 6, 8, 9, 9, 8, 6, 3, |
||
318 | 3, 6, 8, 9, 9, 8, 6, 3, |
||
319 | 2, 5, 7, 8, 8, 7, 5, 2, |
||
320 | 1, 4, 5, 6, 6, 5, 4, 1, |
||
321 | 10, 1, 2, 3, 3, 2, 1, 10 } |
||
322 | }; |
||
323 | ParamTableMirrored<64> bt2w(bt2b); |
||
324 | |||
325 | /** Piece/square table for queens during middle game. */ |
||
326 | ParamTable<64> qt1b { -200, 200, useUciParam, |
||
327 | { -32, -23, -22, -26, 29, -11, 87, 32, |
||
328 | -66,-100, -54, -79,-113, -32, -66, 49, |
||
329 | -49, -41, -74, -68, -32, -22, -33, -48, |
||
330 | -37, -38, -44, -66, -60, -54, -40, -45, |
||
331 | -27, -32, -19, -38, -30, -32, -3, -36, |
||
332 | -27, -17, -14, -21, -11, -14, 3, -20, |
||
333 | -30, -22, -13, -4, -5, 3, -8, -30, |
||
334 | -15, -19, -7, -8, -2, -18, -48, -19 }, |
||
335 | { 1, 2, 3, 4, 5, 6, 7, 8, |
||
336 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
337 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
338 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
339 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
340 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
341 | 49, 50, 51, 52, 53, 54, 55, 56, |
||
342 | 57, 58, 59, 60, 61, 62, 63, 64 } |
||
343 | }; |
||
344 | ParamTableMirrored<64> qt1w(qt1b); |
||
345 | |||
346 | ParamTable<64> qt2b { -200, 200, useUciParam, |
||
347 | { -17, -20, -19, -16, -16, -19, -20, -17, |
||
348 | -20, -23, -14, -8, -8, -14, -23, -20, |
||
349 | -19, -14, -3, -5, -5, -3, -14, -19, |
||
350 | -16, -8, -5, 7, 7, -5, -8, -16, |
||
351 | -16, -8, -5, 7, 7, -5, -8, -16, |
||
352 | -19, -14, -3, -5, -5, -3, -14, -19, |
||
353 | -20, -23, -14, -8, -8, -14, -23, -20, |
||
354 | -17, -20, -19, -16, -16, -19, -20, -17 }, |
||
355 | { 10, 1, 2, 3, 3, 2, 1, 10, |
||
356 | 1, 4, 5, 6, 6, 5, 4, 1, |
||
357 | 2, 5, 7, 8, 8, 7, 5, 2, |
||
358 | 3, 6, 8, 9, 9, 8, 6, 3, |
||
359 | 3, 6, 8, 9, 9, 8, 6, 3, |
||
360 | 2, 5, 7, 8, 8, 7, 5, 2, |
||
361 | 1, 4, 5, 6, 6, 5, 4, 1, |
||
362 | 10, 1, 2, 3, 3, 2, 1, 10 } |
||
363 | }; |
||
364 | ParamTableMirrored<64> qt2w(qt2b); |
||
365 | |||
366 | /** Piece/square table for rooks during end game. */ |
||
367 | ParamTable<64> rt1b { -200, 200, useUciParam, |
||
368 | { 39, 45, 36, 36, 39, 58, 54, 63, |
||
369 | 34, 36, 47, 53, 47, 53, 57, 47, |
||
370 | 27, 36, 40, 36, 53, 71, 65, 53, |
||
371 | 15, 18, 24, 27, 26, 33, 38, 19, |
||
372 | -1, -1, 12, 6, 9, 12, 21, 3, |
||
373 | -17, -10, -4, -3, 0, 3, 15, -5, |
||
374 | -24, -18, -6, 1, 2, -3, 1, -35, |
||
375 | -3, -1, 6, 9, 9, 9, 3, 4 }, |
||
376 | { 1, 2, 3, 4, 5, 6, 7, 8, |
||
377 | 9, 10, 11, 12, 13, 14, 15, 16, |
||
378 | 17, 18, 19, 20, 21, 22, 23, 24, |
||
379 | 25, 26, 27, 28, 29, 30, 31, 32, |
||
380 | 33, 34, 35, 36, 37, 38, 39, 40, |
||
381 | 41, 42, 43, 44, 45, 46, 47, 48, |
||
382 | 49, 50, 51, 52, 53, 54, 55, 56, |
||
383 | 57, 58, 59, 60, 61, 62, 63, 64 } |
||
384 | }; |
||
385 | ParamTableMirrored<64> rt1w(rt1b); |
||
386 | |||
387 | ParamTable<64> knightOutpostBonus { 0, 150, useUciParam, |
||
388 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
389 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
390 | 0, 29, 49, 46, 46, 49, 29, 0, |
||
391 | 0, 19, 38, 43, 43, 38, 19, 0, |
||
392 | 0, 0, 23, 43, 43, 23, 0, 0, |
||
393 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
394 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
395 | 0, 0, 0, 0, 0, 0, 0, 0 }, |
||
396 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
397 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
398 | 0, 1, 2, 3, 3, 2, 1, 0, |
||
399 | 0, 4, 5, 6, 6, 5, 4, 0, |
||
400 | 0, 0, 7, 8, 8, 7, 0, 0, |
||
401 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
402 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
403 | 0, 0, 0, 0, 0, 0, 0, 0 } |
||
404 | }; |
||
405 | |||
406 | ParamTable<64> protectedPawnBonus { -50, 150, useUciParam, |
||
407 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
408 | 104, 109, 69, 136, 136, 69, 109, 104, |
||
409 | 28, 53, 51, 63, 63, 51, 53, 28, |
||
410 | 4, 11, 16, 17, 17, 16, 11, 4, |
||
411 | 4, 6, 5, 8, 8, 5, 6, 4, |
||
412 | 8, 11, 17, 11, 11, 17, 11, 8, |
||
413 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
414 | 0, 0, 0, 0, 0, 0, 0, 0 }, |
||
415 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
416 | 1, 2, 3, 4, 4, 3, 2, 1, |
||
417 | 5, 6, 7, 8, 8, 7, 6, 5, |
||
418 | 9, 10, 11, 12, 12, 11, 10, 9, |
||
419 | 13, 14, 15, 16, 16, 15, 14, 13, |
||
420 | 17, 18, 19, 20, 20, 19, 18, 17, |
||
421 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
422 | 0, 0, 0, 0, 0, 0, 0, 0 } |
||
423 | }; |
||
424 | |||
425 | ParamTable<64> attackedPawnBonus { -150, 100, useUciParam, |
||
426 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
427 | -35, -55, 17, -16, -16, 17, -55, -35, |
||
428 | 10, 0, 20, 18, 18, 20, 0, 10, |
||
429 | -10, -5, -6, 9, 9, -6, -5, -10, |
||
430 | -35, 11, -12, 13, 13, -12, 11, -35, |
||
431 | -101, -24, -59, -43, -43, -59, -24,-101, |
||
432 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
433 | 0, 0, 0, 0, 0, 0, 0, 0 }, |
||
434 | { 0, 0, 0, 0, 0, 0, 0, 0, |
||
435 | 1, 2, 3, 4, 4, 3, 2, 1, |
||
436 | 5, 6, 7, 8, 8, 7, 6, 5, |
||
437 | 9, 10, 11, 12, 12, 11, 10, 9, |
||
438 | 13, 14, 15, 16, 16, 15, 14, 13, |
||
439 | 17, 18, 19, 20, 20, 19, 18, 17, |
||
440 | 0, 0, 0, 0, 0, 0, 0, 0, |
||
441 | 0, 0, 0, 0, 0, 0, 0, 0 } |
||
442 | }; |
||
443 | |||
444 | ParamTable<4> protectBonus { -50, 50, useUciParam, |
||
445 | { 1, 11, 7, 2 }, |
||
446 | { 1, 2, 3, 4 } |
||
447 | }; |
||
448 | |||
449 | ParamTable<15> rookMobScore { -50, 50, useUciParam, |
||
450 | {-17,-11, -6, -2, 0, 5, 9, 12, 17, 20, 22, 26, 28, 25, 30 }, |
||
451 | { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } |
||
452 | }; |
||
453 | ParamTable<14> bishMobScore = { -50, 50, useUciParam, |
||
454 | {-14,-10, -1, 5, 12, 18, 24, 28, 31, 35, 34, 38, 39, 31 }, |
||
455 | { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 } |
||
456 | }; |
||
457 | ParamTable<28> knightMobScore { -200, 200, useUciParam, |
||
458 | {-96,-25, 16,-36,-12, 4, 10,-49,-18, -3, 11, 15,-20,-20,-12, -7, 1, 6, 8,-22,-22,-19,-10, -3, 2, 7, 9, 6 }, |
||
459 | { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26 } |
||
460 | }; |
||
461 | ParamTable<28> queenMobScore { -100, 100, useUciParam, |
||
462 | { 7, -1, -4, -3, -1, 1, 4, 5, 9, 10, 14, 17, 20, 24, 28, 30, 35, 36, 41, 43, 44, 46, 45, 45, 39, 39, 43, 30 }, |
||
463 | { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 } |
||
464 | }; |
||
465 | |||
466 | ParamTable<36> connectedPPBonus { -200, 400, useUciParam, |
||
467 | { -4, -3, 3, 11, 5, -13, |
||
468 | -3, 1, 0, 7, 6, 8, |
||
469 | 3, 0, 16, 12, 22, 17, |
||
470 | 11, 7, 12, 40, -2, 38, |
||
471 | 5, 6, 22, -2, 102, -27, |
||
472 | -13, 8, 17, 38, -27, 337 }, |
||
473 | { 1, 2, 4, 7, 11, 16, |
||
474 | 2, 3, 5, 8, 12, 17, |
||
475 | 4, 5, 6, 9, 13, 18, |
||
476 | 7, 8, 9, 10, 14, 19, |
||
477 | 11, 12, 13, 14, 15, 20, |
||
478 | 16, 17, 18, 19, 20, 21 } |
||
479 | }; |
||
480 | |||
481 | ParamTable<8> passedPawnBonusX { -200, 200, useUciParam, |
||
482 | { 0, 2, -2, -5, -5, -2, 2, 0 }, |
||
483 | { 0, 1, 2, 3, 3, 2, 1, 0 } |
||
484 | }; |
||
485 | |||
486 | ParamTable<8> passedPawnBonusY { -200, 200, useUciParam, |
||
487 | { 0, 3, 5, 14, 33, 63,103, 0 }, |
||
488 | { 0, 1, 2, 3, 4, 5, 6, 0 } |
||
489 | }; |
||
490 | |||
491 | ParamTable<10> ppBlockerBonus { -50, 50, useUciParam, |
||
492 | { 23, 26, 11,-11, 47, -1, 3, 1, -2, 8 }, |
||
493 | { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } |
||
494 | }; |
||
495 | |||
496 | ParamTable<8> candidatePassedBonus { -200, 200, useUciParam, |
||
497 | { -1, -1, 5, 14, 36, 15, -1, -1 }, |
||
498 | { 0, 1, 2, 3, 4, 5, 0, 0 } |
||
499 | }; |
||
500 | |||
501 | ParamTable<16> majorPieceRedundancy { -200, 200, useUciParam, |
||
502 | { 0, -85, 0, 0, |
||
503 | 85, 0, 0, 0, |
||
504 | 0, 0, 0, 88, |
||
505 | 0, 0, -88, 0 }, |
||
506 | { 0, -1, 0, 0, |
||
507 | 1, 0, 0, 0, |
||
508 | 0, 0, 0, 2, |
||
509 | 0, 0, -2, 0 } |
||
510 | }; |
||
511 | |||
512 | ParamTable<5> QvsRRBonus { -200, 200, useUciParam, |
||
513 | {-10, 31, 55,113, 68 }, |
||
514 | { 1, 2, 3, 4, 5 } |
||
515 | }; |
||
516 | |||
517 | ParamTable<7> RvsMBonus { -200, 200, useUciParam, |
||
518 | { 13, 37, 45, 35, 26, -2,-60 }, |
||
519 | { 1, 2, 3, 4, 5, 6, 7 } |
||
520 | }; |
||
521 | |||
522 | ParamTable<7> RvsMMBonus { -200, 200, useUciParam, |
||
523 | {-92,-92,-12, 7, 12, 19, 54 }, |
||
524 | { 1, 1, 2, 3, 4, 5, 6 } |
||
525 | }; |
||
526 | |||
527 | ParamTable<4> bishopPairValue { 0, 200, useUciParam, |
||
528 | {100, 79, 63, 57 }, |
||
529 | { 1, 2, 3, 4 } |
||
530 | }; |
||
531 | |||
532 | ParamTable<7> rookEGDrawFactor { 0, 255, useUciParam, |
||
533 | { 65, 70,109,137,133,156,156 }, |
||
534 | { 1, 2, 3, 4, 5, 6, 7 } |
||
535 | }; |
||
536 | |||
537 | ParamTable<7> RvsBPDrawFactor { 0, 255, useUciParam, |
||
538 | {128, 93,108,123,127,249,162 }, |
||
539 | { 0, 1, 2, 3, 4, 5, 6 } |
||
540 | }; |
||
541 | ParamTable<4> castleFactor { 0, 128, useUciParam, |
||
542 | { 64, 42, 30, 23 }, |
||
543 | { 1, 2, 3, 4 } |
||
544 | }; |
||
545 | |||
546 | ParamTable<9> pawnShelterTable { -100, 100, useUciParam, |
||
547 | { 13, 31,-20, 6, 23,-12, 1, 9, 2 }, |
||
548 | { 1, 2, 3, 4, 5, 6, 7, 8, 9 } |
||
549 | }; |
||
550 | |||
551 | ParamTable<9> pawnStormTable { -400, 100, useUciParam, |
||
552 | {-166,-93,-273, 37, 32, 4, 14, 4,-12 }, |
||
553 | { 1, 2, 3, 4, 5, 6, 7, 8, 9 } |
||
554 | }; |
||
555 | |||
556 | ParamTable<14> kingAttackWeight { 0, 400, useUciParam, |
||
557 | { 0, 3, 0, 6, 7, 14, 29, 57, 64,103,112,152,211,353 }, |
||
558 | { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 } |
||
559 | }; |
||
560 | |||
561 | ParamTable<5> kingPPSupportK { 0, 200, useUciParam, |
||
562 | { 47, 71, 65, 56, 98 }, |
||
563 | { 1, 2, 3, 4, 5 } |
||
564 | }; |
||
565 | |||
566 | ParamTable<8> kingPPSupportP { 1, 64, useUciParam, |
||
567 | { 0, 4, 4, 10, 16, 22, 32, 0 }, |
||
568 | { 0, 1, 2, 3, 4, 5, 0, 0 } |
||
569 | }; |
||
570 | |||
571 | ParamTable<8> pawnDoubledPenalty { 0, 50, useUciParam, |
||
572 | { 42, 22, 17, 11, 11, 17, 22, 42 }, |
||
573 | { 1, 2, 3, 4, 4, 3, 2, 1 } |
||
574 | }; |
||
575 | |||
576 | ParamTable<8> pawnIsolatedPenalty { 0, 50, useUciParam, |
||
577 | { 2, 12, 10, 14, 14, 10, 12, 2 }, |
||
578 | { 1, 2, 3, 4, 4, 3, 2, 1 } |
||
579 | }; |
||
580 | |||
581 | ParamTable<10> halfMoveFactor { 0, 192, useUciParam, |
||
582 | {128,128,128,128, 43, 27, 19, 13, 9, 5 }, |
||
583 | { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6 } |
||
584 | }; |
||
585 | |||
586 | ParamTable<9> stalePawnFactor { 0, 192, useUciParam, |
||
587 | {119,127,131,133,137,129,104, 65, 28 }, |
||
588 | { 1, 2, 3, 4, 5, 6, 7, 8, 9 } |
||
589 | }; |
||
590 | |||
591 | Parameters::Parameters() { |
||
592 | std::string about = ComputerPlayer::engineName + |
||
593 | " by Peter Osterlund, see http://web.comhem.se/petero2home/javachess/index.html#texel"; |
||
594 | addPar(std::make_shared<StringParam>("UCI_EngineAbout", about)); |
||
595 | |||
596 | addPar(UciParams::hash); |
||
597 | addPar(UciParams::ownBook); |
||
598 | addPar(UciParams::ponder); |
||
599 | addPar(UciParams::analyseMode); |
||
600 | addPar(UciParams::strength); |
||
601 | addPar(UciParams::threads); |
||
602 | addPar(UciParams::multiPV); |
||
603 | |||
604 | addPar(UciParams::gtbPath); |
||
605 | addPar(UciParams::gtbCache); |
||
606 | addPar(UciParams::rtbPath); |
||
607 | addPar(UciParams::minProbeDepth); |
||
608 | addPar(UciParams::clearHash); |
||
609 | |||
610 | // Evaluation parameters |
||
611 | REGISTER_PARAM(pV, "PawnValue"); |
||
612 | REGISTER_PARAM(nV, "KnightValue"); |
||
613 | REGISTER_PARAM(bV, "BishopValue"); |
||
614 | REGISTER_PARAM(rV, "RookValue"); |
||
615 | REGISTER_PARAM(qV, "QueenValue"); |
||
616 | REGISTER_PARAM(kV, "KingValue"); |
||
617 | |||
618 | REGISTER_PARAM(pawnIslandPenalty, "PawnIslandPenalty"); |
||
619 | REGISTER_PARAM(pawnBackwardPenalty, "PawnBackwardPenalty"); |
||
620 | REGISTER_PARAM(pawnSemiBackwardPenalty1, "PawnSemiBackwardPenalty1"); |
||
621 | REGISTER_PARAM(pawnSemiBackwardPenalty2, "PawnSemiBackwardPenalty2"); |
||
622 | REGISTER_PARAM(pawnRaceBonus, "PawnRaceBonus"); |
||
623 | REGISTER_PARAM(passedPawnEGFactor, "PassedPawnEGFactor"); |
||
624 | REGISTER_PARAM(RBehindPP1, "RookBehindPassedPawn1"); |
||
625 | REGISTER_PARAM(RBehindPP2, "RookBehindPassedPawn2"); |
||
626 | |||
627 | REGISTER_PARAM(QvsRMBonus1, "QueenVsRookMinorBonus1"); |
||
628 | REGISTER_PARAM(QvsRMBonus2, "QueenVsRookMinorBonus2"); |
||
629 | REGISTER_PARAM(knightVsQueenBonus1, "KnightVsQueenBonus1"); |
||
630 | REGISTER_PARAM(knightVsQueenBonus2, "KnightVsQueenBonus2"); |
||
631 | REGISTER_PARAM(knightVsQueenBonus3, "KnightVsQueenBonus3"); |
||
632 | REGISTER_PARAM(krkpBonus, "RookVsPawnBonus"); |
||
633 | REGISTER_PARAM(krpkbBonus, "RookPawnVsBishopBonus"); |
||
634 | REGISTER_PARAM(krpkbPenalty, "RookPawnVsBishopPenalty"); |
||
635 | REGISTER_PARAM(krpknBonus, "RookPawnVsKnightBonus"); |
||
636 | REGISTER_PARAM(RvsBPBonus, "RookVsBishopPawnBonus"); |
||
637 | |||
638 | REGISTER_PARAM(pawnTradePenalty, "PawnTradePenalty"); |
||
639 | REGISTER_PARAM(pieceTradeBonus, "PieceTradeBonus"); |
||
640 | REGISTER_PARAM(pawnTradeThreshold, "PawnTradeThreshold"); |
||
641 | REGISTER_PARAM(pieceTradeThreshold, "PieceTradeThreshold"); |
||
642 | |||
643 | REGISTER_PARAM(threatBonus1, "ThreatBonus1"); |
||
644 | REGISTER_PARAM(threatBonus2, "ThreatBonus2"); |
||
645 | |||
646 | REGISTER_PARAM(rookHalfOpenBonus, "RookHalfOpenBonus"); |
||
647 | REGISTER_PARAM(rookOpenBonus, "RookOpenBonus"); |
||
648 | REGISTER_PARAM(rookDouble7thRowBonus, "RookDouble7thRowBonus"); |
||
649 | REGISTER_PARAM(trappedRookPenalty1, "TrappedRookPenalty1"); |
||
650 | REGISTER_PARAM(trappedRookPenalty2, "TrappedRookPenalty2"); |
||
651 | |||
652 | REGISTER_PARAM(bishopPairPawnPenalty, "BishopPairPawnPenalty"); |
||
653 | REGISTER_PARAM(trappedBishopPenalty, "TrappedBishopPenalty"); |
||
654 | REGISTER_PARAM(oppoBishopPenalty, "OppositeBishopPenalty"); |
||
655 | |||
656 | REGISTER_PARAM(kingSafetyHalfOpenBCDEFG1, "KingSafetyHalfOpenBCDEFG1"); |
||
657 | REGISTER_PARAM(kingSafetyHalfOpenBCDEFG2, "KingSafetyHalfOpenBCDEFG2"); |
||
658 | REGISTER_PARAM(kingSafetyHalfOpenAH1, "KingSafetyHalfOpenAH1"); |
||
659 | REGISTER_PARAM(kingSafetyHalfOpenAH2, "KingSafetyHalfOpenAH2"); |
||
660 | REGISTER_PARAM(kingSafetyWeight1, "KingSafetyWeight1"); |
||
661 | REGISTER_PARAM(kingSafetyWeight2, "KingSafetyWeight2"); |
||
662 | REGISTER_PARAM(kingSafetyWeight3, "KingSafetyWeight3"); |
||
663 | REGISTER_PARAM(kingSafetyWeight4, "KingSafetyWeight4"); |
||
664 | REGISTER_PARAM(kingSafetyThreshold, "KingSafetyThreshold"); |
||
665 | REGISTER_PARAM(knightKingProtectBonus, "KnightKingProtectBonus"); |
||
666 | REGISTER_PARAM(bishopKingProtectBonus, "BishopKingProtectBonus"); |
||
667 | REGISTER_PARAM(pawnStormBonus, "PawnStormBonus"); |
||
668 | |||
669 | REGISTER_PARAM(pawnLoMtrl, "PawnLoMtrl"); |
||
670 | REGISTER_PARAM(pawnHiMtrl, "PawnHiMtrl"); |
||
671 | REGISTER_PARAM(minorLoMtrl, "MinorLoMtrl"); |
||
672 | REGISTER_PARAM(minorHiMtrl, "MinorHiMtrl"); |
||
673 | REGISTER_PARAM(castleLoMtrl, "CastleLoMtrl"); |
||
674 | REGISTER_PARAM(castleHiMtrl, "CastleHiMtrl"); |
||
675 | REGISTER_PARAM(queenLoMtrl, "QueenLoMtrl"); |
||
676 | REGISTER_PARAM(queenHiMtrl, "QueenHiMtrl"); |
||
677 | REGISTER_PARAM(passedPawnLoMtrl, "PassedPawnLoMtrl"); |
||
678 | REGISTER_PARAM(passedPawnHiMtrl, "PassedPawnHiMtrl"); |
||
679 | REGISTER_PARAM(kingSafetyLoMtrl, "KingSafetyLoMtrl"); |
||
680 | REGISTER_PARAM(kingSafetyHiMtrl, "KingSafetyHiMtrl"); |
||
681 | REGISTER_PARAM(oppoBishopLoMtrl, "OppositeBishopLoMtrl"); |
||
682 | REGISTER_PARAM(oppoBishopHiMtrl, "OppositeBishopHiMtrl"); |
||
683 | REGISTER_PARAM(knightOutpostLoMtrl, "KnightOutpostLoMtrl"); |
||
684 | REGISTER_PARAM(knightOutpostHiMtrl, "KnightOutpostHiMtrl"); |
||
685 | |||
686 | // Evaluation tables |
||
687 | kt1b.registerParams("KingTableMG", *this); |
||
688 | kt2b.registerParams("KingTableEG", *this); |
||
689 | pt1b.registerParams("PawnTableMG", *this); |
||
690 | pt2b.registerParams("PawnTableEG", *this); |
||
691 | nt1b.registerParams("KnightTableMG", *this); |
||
692 | nt2b.registerParams("KnightTableEG", *this); |
||
693 | bt1b.registerParams("BishopTableMG", *this); |
||
694 | bt2b.registerParams("BishopTableEG", *this); |
||
695 | qt1b.registerParams("QueenTableMG", *this); |
||
696 | qt2b.registerParams("QueenTableEG", *this); |
||
697 | rt1b.registerParams("RookTable", *this); |
||
698 | |||
699 | knightOutpostBonus.registerParams("KnightOutpostBonus", *this); |
||
700 | protectedPawnBonus.registerParams("ProtectedPawnBonus", *this); |
||
701 | attackedPawnBonus.registerParams("AttackedPawnBonus", *this); |
||
702 | protectBonus.registerParams("ProtectBonus", *this); |
||
703 | rookMobScore.registerParams("RookMobility", *this); |
||
704 | bishMobScore.registerParams("BishopMobility", *this); |
||
705 | knightMobScore.registerParams("KnightMobility", *this); |
||
706 | queenMobScore.registerParams("QueenMobility", *this); |
||
707 | majorPieceRedundancy.registerParams("MajorPieceRedundancy", *this); |
||
708 | connectedPPBonus.registerParams("ConnectedPPBonus", *this); |
||
709 | passedPawnBonusX.registerParams("PassedPawnBonusX", *this); |
||
710 | passedPawnBonusY.registerParams("PassedPawnBonusY", *this); |
||
711 | ppBlockerBonus.registerParams("PassedPawnBlockerBonus", *this); |
||
712 | candidatePassedBonus.registerParams("CandidatePassedPawnBonus", *this); |
||
713 | QvsRRBonus.registerParams("QueenVs2RookBonus", *this); |
||
714 | RvsMBonus.registerParams("RookVsMinorBonus", *this); |
||
715 | RvsMMBonus.registerParams("RookVs2MinorBonus", *this); |
||
716 | bishopPairValue.registerParams("BishopPairValue", *this); |
||
717 | rookEGDrawFactor.registerParams("RookEndGameDrawFactor", *this); |
||
718 | RvsBPDrawFactor.registerParams("RookVsBishopPawnDrawFactor", *this); |
||
719 | castleFactor.registerParams("CastleFactor", *this); |
||
720 | pawnShelterTable.registerParams("PawnShelterTable", *this); |
||
721 | pawnStormTable.registerParams("PawnStormTable", *this); |
||
722 | kingAttackWeight.registerParams("KingAttackWeight", *this); |
||
723 | kingPPSupportK.registerParams("KingPassedPawnSupportK", *this); |
||
724 | kingPPSupportP.registerParams("KingPassedPawnSupportP", *this); |
||
725 | pawnDoubledPenalty.registerParams("PawnDoubledPenalty", *this); |
||
726 | pawnIsolatedPenalty.registerParams("PawnIsolatedPenalty", *this); |
||
727 | halfMoveFactor.registerParams("HalfMoveFactor", *this); |
||
728 | stalePawnFactor.registerParams("StalePawnFactor", *this); |
||
729 | |||
730 | // Search parameters |
||
731 | REGISTER_PARAM(aspirationWindow, "AspirationWindow"); |
||
732 | REGISTER_PARAM(rootLMRMoveCount, "RootLMRMoveCount"); |
||
733 | |||
734 | REGISTER_PARAM(razorMargin1, "RazorMargin1"); |
||
735 | REGISTER_PARAM(razorMargin2, "RazorMargin2"); |
||
736 | |||
737 | REGISTER_PARAM(reverseFutilityMargin1, "ReverseFutilityMargin1"); |
||
738 | REGISTER_PARAM(reverseFutilityMargin2, "ReverseFutilityMargin2"); |
||
739 | REGISTER_PARAM(reverseFutilityMargin3, "ReverseFutilityMargin3"); |
||
740 | REGISTER_PARAM(reverseFutilityMargin4, "ReverseFutilityMargin4"); |
||
741 | |||
742 | REGISTER_PARAM(futilityMargin1, "FutilityMargin1"); |
||
743 | REGISTER_PARAM(futilityMargin2, "FutilityMargin2"); |
||
744 | REGISTER_PARAM(futilityMargin3, "FutilityMargin3"); |
||
745 | REGISTER_PARAM(futilityMargin4, "FutilityMargin4"); |
||
746 | |||
747 | REGISTER_PARAM(lmpMoveCountLimit1, "LMPMoveCountLimit1"); |
||
748 | REGISTER_PARAM(lmpMoveCountLimit2, "LMPMoveCountLimit2"); |
||
749 | REGISTER_PARAM(lmpMoveCountLimit3, "LMPMoveCountLimit3"); |
||
750 | REGISTER_PARAM(lmpMoveCountLimit4, "LMPMoveCountLimit4"); |
||
751 | |||
752 | REGISTER_PARAM(lmrMoveCountLimit1, "LMRMoveCountLimit1"); |
||
753 | REGISTER_PARAM(lmrMoveCountLimit2, "LMRMoveCountLimit2"); |
||
754 | |||
755 | REGISTER_PARAM(quiesceMaxSortMoves, "QuiesceMaxSortMoves"); |
||
756 | REGISTER_PARAM(deltaPruningMargin, "DeltaPruningMargin"); |
||
757 | |||
758 | // Time management parameters |
||
759 | REGISTER_PARAM(timeMaxRemainingMoves, "TimeMaxRemainingMoves"); |
||
760 | REGISTER_PARAM(bufferTime, "BufferTime"); |
||
761 | REGISTER_PARAM(minTimeUsage, "MinTimeUsage"); |
||
762 | REGISTER_PARAM(maxTimeUsage, "MaxTimeUsage"); |
||
763 | REGISTER_PARAM(timePonderHitRate, "TimePonderHitRate"); |
||
764 | } |
||
765 | |||
766 | Parameters& |
||
767 | Parameters::instance() { |
||
768 | static Parameters inst; |
||
769 | return inst; |
||
770 | } |
||
771 | |||
772 | void |
||
773 | Parameters::getParamNames(std::vector<std::string>& parNames) { |
||
774 | parNames = paramNames; |
||
775 | } |
||
776 | |||
777 | std::shared_ptr<Parameters::ParamBase> |
||
778 | Parameters::getParam(const std::string& name) const { |
||
779 | auto it = params.find(toLowerCase(name)); |
||
780 | if (it == params.end()) |
||
781 | return nullptr; |
||
782 | return it->second; |
||
783 | } |
||
784 | |||
785 | void |
||
786 | Parameters::addPar(const std::shared_ptr<ParamBase>& p) { |
||
787 | std::string name = toLowerCase(p->name); |
||
788 | assert(params.find(name) == params.end()); |
||
789 | params[name] = p; |
||
790 | paramNames.push_back(name); |
||
791 | } |
||
792 | |||
793 | int |
||
794 | Parameters::Listener::addListener(Func f, bool callNow) { |
||
795 | int id = ++nextId; |
||
796 | listeners[id] = f; |
||
797 | if (callNow) |
||
798 | f(); |
||
799 | return id; |
||
800 | } |
||
801 | |||
802 | void |
||
803 | Parameters::Listener::removeListener(int id) { |
||
804 | listeners.erase(id); |
||
805 | } |
||
806 | |||
807 | void |
||
808 | Parameters::Listener::notify() { |
||
809 | for (auto& e : listeners) |
||
810 | (e.second)(); |
||
811 | } |
||
812 | |||
813 | void |
||
814 | ParamTableBase::registerParamsN(const std::string& name, Parameters& pars, |
||
815 | int* table, int* parNo, int N) { |
||
816 | // Check that each parameter has a single value |
||
817 | std::map<int,int> parNoToVal; |
||
818 | int maxParIdx = -1; |
||
819 | for (int i = 0; i < N; i++) { |
||
820 | if (parNo[i] == 0) |
||
821 | continue; |
||
822 | const int pn = std::abs(parNo[i]); |
||
823 | const int sign = parNo[i] > 0 ? 1 : -1; |
||
824 | maxParIdx = std::max(maxParIdx, pn); |
||
825 | auto it = parNoToVal.find(pn); |
||
826 | if (it == parNoToVal.end()) |
||
827 | parNoToVal.insert(std::make_pair(pn, sign*table[i])); |
||
828 | else |
||
829 | assert(it->second == sign*table[i]); |
||
830 | } |
||
831 | if (!uci) |
||
832 | return; |
||
833 | params.resize(maxParIdx+1); |
||
834 | for (const auto& p : parNoToVal) { |
||
835 | std::string pName = name + num2Str(p.first); |
||
836 | params[p.first] = std::make_shared<Parameters::SpinParam>(pName, minValue, maxValue, p.second); |
||
837 | pars.addPar(params[p.first]); |
||
838 | params[p.first]->addListener([=]() { modifiedN(table, parNo, N); }, false); |
||
839 | } |
||
840 | modifiedN(table, parNo, N); |
||
841 | } |
||
842 | |||
843 | void |
||
844 | ParamTableBase::modifiedN(int* table, int* parNo, int N) { |
||
845 | for (int i = 0; i < N; i++) |
||
846 | if (parNo[i] > 0) |
||
847 | table[i] = params[parNo[i]]->getIntPar(); |
||
848 | else if (parNo[i] < 0) |
||
849 | table[i] = -params[-parNo[i]]->getIntPar(); |
||
850 | notify(); |
||
851 | } |