Skip to content

Commit 67180f3

Browse files
Merge pull request #66 from DeveloperPaul123/tune/250321-lichess-from0-100k-epochs
feat: tune on lichess big 3, from 0, 100k epochs bench: 1740232
2 parents e789394 + 7eb030c commit 67180f3

File tree

5 files changed

+67
-435
lines changed

5 files changed

+67
-435
lines changed

engine/src/evaluation.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Created Date: Thursday, November 21st 2024
55
* Author: Paul Tsouchlos (DeveloperPaul123) ([email protected])
66
* -----
7-
* Last Modified: Tue Mar 18 2025
7+
* Last Modified: Mon Mar 24 2025
88
* -----
99
* Copyright (c) 2024 Paul Tsouchlos (DeveloperPaul123)
1010
* GNU General Public License v3.0 or later
@@ -15,10 +15,9 @@
1515
use chess::{bitboard_helpers, board::Board, moves::Move, pieces::Piece, side::Side};
1616

1717
use crate::{
18-
hce_values::{ByteKnightValues, GAME_PHASE_MAX},
18+
hce_values::{ByteKnightValues, GAME_PHASE_MAX, GAMEPHASE_INC},
1919
history_table,
2020
phased_score::{PhaseType, PhasedScore},
21-
psqt::GAMEPHASE_INC,
2221
score::{LargeScoreType, Score, ScoreType},
2322
traits::{Eval, EvalValues},
2423
ttable::TranspositionTableEntry,
@@ -228,7 +227,7 @@ mod tests {
228227

229228
#[test]
230229
fn score_stability() {
231-
// These values were determined empirically by running this test and manually copy/pasting the results
230+
// These values were determined empirically by running this test and manually copy/pasting the results.
232231
// If any changes are made to the evaluation function, these values will need to be updated or the test will need to be augmented with the new evaluation values.
233232

234233
// standard EPD suite FEN positions
@@ -364,13 +363,13 @@ mod tests {
364363
];
365364

366365
let scores: [ScoreType; 128] = [
367-
0, 56, 488, 499, -488, -499, 980, -980, 445, 458, -445, -458, 0, 9, 14, 12, -9, -14,
368-
-12, -488, -499, 488, 499, -980, 980, -445, -458, 445, 458, 0, -9, -14, -12, 9, 14, 12,
369-
2, 1, 0, -342, 406, -2, -1, 3, 342, -406, 0, -29, 634, -628, 25, 29, -634, 628, 0, -1,
370-
0, 1, -925, -990, -77, 929, -990, 77, 162, 95, -162, -95, 69, -162, -95, 162, 95, -69,
371-
59, 59, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, -2, -27, 7, 4, 7, -4, -7, -169, 9, 27, -7, -4,
372-
-7, 4, 7, 169, -9, -4, 3, 4, -3, 9, -9, 0, 4, -3, -4, 3, -9, 9, 0, -3, 15, 26, 42, 3,
373-
-15, -26, -42, 37, 53,
366+
0, 34, 589, 597, -589, -597, 1142, -1142, 512, 538, -512, -538, 0, 7, 15, 12, -7, -15,
367+
-12, -589, -597, 589, 597, -1142, 1142, -512, -538, 512, 538, 0, -7, -15, -12, 7, 15,
368+
12, 2, 0, 0, -397, 476, -2, 0, 5, 397, -476, -22, -43, 718, -744, 27, 43, -718, 744, 0,
369+
-6, 0, 6, -1094, -1192, -37, 1072, -1192, 37, 204, 222, -204, -222, 90, -204, -222,
370+
204, 222, -90, 23, 23, 0, 0, 0, 15, -15, -13, 0, 0, 0, -15, 15, 13, -15, 15, 8, 9, -8,
371+
-9, -214, -7, 15, -15, -8, -9, 8, 9, 214, 7, -3, 2, 3, -2, 7, -7, 0, 3, -2, -3, 2, -7,
372+
7, 0, -11, 9, 31, 53, 11, -9, -31, -53, 41, 25,
374373
];
375374

376375
let eval = ByteKnightEvaluation::default();

engine/src/hce_values.rs

Lines changed: 56 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -7,79 +7,86 @@ use chess::{
77

88
use crate::{
99
phased_score::{PhasedScore, S},
10+
score::ScoreType,
1011
traits::EvalValues,
1112
};
1213

14+
/// Game phase increment for each piece
15+
/// Ordered to match the indexing of [`Piece`]
16+
/// King, Queen, Rook, Bishop, Knight, Pawn
17+
pub const GAMEPHASE_INC: [ScoreType; 6] = [0, 4, 2, 1, 1, 0];
18+
19+
/// Maximum game phase
1320
pub const GAME_PHASE_MAX: i32 = 24;
1421

1522
/// Piece-Square Tables, ordered by the ordinality of the pieces. See ['pieces::Piece']
1623
#[rustfmt::skip]
17-
pub const PSQTS : [[PhasedScore; NumberOf::SQUARES]; NumberOf::PIECE_TYPES] = [
24+
pub const PSQTS : [[PhasedScore; NumberOf::SQUARES]; NumberOf::PIECE_TYPES] = [
1825
// King
1926
[
20-
S( -65, -74), S( 23, -35), S( 16, -18), S( -15, -18), S( -56, -11), S( -34, 15), S( 2, 4), S( 13, -17),
21-
S( 29, -12), S( -1, 17), S( -20, 14), S( -7, 17), S( -8, 17), S( -4, 38), S( -38, 23), S( -29, 11),
22-
S( -9, 10), S( 24, 17), S( 2, 23), S( -16, 15), S( -20, 20), S( 6, 45), S( 22, 44), S( -22, 13),
23-
S( -17, -8), S( -20, 22), S( -12, 24), S( -27, 27), S( -30, 26), S( -25, 33), S( -14, 26), S( -36, 3),
24-
S( -49, -18), S( -1, -4), S( -27, 21), S( -39, 24), S( -46, 27), S( -44, 23), S( -33, 9), S( -51, -11),
25-
S( -14, -19), S( -14, -3), S( -22, 11), S( -46, 21), S( -44, 23), S( -30, 16), S( -15, 7), S( -27, -9),
26-
S( 1, -27), S( 7, -11), S( -8, 4), S( -64, 13), S( -43, 14), S( -16, 4), S( 9, -5), S( 8, -17),
27-
S( -15, -53), S( 36, -34), S( 12, -21), S( -54, -11), S( 8, -28), S( -28, -14), S( 24, -24), S( 14, -43),
27+
S( 15, -85), S( -9, -35), S( 24, -26), S(-116, 24), S( -61, 4), S( -10, 7), S( 38, -1), S( 145, -108),
28+
S(-101, 7), S( -62, 36), S(-106, 49), S( 1, 30), S( -52, 51), S( -46, 62), S( -7, 52), S( -27, 22),
29+
S(-123, 23), S( -21, 41), S( -88, 60), S(-106, 71), S( -66, 70), S( 9, 62), S( -11, 61), S( -47, 32),
30+
S( -90, 13), S(-101, 47), S(-116, 64), S(-161, 77), S(-148, 76), S(-110, 70), S(-110, 62), S(-134, 37),
31+
S( -84, 1), S( -93, 31), S(-123, 55), S(-150, 69), S(-148, 69), S(-111, 56), S(-116, 44), S(-139, 28),
32+
S( -41, -9), S( -26, 13), S( -82, 35), S( -94, 47), S( -88, 46), S( -85, 38), S( -40, 18), S( -57, 6),
33+
S( 46, -31), S( 6, -4), S( -8, 8), S( -42, 19), S( -43, 22), S( -25, 13), S( 22, -5), S( 31, -23),
34+
S( 42, -65), S( 65, -46), S( 39, -27), S( -59, -9), S( 4, -34), S( -35, -11), S( 46, -37), S( 47, -65),
2835
],
2936
// Queen
3037
[
31-
S( 997, 927), S(1025, 958), S(1054, 958), S(1037, 963), S(1084, 963), S(1069, 955), S(1068, 946), S(1070, 956),
32-
S(1001, 919), S( 986, 956), S(1020, 968), S(1026, 977), S(1009, 994), S(1082, 961), S(1053, 966), S(1079, 936),
33-
S(1012, 916), S(1008, 942), S(1032, 945), S(1033, 985), S(1054, 983), S(1081, 971), S(1072, 955), S(1082, 945),
34-
S( 998, 939), S( 998, 958), S(1009, 960), S(1009, 981), S(1024, 993), S(1042, 976), S(1023, 993), S(1026, 972),
35-
S(1016, 918), S( 999, 964), S(1016, 955), S(1015, 983), S(1023, 967), S(1021, 970), S(1028, 975), S(1022, 959),
36-
S(1011, 920), S(1027, 909), S(1014, 951), S(1023, 942), S(1020, 945), S(1027, 953), S(1039, 946), S(1030, 941),
37-
S( 990, 914), S(1017, 913), S(1036, 906), S(1027, 920), S(1033, 920), S(1040, 913), S(1022, 900), S(1026, 904),
38-
S(1024, 903), S(1007, 908), S(1016, 914), S(1035, 893), S(1010, 931), S(1000, 904), S( 994, 916), S( 975, 895),
38+
S( 728, 1199), S( 736, 1212), S( 766, 1228), S( 799, 1215), S( 799, 1212), S( 803, 1205), S( 822, 1162), S( 769, 1192),
39+
S( 765, 1163), S( 743, 1206), S( 750, 1240), S( 743, 1257), S( 748, 1274), S( 785, 1234), S( 764, 1218), S( 807, 1194),
40+
S( 765, 1175), S( 763, 1192), S( 761, 1233), S( 777, 1235), S( 782, 1249), S( 823, 1229), S( 823, 1193), S( 821, 1180),
41+
S( 749, 1185), S( 753, 1208), S( 757, 1222), S( 756, 1245), S( 758, 1258), S( 771, 1244), S( 770, 1229), S( 776, 1208),
42+
S( 751, 1182), S( 749, 1211), S( 747, 1220), S( 756, 1239), S( 755, 1237), S( 754, 1229), S( 765, 1209), S( 768, 1196),
43+
S( 748, 1171), S( 755, 1187), S( 750, 1210), S( 749, 1208), S( 752, 1212), S( 759, 1203), S( 771, 1181), S( 765, 1169),
44+
S( 746, 1166), S( 751, 1170), S( 762, 1167), S( 761, 1177), S( 759, 1180), S( 768, 1154), S( 774, 1126), S( 785, 1096),
45+
S( 744, 1159), S( 734, 1167), S( 741, 1171), S( 756, 1162), S( 748, 1166), S( 735, 1165), S( 757, 1135), S( 750, 1135),
3946
],
4047
// Rook
4148
[
42-
S( 509, 525), S( 519, 522), S( 509, 530), S( 528, 527), S( 540, 524), S( 486, 524), S( 508, 520), S( 520, 517),
43-
S( 504, 523), S( 509, 525), S( 535, 525), S( 539, 523), S( 557, 509), S( 544, 515), S( 503, 520), S( 521, 515),
44-
S( 472, 519), S( 496, 519), S( 503, 519), S( 513, 517), S( 494, 516), S( 522, 509), S( 538, 507), S( 493, 509),
45-
S( 453, 516), S( 466, 515), S( 484, 525), S( 503, 513), S( 501, 514), S( 512, 513), S( 469, 511), S( 457, 514),
46-
S( 441, 515), S( 451, 517), S( 465, 520), S( 476, 516), S( 486, 507), S( 470, 506), S( 483, 504), S( 454, 501),
47-
S( 432, 508), S( 452, 512), S( 461, 507), S( 460, 511), S( 480, 505), S( 477, 500), S( 472, 504), S( 444, 496),
48-
S( 433, 506), S( 461, 506), S( 457, 512), S( 468, 514), S( 476, 503), S( 488, 503), S( 471, 501), S( 406, 509),
49-
S( 458, 503), S( 464, 514), S( 478, 515), S( 494, 511), S( 493, 507), S( 484, 499), S( 440, 516), S( 451, 492),
49+
S( 409, 639), S( 400, 646), S( 407, 655), S( 412, 651), S( 430, 642), S( 446, 632), S( 429, 634), S( 449, 629),
50+
S( 391, 639), S( 390, 651), S( 409, 655), S( 428, 646), S( 414, 646), S( 443, 632), S( 430, 628), S( 460, 615),
51+
S( 370, 639), S( 391, 642), S( 393, 644), S( 396, 642), S( 424, 629), S( 425, 623), S( 462, 614), S( 439, 610),
52+
S( 355, 641), S( 368, 640), S( 370, 649), S( 379, 645), S( 384, 630), S( 385, 625), S( 393, 621), S( 396, 615),
53+
S( 336, 634), S( 339, 639), S( 349, 641), S( 361, 640), S( 361, 636), S( 346, 634), S( 369, 621), S( 361, 616),
54+
S( 330, 630), S( 339, 630), S( 347, 629), S( 347, 634), S( 352, 630), S( 350, 622), S( 383, 602), S( 362, 603),
55+
S( 327, 625), S( 339, 629), S( 353, 629), S( 350, 631), S( 354, 623), S( 356, 619), S( 373, 610), S( 344, 615),
56+
S( 345, 620), S( 347, 630), S( 356, 637), S( 361, 636), S( 365, 628), S( 355, 623), S( 370, 619), S( 347, 612),
5057
],
5158
// Bishop
5259
[
53-
S( 336, 283), S( 369, 276), S( 283, 286), S( 328, 289), S( 340, 290), S( 323, 288), S( 372, 280), S( 357, 273),
54-
S( 339, 289), S( 381, 293), S( 347, 304), S( 352, 285), S( 395, 294), S( 424, 284), S( 383, 293), S( 318, 283),
55-
S( 349, 299), S( 402, 289), S( 408, 297), S( 405, 296), S( 400, 295), S( 415, 303), S( 402, 297), S( 363, 301),
56-
S( 361, 294), S( 370, 306), S( 384, 309), S( 415, 306), S( 402, 311), S( 402, 307), S( 372, 300), S( 363, 299),
57-
S( 359, 291), S( 378, 300), S( 378, 310), S( 391, 316), S( 399, 304), S( 377, 307), S( 375, 294), S( 369, 288),
58-
S( 365, 285), S( 380, 294), S( 380, 305), S( 380, 307), S( 379, 310), S( 392, 300), S( 383, 290), S( 375, 282),
59-
S( 369, 283), S( 380, 279), S( 381, 290), S( 365, 296), S( 372, 301), S( 386, 288), S( 398, 282), S( 366, 270),
60-
S( 332, 274), S( 362, 288), S( 351, 274), S( 344, 292), S( 352, 288), S( 353, 281), S( 326, 292), S( 344, 280),
60+
S( 274, 350), S( 256, 361), S( 267, 359), S( 227, 372), S( 237, 366), S( 255, 356), S( 284, 350), S( 247, 348),
61+
S( 291, 337), S( 314, 356), S( 308, 360), S( 291, 363), S( 320, 354), S( 319, 353), S( 311, 361), S( 300, 336),
62+
S( 300, 366), S( 323, 361), S( 324, 371), S( 347, 360), S( 333, 366), S( 364, 366), S( 341, 359), S( 329, 359),
63+
S( 292, 362), S( 306, 377), S( 327, 372), S( 337, 385), S( 334, 378), S( 330, 376), S( 306, 375), S( 292, 362),
64+
S( 286, 358), S( 298, 375), S( 304, 383), S( 324, 379), S( 321, 379), S( 307, 377), S( 299, 372), S( 294, 347),
65+
S( 296, 357), S( 303, 367), S( 303, 375), S( 306, 375), S( 307, 379), S( 302, 375), S( 304, 358), S( 308, 347),
66+
S( 298, 351), S( 299, 352), S( 310, 350), S( 289, 365), S( 296, 367), S( 309, 355), S( 315, 358), S( 302, 332),
67+
S( 277, 335), S( 296, 352), S( 281, 333), S( 272, 355), S( 277, 351), S( 276, 352), S( 300, 338), S( 287, 322),
6168
],
6269
// Knight
6370
[
64-
S( 170, 223), S( 248, 243), S( 303, 268), S( 288, 253), S( 398, 250), S( 240, 254), S( 322, 218), S( 230, 182),
65-
S( 264, 256), S( 296, 273), S( 409, 256), S( 373, 279), S( 360, 272), S( 399, 256), S( 344, 257), S( 320, 229),
66-
S( 290, 257), S( 397, 261), S( 374, 291), S( 402, 290), S( 421, 280), S( 466, 272), S( 410, 262), S( 381, 240),
67-
S( 328, 264), S( 354, 284), S( 356, 303), S( 390, 303), S( 374, 303), S( 406, 292), S( 355, 289), S( 359, 263),
68-
S( 324, 263), S( 341, 275), S( 353, 297), S( 350, 306), S( 365, 297), S( 356, 298), S( 358, 285), S( 329, 263),
69-
S( 314, 258), S( 328, 278), S( 349, 280), S( 347, 296), S( 356, 291), S( 354, 278), S( 362, 261), S( 321, 259),
70-
S( 308, 239), S( 284, 261), S( 325, 271), S( 334, 276), S( 336, 279), S( 355, 261), S( 323, 258), S( 318, 237),
71-
S( 232, 252), S( 316, 230), S( 279, 258), S( 304, 266), S( 320, 259), S( 309, 263), S( 318, 231), S( 314, 217),
71+
S( 125, 261), S( 157, 322), S( 220, 335), S( 252, 328), S( 283, 331), S( 228, 308), S( 174, 329), S( 179, 240),
72+
S( 256, 314), S( 272, 336), S( 297, 343), S( 314, 343), S( 298, 335), S( 359, 320), S( 272, 332), S( 294, 300),
73+
S( 270, 331), S( 303, 346), S( 320, 362), S( 332, 363), S( 368, 347), S( 369, 342), S( 326, 336), S( 296, 321),
74+
S( 266, 342), S( 279, 362), S( 303, 373), S( 323, 375), S( 306, 376), S( 330, 371), S( 289, 361), S( 299, 334),
75+
S( 253, 343), S( 268, 352), S( 282, 375), S( 283, 375), S( 292, 378), S( 287, 369), S( 286, 354), S( 263, 334),
76+
S( 235, 327), S( 256, 346), S( 270, 355), S( 273, 369), S( 284, 367), S( 274, 351), S( 277, 340), S( 250, 329),
77+
S( 222, 318), S( 233, 334), S( 249, 343), S( 261, 346), S( 262, 346), S( 264, 341), S( 251, 325), S( 248, 329),
78+
S( 180, 311), S( 232, 298), S( 219, 327), S( 233, 331), S( 237, 332), S( 250, 321), S( 234, 305), S( 209, 300),
7279
],
7380
// Pawn
7481
[
75-
S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94),
76-
S( 180, 272), S( 216, 267), S( 143, 252), S( 177, 228), S( 150, 241), S( 208, 226), S( 116, 259), S( 71, 281),
77-
S( 76, 188), S( 89, 194), S( 108, 179), S( 113, 161), S( 147, 150), S( 138, 147), S( 107, 176), S( 62, 178),
78-
S( 68, 126), S( 95, 118), S( 88, 107), S( 103, 99), S( 105, 92), S( 94, 98), S( 99, 111), S( 59, 111),
79-
S( 55, 107), S( 80, 103), S( 77, 91), S( 94, 87), S( 99, 87), S( 88, 86), S( 92, 97), S( 57, 93),
80-
S( 56, 98), S( 78, 101), S( 78, 88), S( 72, 95), S( 85, 94), S( 85, 89), S( 115, 93), S( 70, 86),
81-
S( 47, 107), S( 81, 102), S( 62, 102), S( 59, 104), S( 67, 107), S( 106, 94), S( 120, 96), S( 60, 87),
82-
S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94), S( 82, 94),
82+
S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0),
83+
S( 136, 281), S( 157, 274), S( 135, 274), S( 165, 226), S( 148, 222), S( 132, 233), S( 66, 277), S( 41, 291),
84+
S( 58, 223), S( 71, 231), S( 104, 197), S( 109, 176), S( 112, 168), S( 134, 153), S( 114, 199), S( 72, 198),
85+
S( 43, 154), S( 67, 144), S( 70, 124), S( 73, 115), S( 93, 107), S( 85, 110), S( 89, 128), S( 66, 129),
86+
S( 33, 130), S( 60, 127), S( 58, 110), S( 74, 107), S( 75, 105), S( 67, 106), S( 75, 118), S( 54, 110),
87+
S( 31, 124), S( 55, 126), S( 55, 108), S( 56, 120), S( 71, 113), S( 60, 111), S( 89, 116), S( 60, 107),
88+
S( 32, 128), S( 56, 129), S( 52, 116), S( 42, 122), S( 61, 127), S( 76, 116), S( 98, 115), S( 53, 108),
89+
S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0),
8390
],
8491
];
8592

@@ -93,29 +100,3 @@ impl EvalValues for ByteKnightValues {
93100
PSQTS[piece as usize][square::flip_if(side == Side::White, square) as usize]
94101
}
95102
}
96-
97-
#[cfg(test)]
98-
mod tests {
99-
use chess::board::Board;
100-
101-
use super::*;
102-
use crate::{evaluation::Evaluation, psqt::Psqt, traits::Eval};
103-
104-
#[test]
105-
fn verify_values_match_pesto() {
106-
let values = ByteKnightValues::default();
107-
let eval = Evaluation::new(values);
108-
109-
let psqt = Psqt::new();
110-
111-
let board =
112-
Board::from_fen("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1")
113-
.unwrap();
114-
115-
let score = psqt.evaluate(&board);
116-
println!("{}", score);
117-
let new_eval_score = eval.eval(&board);
118-
println!("{}", new_eval_score);
119-
assert_eq!(score, new_eval_score);
120-
}
121-
}

engine/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ pub mod hce_values;
66
pub mod history_table;
77
pub mod input_handler;
88
pub mod phased_score;
9-
pub mod psqt;
109
pub mod score;
1110
pub mod search;
1211
pub mod search_thread;

0 commit comments

Comments
 (0)