diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 707b25de..a32ddbbe 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,207 +5,207 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(202, 489); -inline const PParam KNIGHT_MAT = S(855, 1507); -inline const PParam BISHOP_MAT = S(898, 1565); -inline const PParam ROOK_MAT = S(1097, 2357); -inline const PParam QUEEN_MAT = S(2569, 3548); - -inline const PParam TEMPO_VAL = S(72, 57); - -inline const PParam BISHOP_XRAY_PAWNS = S(-14, -2); -inline const PParam BISHOP_PAIR_VAL = S(60, 239); -inline const PParam ROOK_OPEN_VAL = S(113, -6); -inline const PParam ROOK_SEMIOPEN_VAL = S(48, 8); +inline const PParam PAWN_MAT = S(112, 286); +inline const PParam KNIGHT_MAT = S(568, 1073); +inline const PParam BISHOP_MAT = S(518, 1013); +inline const PParam ROOK_MAT = S(394, 1082); +inline const PParam QUEEN_MAT = S(857, 1867); + +inline const PParam TEMPO_VAL = S(72, 59); + +inline const PParam BISHOP_XRAY_PAWNS = S(-14, -4); +inline const PParam BISHOP_PAIR_VAL = S(62, 242); +inline const PParam ROOK_OPEN_VAL = S(114, -6); +inline const PParam ROOK_SEMIOPEN_VAL = S(48, 10); inline const PParam MINOR_BEHIND_PAWN = S(16, 44); -inline const PParam RESTRICTED_SQUARES = S(19, 8); -inline const PParam SPACE_VAL = S(81, -76); +inline const PParam RESTRICTED_SQUARES = S(20, 5); +inline const PParam SPACE_VAL = S(95, -106); -inline const PParam DOUBLED_PAWN_VAL = S(-18, -85); -inline const PParam ISOLATED_PAWN_VAL = S(-12, -42); +inline const PParam DOUBLED_PAWN_VAL = S(-16, -89); +inline const PParam ISOLATED_PAWN_VAL = S(-12, -43); -inline const PParam POTENTIAL_CHECKER_VAL = S(-46, -41); +inline const PParam POTENTIAL_CHECKER_VAL = S(-43, -50); inline const PParam OUTPOST_KNIGHT_VAL = S(50, 44); -inline const PParam OUTPOST_BISHOP_VAL = S(44, 36); +inline const PParam OUTPOST_BISHOP_VAL = S(43, 43); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(38, 54); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(41, 4); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(17, 70); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(59, -44); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(38, 53); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(42, 1); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(19, 66); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(63, -54); inline const std::array PAWN_PHALANX = { - S(18, -9), S(39, 25), S(52, 72), S(121, 208), S(437, 379), S(565, 639), + S(19, -13), S(40, 25), S(51, 79), S(115, 223), S(389, 460), S(809, 1022), }; inline const std::array DEFENDED_PAWN = { - S(54, 22), S(42, 21), S(42, 67), S(88, 178), S(406, 113), + S(54, 24), S(42, 23), S(41, 72), S(86, 186), S(381, 143), }; inline const std::array PASSED_PAWN = { - S(-91, -248), S(-90, -208), S(-58, -81), S(-14, 43), S(76, 219), S(216, 432), + S(-72, -183), S(-73, -142), S(-39, -18), S(9, 100), S(94, 327), S(233, 541), }; inline const std::array PASSED_CLEAR_STOPPERS = { - S(-72, 50), S(-91, 40), S(-48, 95), S(-91, 219), S(-66, 334), S(43, 228), + S(-62, 54), S(-67, 26), S(-43, 90), S(-78, 209), S(-33, 287), S(83, 184), }; inline const std::array PASSED_CLEAR_FORWARD = { - S(-2, 56), S(-13, 54), S(-60, 105), S(-20, 121), S(78, 146), S(40, 194), + S(4, 58), S(-4, 47), S(-57, 102), S(-8, 106), S(107, 96), S(41, 185), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(23, -38), S(20, 2), S(14, 36), S(24, 95), S(72, 261), S(311, 256), + S(24, -34), S(18, 6), S(11, 41), S(24, 96), S(88, 232), S(400, 142), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(7, -29), S(-2, 14), S(-12, -18), S(-8, -60), S(-15, -171), S(-180, -459), + S(5, -26), S(-3, 15), S(-9, -24), S(-6, -68), S(-22, -161), S(-188, -446), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(24, 221), S(9, 171), S(2, 97), S(14, 57), S(26, 62), S(61, 56), S(69, 29), + S(0, 0), S(16, 183), S(-1, 137), S(-7, 61), S(3, 21), S(17, 21), S(54, 12), S(61, -15), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-120, -60), S(17, -10), S(2, 97), S(30, 142), S(43, 180), S(54, 187), S(39, 166), + S(0, 0), S(-134, -40), S(-4, -12), S(-11, 78), S(23, 114), S(36, 149), S(44, 161), S(31, 136), }; inline const std::array KNIGHT_MOBILITY = { - S(-113, -359), S(-38, -96), S(-7, 22), S(13, 74), S(36, 111), S(50, 151), S(69, 157), S(87, 162), S(107, 116), + S(52, -33), S(130, 236), S(160, 360), S(180, 415), S(204, 453), S(218, 494), S(237, 500), S(257, 506), S(276, 458), }; inline const std::array BISHOP_MOBILITY = { - S(-88, -284), S(-25, -65), S(31, 15), S(50, 82), S(68, 128), S(79, 160), S(85, 184), S(87, 205), S(91, 213), S(97, 220), S(109, 209), S(115, 197), S(123, 197), S(82, 164), + S(92, 26), S(154, 260), S(207, 351), S(226, 424), S(242, 476), S(252, 514), S(257, 541), S(258, 565), S(261, 576), S(266, 585), S(279, 573), S(281, 566), S(282, 577), S(244, 535), }; inline const std::array ROOK_MOBILITY = { - S(90, -104), S(8, 105), S(29, 139), S(45, 157), S(56, 176), S(60, 190), S(64, 207), S(69, 214), S(74, 226), S(79, 234), S(83, 241), S(82, 249), S(84, 254), S(92, 238), S(106, 205), + S(325, 399), S(238, 614), S(261, 646), S(276, 668), S(287, 689), S(290, 703), S(294, 722), S(298, 731), S(303, 743), S(307, 754), S(310, 764), S(308, 775), S(310, 781), S(315, 768), S(329, 734), }; inline const std::array QUEEN_MOBILITY = { - S(-177, -97), S(-23, 15), S(1, 175), S(20, 330), S(39, 371), S(48, 422), S(53, 468), S(55, 494), S(58, 520), S(61, 539), S(65, 552), S(71, 556), S(73, 564), S(78, 563), S(79, 568), S(81, 567), S(77,570), S(77, 561), S(78, 558), S(88, 545), S(73, 541), S(97, 500), S(64, 532), S(26, 524), S(3, 505), S(-32, 531), S(-13, 486), S(-6, 431), + S(437, 499), S(560, 761), S(586, 912), S(604, 1063), S(624, 1105), S(632, 1156), S(636, 1206), S(638, 1234), S(641, 1264), S(643, 1281), S(647, 1296), S(653, 1300), S(655, 1308), S(661, 1307), S(661, 1313), S(664, 1310), S(659, 1316), S(661, 1303), S(660, 1302), S(670, 1288), S(652, 1288), S(673, 1248), S(634, 1284), S(588, 1283), S(552, 1275), S(513, 1298), S(442, 1359), S(482, 1269), }; -inline const PParam PAWN_THREAT_KNIGHT = S(202, 160); -inline const PParam PAWN_THREAT_BISHOP = S(170, 231); -inline const PParam PAWN_THREAT_ROOK = S(194, 147); -inline const PParam PAWN_THREAT_QUEEN = S(159, 23); +inline const PParam PAWN_THREAT_KNIGHT = S(205, 167); +inline const PParam PAWN_THREAT_BISHOP = S(167, 248); +inline const PParam PAWN_THREAT_ROOK = S(196, 148); +inline const PParam PAWN_THREAT_QUEEN = S(160, 25); inline const std::array, 2> MINOR_THREAT = {{ - {{ S(9, 54), S(98, 96), S(104, 122), S(183, 84), S(174, 4), }}, - {{ S(6, 57), S(89, 87), S(103, 117), S(216, 590), S(150, -25), }}, + {{ S(9, 57), S(98, 101), S(102, 130), S(182, 92), S(170, 25), }}, + {{ S(6, 60), S(89, 91), S(101, 123), S(207, 629), S(163, -70), }}, }}; inline const std::array, 2> ROOK_THREAT = {{ - {{ S(9, 64), S(45, 114), S(64, 109), S(16, 20), S(164, -82), }}, - {{ S(-0, 52), S(63, 80), S(103, 64), S(13, 16), S(425, 610), }}, + {{ S(9, 68), S(46, 117), S(66, 109), S(17, 19), S(162, -74), }}, + {{ S(-1, 57), S(65, 81), S(103, 68), S(16, 10), S(205, 1213), }}, }}; -inline const PParam KING_THREAT = S(-1, 151); -inline const PParam HANGING_PAWN = S(30, 94); -inline const PParam HANGING_NON_PAWN = S(71, 31); +inline const PParam KING_THREAT = S(20, 126); +inline const PParam HANGING_PAWN = S(32, 91); +inline const PParam HANGING_NON_PAWN = S(72, 29); inline const std::array KNIGHT_ON_QUEEN = { - S(22, -16), S(95, -75), + S(19, -4), S(39, -10), }; inline const std::array BISHOP_ON_QUEEN = { - S(50, 34), S(210, -235), + S(49, 37), S(116, -117), }; inline const std::array ROOK_ON_QUEEN = { - S(40, 8), S(126, -108), + S(42, 5), S(48, -3), }; inline const std::array BISHOP_PAWNS = { - S(4, -18), S(4, -16), S(0, -22), S(-6, -29), S(-12, -36), S(-18, -40), S(-21, -49), S(-27, -45), S(-26, -92), + S(6, -21), S(5, -18), S(1, -24), S(-5, -31), S(-12, -38), S(-17, -43), S(-19, -54), S(-25, -50), S(-25, -98), }; -inline const PParam ROOK_LINEUP = S(17, 86); +inline const PParam ROOK_LINEUP = S(19, 80); inline const std::array PAWN_PSQT = { - S(195, 276), S(63, 400), S(72, 387), S(174, 271), S(182, 194), S(153, 219), S(136, 244), S(225, 199), // - S(55, 68), S(52, 114), S(33, 72), S(37, 15), S(28, -24), S(7, -1), S(9, 41), S(-15, 65), // - S(37, -1), S(9, 7), S(28, -22), S(-1, -35), S(-17, -49), S(-22, -45), S(-46, -31), S(-44, 9), // - S(-9, -60), S(-37, -31), S(-7, -45), S(-26, -55), S(-49, -65), S(-51, -55), S(-90, -44), S(-86, -38), // - S(-21, -94), S(9, -87), S(-3, -25), S(-19, -33), S(-43, -44), S(-65, -48), S(-94, -50), S(-100, -53), // - S(3, -90), S(79, -75), S(83, -29), S(31, 2), S(2, -23), S(-24, -44), S(-62, -37), S(-76, -36), // + S(295, 464), S(174, 573), S(174, 446), S(254, 499), S(254, 433), S(223, 468), S(224, 479), S(315, 422), // + S(127, 294), S(126, 342), S(102, 312), S(107, 249), S(100, 209), S(77, 237), S(84, 276), S(63, 295), // + S(118, 243), S(85, 273), S(96, 264), S(77, 197), S(64, 182), S(55, 205), S(35, 213), S(39, 247), // + S(75, 178), S(42, 219), S(66, 209), S(59, 153), S(38, 142), S(33, 180), S(-6, 191), S(-3, 194), // + S(60, 140), S(91, 143), S(73, 223), S(67, 181), S(46, 172), S(21, 184), S(-10, 181), S(-16, 178), // + S(84, 163), S(161, 137), S(159, 163), S(120, 198), S(93, 177), S(64, 179), S(23, 191), S(9, 192), // }; inline const std::array KNIGHT_PSQT = { - S(-293, -444), S(-242, 57), S(-290, 132), S(27, 51), S(-72, 60), S(-299, 133), S(-331, 117), S(-385, -357), // - S(4, 17), S(-7, 52), S(82, 33), S(81, 90), S(95, 68), S(49, 45), S(-8, 39), S(-52, 46), // - S(35, -5), S(43, 45), S(50, 72), S(72, 94), S(56, 91), S(12, 83), S(-3, 58), S(-44, 26), // - S(82, 50), S(87, 65), S(89, 92), S(98, 128), S(100, 120), S(66, 89), S(45, 49), S(16, 61), // - S(69, 39), S(90, 22), S(98, 62), S(83, 104), S(78, 100), S(60, 86), S(47, 39), S(13, 37), // - S(10, -27), S(41, -17), S(46, 34), S(56, 71), S(50, 74), S(23, 32), S(6, 0), S(-36, -26), // - S(26, -2), S(21, 23), S(19, -7), S(30, 25), S(24, 25), S(-5, -24), S(-48, 24), S(-67, -62), // - S(-65, -68), S(-4, -12), S(14, -18), S(31, -7), S(15, 1), S(-27, -28), S(-42, 7), S(-101, -107), // + S(-167, -318), S(-165, 273), S(-183, 333), S(120, 276), S(25, 278), S(-202, 342), S(-239, 314), S(-259, -230), // + S(100, 217), S(88, 250), S(183, 236), S(182, 311), S(201, 280), S(152, 248), S(89, 234), S(45, 241), // + S(131, 197), S(132, 263), S(137, 296), S(164, 321), S(150, 319), S(110, 291), S(93, 263), S(52, 228), // + S(181, 256), S(178, 292), S(184, 316), S(193, 359), S(196, 343), S(164, 302), S(144, 252), S(119, 257), // + S(170, 238), S(192, 226), S(196, 275), S(182, 320), S(180, 303), S(161, 287), S(152, 233), S(119, 223), // + S(114, 158), S(140, 177), S(143, 235), S(153, 278), S(150, 271), S(124, 225), S(109, 190), S(70, 155), // + S(133, 172), S(125, 207), S(121, 177), S(131, 215), S(127, 213), S(99, 161), S(56, 210), S(41, 112), // + S(44, 104), S(108, 158), S(120, 161), S(134, 179), S(120, 182), S(79, 153), S(67, 180), S(7, 65), // }; inline const std::array BISHOP_PSQT = { - S(-120, 20), S(-225, 142), S(-405, 214), S(-272, 135), S(-279, 154), S(-260, 165), S(-193, 133), S(-152, 126), // - S(-37, 15), S(-77, 125), S(-57, 102), S(-64, 98), S(-59, 104), S(-37, 76), S(-21, 72), S(-62, 60), // - S(40, 44), S(18, 81), S(26, 95), S(21, 86), S(23, 67), S(13, 83), S(-5, 78), S(13, 24), // - S(8, 21), S(45, 54), S(59, 60), S(79, 85), S(92, 80), S(35, 57), S(32, 39), S(-9, 31), // - S(33, -12), S(33, 38), S(69, 44), S(84, 63), S(71, 71), S(56, 61), S(9, 43), S(-3, 0), // - S(47, 8), S(75, 4), S(87, 33), S(58, 60), S(52, 51), S(48, 47), S(51, 28), S(14, 1), // - S(21, -38), S(109, -35), S(54, 16), S(37, 31), S(23, 29), S(37, -14), S(39, -27), S(26, -12), // - S(25, -35), S(13, 6), S(16, 28), S(29, 6), S(13, 12), S(26, 46), S(31, 16), S(24, -27), // + S(71, 325), S(-45, 470), S(-222, 544), S(-97, 470), S(-113, 500), S(-83, 495), S(-15, 459), S(34, 439), // + S(144, 330), S(102, 451), S(120, 429), S(117, 429), S(121, 434), S(144, 392), S(158, 390), S(122, 365), // + S(218, 368), S(193, 402), S(205, 420), S(201, 413), S(201, 397), S(197, 401), S(174, 398), S(200, 332), // + S(185, 347), S(223, 385), S(241, 389), S(259, 423), S(272, 413), S(219, 377), S(214, 359), S(176, 340), // + S(210, 319), S(213, 360), S(249, 369), S(267, 389), S(256, 388), S(241, 376), S(194, 358), S(180, 317), // + S(229, 328), S(253, 325), S(268, 351), S(240, 388), S(236, 367), S(232, 365), S(235, 345), S(198, 319), // + S(202, 278), S(295, 267), S(236, 325), S(222, 339), S(210, 335), S(221, 298), S(227, 279), S(209, 309), // + S(209, 282), S(197, 321), S(204, 336), S(211, 322), S(198, 320), S(211, 360), S(214, 333), S(208, 291), // }; inline const std::array ROOK_PSQT = { - S(162, 174), S(183, 193), S(148, 223), S(135, 188), S(182, 160), S(135, 183), S(153, 198), S(147, 186), // - S(91, 210), S(131, 217), S(184, 174), S(136, 172), S(173, 162), S(140, 182), S(86, 219), S(80, 219), // - S(67, 194), S(174, 142), S(214, 118), S(174, 107), S(174, 130), S(112, 170), S(92, 200), S(51, 232), // - S(29, 170), S(89, 182), S(99, 161), S(86, 154), S(109, 141), S(75, 180), S(58, 202), S(11, 220), // - S(2, 106), S(56, 118), S(42, 151), S(10, 155), S(23, 155), S(14, 178), S(-4, 183), S(-30, 186), // - S(5, 36), S(80, 51), S(60, 83), S(36, 101), S(43, 109), S(27, 126), S(22, 109), S(-22, 123), // - S(-70, 29), S(52, -12), S(55, 30), S(41, 69), S(46, 66), S(30, 80), S(21, 66), S(-9, 58), // - S(-9, -3), S(11, 33), S(74, 24), S(83, 24), S(85, 31), S(60, 55), S(56, 45), S(36, 49), // + S(350, 618), S(372, 643), S(331, 686), S(318, 647), S(371, 617), S(324, 638), S(349, 644), S(342, 630), // + S(288, 640), S(326, 658), S(379, 619), S(332, 613), S(374, 603), S(340, 620), S(287, 654), S(283, 648), // + S(266, 617), S(372, 573), S(409, 559), S(369, 547), S(375, 568), S(314, 602), S(297, 625), S(255, 658), // + S(232, 589), S(292, 604), S(297, 600), S(282, 592), S(312, 568), S(283, 598), S(268, 614), S(222, 631), // + S(207, 521), S(258, 545), S(243, 581), S(209, 587), S(227, 579), S(219, 600), S(206, 595), S(181, 596), // + S(217, 428), S(288, 457), S(267, 493), S(241, 512), S(252, 515), S(237, 532), S(238, 504), S(192, 519), // + S(145, 416), S(267, 379), S(263, 432), S(247, 477), S(255, 472), S(240, 485), S(234, 464), S(205, 456), // + S(207, 381), S(227, 418), S(286, 420), S(294, 418), S(299, 425), S(275, 449), S(273, 436), S(253, 435), // }; inline const std::array QUEEN_PSQT = { - S(108, 218), S(171, 208), S(79, 353), S(44, 409), S(49, 419), S(105, 307), S(73, 263), S(30, 279), // - S(71, 256), S(71, 317), S(43, 386), S(-56, 474), S(-19, 462), S(39, 330), S(61, 260), S(49, 221), // - S(50, 261), S(93, 290), S(52, 375), S(21, 399), S(32, 411), S(63, 328), S(98, 221), S(78, 190), // - S(41, 219), S(47, 288), S(5, 355), S(7, 406), S(26, 401), S(28, 308), S(69, 234), S(51, 194), // - S(24, 208), S(27, 209), S(23, 257), S(-4, 336), S(-1, 370), S(23, 303), S(24, 248), S(42, 166), // - S(20, 117), S(54, 100), S(46, 187), S(18, 226), S(28, 237), S(26, 271), S(45, 206), S(29, 182), // - S(-17, -34), S(21, -48), S(26, 30), S(49, 80), S(45, 125), S(46, 101), S(23, 135), S(36, 103), // - S(-47, -0), S(-1, -191), S(23, -166), S(33, -59), S(48, 10), S(44, 5), S(40, 16), S(7, 80), // + S(499, 820), S(574, 793), S(457, 960), S(409, 1023), S(432, 1016), S(486, 912), S(477, 843), S(428, 868), // + S(465, 836), S(472, 893), S(431, 977), S(323, 1074), S(372, 1050), S(435, 907), S(471, 818), S(455, 779), // + S(434, 853), S(468, 893), S(430, 971), S(404, 990), S(421, 998), S(464, 890), S(500, 776), S(483, 746), // + S(430, 798), S(436, 863), S(396, 930), S(401, 976), S(427, 963), S(431, 864), S(477, 775), S(459, 738), // + S(418, 776), S(420, 777), S(416, 827), S(395, 892), S(404, 919), S(431, 854), S(435, 792), S(452, 712), // + S(419, 667), S(454, 649), S(445, 739), S(420, 770), S(436, 774), S(435, 814), S(458, 743), S(440, 725), // + S(392, 487), S(432, 461), S(432, 555), S(455, 616), S(454, 654), S(457, 635), S(436, 662), S(447, 647), // + S(367, 504), S(414, 310), S(435, 351), S(442, 466), S(459, 535), S(457, 532), S(453, 544), S(420, 610), // }; inline const std::array KING_PSQT = { - S(124, -434), S(478, 110), S(432, 132), S(65, 189), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(328, -167), S(326, 185), S(227, 172), S(23, 126), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(185, 28), S(202, 160), S(74, 183), S(-92, 166), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(30, 2), S(106, 93), S(-49, 162), S(-166, 194), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-112, -4), S(-38, 75), S(-97, 141), S(-206, 191), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-58, -28), S(1, 37), S(-80, 119), S(-140, 158), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(31, -96), S(32, -13), S(-33, 52), S(-114, 112), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-17, -203), S(9, -91), S(-71, -23), S(-77, -41), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(339, -623), S(550, 62), S(410, 286), S(5, 424), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(411, -253), S(358, 166), S(194, 325), S(-46, 373), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(214, -20), S(221, 136), S(47, 311), S(-178, 413), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(40, -43), S(116, 66), S(-92, 291), S(-248, 426), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-87, -79), S(-16, 18), S(-101, 210), S(-252, 350), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-40, -111), S(20, -36), S(-75, 161), S(-159, 278), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(44, -182), S(46, -99), S(-28, 54), S(-119, 178), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-8, -283), S(19, -168), S(-70, -22), S(-80, 18), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; -inline const PParam KS_NO_QUEEN = S(-88, -434); +inline const PParam KS_NO_QUEEN = S(-72, -75); inline const std::array PT_INNER_RING_ATTACKS = { - S(8, -1), S(12, 15), S(12, 7), S(5, 3), S(3, -7), + S(7, -1), S(11, 1), S(10, 1), S(5, -1), S(3, -5), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(5, -6), S(6, 5), S(3, 2), S(3, 0), S(4, -1), + S(3, -2), S(6, -1), S(3, -1), S(3, -0), S(3, 0), }; -inline const PParam KS_FLANK_ATTACK = S(4, -2); -inline const PParam KS_FLANK_DEFENSE = S(-3, -1); -inline const PParam KS_FLANK_DOUBLE_ATTACK = S(4, -1); +inline const PParam KS_FLANK_ATTACK = S(4, -3); +inline const PParam KS_FLANK_DEFENSE = S(-2, -1); +inline const PParam KS_FLANK_DOUBLE_ATTACK = S(3, -1); inline const PParam KS_FLANK_DOUBLE_DEFENSE = S(-2, 1); inline const std::array, 4> KING_SHELTER = {{ - {{ S(16, -14), S(-11, 7), S(-6, -9), S(5, -13), S(13, -30), S(7, -53), S(-5, -51), }}, - {{ S(1, 10), S(-26, 4), S(-21, 13), S(-13, 22), S(-9, 13), S(-11, -13), S(-24, -22), }}, - {{ S(-4, 3), S(-13, -5), S(-15, 22), S(-8, 22), S(-7, 10), S(-7, -14), S(-21, -54), }}, - {{ S(5, 14), S(-13, 22), S(-9, 47), S(-4, 51), S(-3, 46), S(1, 27), S(14, -16), }}, + {{ S(13, -2), S(-7, 11), S(-3, -1), S(6, -4), S(13, -12), S(3, -17), S(4, -38), }}, + {{ S(2, 13), S(-18, 6), S(-13, 10), S(-4, 11), S(-1, 8), S(-7, 0), S(-11, -18), }}, + {{ S(-3, 21), S(-10, 12), S(-8, 24), S(-1, 22), S(-1, 20), S(-6, 15), S(1, -366), }}, + {{ S(1, 27), S(-8, 17), S(-1, 21), S(4, 19), S(4, 16), S(4, 22), S(6, 15), }}, }}; inline const std::array BLOCKED_SHELTER_STORM = { - S(0, 0), S(0, 0), S(10, 28), S(-9, 6), S(-9, 12), S(-8, 34), S(3, 52), + S(0, 0), S(0, 0), S(-6, 24), S(-19, 7), S(-20, 12), S(-17, 17), S(-3, 15), }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(6, 16), S(-55, -118), S(-12, -41), S(1, 2), S(-4, 7), S(-7, 13), S(-7, 13), }}, - {{ S(10, 1), S(-31, -110), S(-7, -41), S(-4, -1), S(-3, -1), S(-12, 5), S(-0, 5), }}, - {{ S(0, 14), S(-5, -83), S(8, -10), S(2, 8), S(-4, 15), S(-11, 22), S(-7, 24), }}, - {{ S(1, 1), S(2, -69), S(0, 25), S(-4, 35), S(-8, 14), S(-15, 11), S(-11, 19), }}, + {{ S(-7, 11), S(-49, -309), S(-14, -54), S(-8, -4), S(-13, 2), S(-16, 7), S(-16, 7), }}, + {{ S(-3, 3), S(-29, -279), S(-8, -58), S(-9, -12), S(-11, -4), S(-19, 4), S(-10, 3), }}, + {{ S(-10, 7), S(-4, -247), S(5, -33), S(-5, -7), S(-12, 3), S(-18, 8), S(-15, 9), }}, + {{ S(-9, 1), S(4, -74), S(5, -25), S(-6, 3), S(-16, 6), S(-21, 3), S(-18, 5), }}, }}; inline TunableSigmoid<32> KING_SAFETY_ACTIVATION( - 1119, 861, -24, 3 + 1506, 1391, -19, -5 ); -inline VParam WINNABLE_PAWNS = V(-20); -inline VParam WINNABLE_SYM = V(100); -inline VParam WINNABLE_ASYM = V(89); -inline VParam WINNABLE_PAWN_ENDGAME = V(45); -inline VParam WINNABLE_BIAS = V(-379); +inline VParam WINNABLE_PAWNS = V(-21); +inline VParam WINNABLE_SYM = V(107); +inline VParam WINNABLE_ASYM = V(94); +inline VParam WINNABLE_PAWN_ENDGAME = V(73); +inline VParam WINNABLE_BIAS = V(-412); -// Epoch duration: 3.83668s +// Epoch duration: 4.22718s // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index 45bfe815..41fc1518 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -362,6 +363,21 @@ int main() { const size_t total_batches = (positions.size() + batch_size - 1) / batch_size; + // linear warmup over the first 1% of steps, then cosine decay + constexpr f64 LR_PEAK = 3.0; + constexpr f64 LR_END = 0.001; + constexpr f64 WARMUP_FRAC = 0.01; + const f64 total_steps = static_cast(total_batches) * epochs; + u64 step = 0; + auto lr_at = [&](f64 s) { + const f64 t = s / total_steps; + if (t < WARMUP_FRAC) { + return LR_PEAK * t / WARMUP_FRAC; + } + const f64 u = (t - WARMUP_FRAC) / (1.0 - WARMUP_FRAC); + return LR_END + 0.5 * (LR_PEAK - LR_END) * (1.0 + std::cos(3.141592653589793 * u)); + }; + // Per-thread gradient buffers for lock-free accumulation std::vector thread_grads(thread_count, Parameters::zeros(parameter_count)); @@ -382,6 +398,7 @@ int main() { } // Apply optimizer + optim.set_lr(lr_at(static_cast(step++))); optim.step(current_parameter_values, thread_grads[0]); }}; @@ -467,39 +484,9 @@ int main() { }).detach(); } - // Freeze all parameters before tuning, except for material parameters. - ParameterCountInfo counts = Globals::get().get_parameter_counts(); - - // Freeze all value - Globals::get().freeze_value_range(0, counts.parameter_count); - - // Freeze all pair, except first 5 (material parameters) - Globals::get().freeze_pair_range(5, counts.pair_parameter_count); - // Epoch loop for (int epoch = 0; epoch < epochs; ++epoch) { - if (epoch == 24) { - // Unfreeze all parameters after 24 epochs. Dont unfreeze king safety just yet - Globals::get().unfreeze_value_range(0, counts.parameter_count); - Globals::get().unfreeze_pair_range( - 0, counts.pair_parameter_count - (28 + 7 + 28 + 5 + 5 + 1 + 1 + 1 + 1 + 1 + 2)); - optim.set_lr(.1); - } - if (epoch == 96) { - // Unfreeze king safety parameters after 96 epochs - Globals::get().unfreeze_pair_range(0, counts.pair_parameter_count); - } - - - if (epoch < 24) { - optim.set_lr(20.0 * std::pow(0.0333, double(epoch) / 24.0)); - } else if (epoch < 72) { - optim.set_lr(2 * std::pow(0.0667, double(epoch - 24) / 28.0)); - } else { - optim.set_lr(std::pow(0.1, double(epoch - 72) / 128.0)); - } - std::cout << "Epoch " << epoch + 1 << "/" << epochs << "\n"; const auto start = time::Clock::now();