From 0765224c3f834d6cfac6af0351c6b712685b7aec Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Wed, 4 Feb 2026 06:55:27 +0100 Subject: [PATCH 1/2] Bench: 18003890 --- src/eval_constants.hpp | 208 +++++++++++++++++++++-------------------- src/evaltune_main.cpp | 2 + src/evaluation.cpp | 18 +++- 3 files changed, 121 insertions(+), 107 deletions(-) diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index c57d03ef..0f1cf264 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,175 +5,177 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(140, 194); -inline const PParam KNIGHT_MAT = S(591, 590); -inline const PParam BISHOP_MAT = S(635, 620); -inline const PParam ROOK_MAT = S(495, 643); -inline const PParam QUEEN_MAT = S(1166, 1021); -inline const PParam TEMPO_VAL = S(59, 20); +inline const PParam PAWN_MAT = S(136, 203); +inline const PParam KNIGHT_MAT = S(575, 624); +inline const PParam BISHOP_MAT = S(605, 648); +inline const PParam ROOK_MAT = S(474, 682); +inline const PParam QUEEN_MAT = S(1095, 1087); +inline const PParam TEMPO_VAL = S(57, 21); -inline const PParam BISHOP_PAIR_VAL = S(54, 190); -inline const PParam ROOK_OPEN_VAL = S(106, -12); -inline const PParam ROOK_SEMIOPEN_VAL = S(43, 23); +inline const PParam BISHOP_PAIR_VAL = S(52, 196); +inline const PParam ROOK_OPEN_VAL = S(105, -11); +inline const PParam ROOK_SEMIOPEN_VAL = S(43, 22); -inline const PParam DOUBLED_PAWN_VAL = S(-6, -67); -inline const PParam ISOLATED_PAWN_VAL = S(-19, -20); +inline const PParam DOUBLED_PAWN_VAL = S(-7, -70); +inline const PParam ISOLATED_PAWN_VAL = S(-19, -17); -inline const PParam POTENTIAL_CHECKER_VAL = S(-51, -21); -inline const PParam OUTPOST_KNIGHT_VAL = S(36, 63); -inline const PParam OUTPOST_BISHOP_VAL = S(50, 38); +inline const PParam POTENTIAL_CHECKER_VAL = S(-49, -24); +inline const PParam OUTPOST_KNIGHT_VAL = S(36, 64); +inline const PParam OUTPOST_BISHOP_VAL = S(50, 39); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(43, 5); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(56, -20); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(28, 50); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(70, -41); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(42, 7); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(54, -19); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(27, 53); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(67, -36); inline const std::array PAWN_PHALANX = { - S(17, -0), S(40, 24), S(58, 49), S(136, 148), S(359, 242), S(442, 735), + S(16, 1), S(38, 27), S(57, 51), S(136, 145), S(383, 197), S(456, 694), }; inline const std::array DEFENDED_PAWN = { - S(55, 32), S(46, 24), S(55, 51), S(121, 140), S(423, 73), + S(54, 35), S(44, 27), S(53, 55), S(118, 140), S(411, 79), }; inline const std::array PASSED_PAWN = { - S(-79, -112), S(-74, -89), S(-49, 18), S(12, 120), S(104, 256), S(279, 359), + S(-70, -121), S(-67, -98), S(-47, 14), S(9, 122), S(91, 268), S(261, 382), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(34, -41), S(32, 0), S(21, 39), S(2, 112), S(57, 212), S(204, 277), + S(36, -45), S(35, -5), S(23, 31), S(1, 107), S(46, 219), S(200, 280), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(23, -46), S(4, 6), S(0, -22), S(-5, -50), S(-16, -113), S(-221, -216), + S(23, -38), S(2, 13), S(3, -21), S(1, -56), S(-6, -128), S(-204, -238), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-6, 152), S(-16, 116), S(-9, 45), S(-3, 9), S(2, 7), S(34, 6), S(5, 3), + S(0, 0), S(-9, 151), S(-18, 113), S(-11, 43), S(-3, 6), S(2, 5), S(37, 5), S(10, -1), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-329, -35), S(-49, 27), S(-27, 60), S(13, 98), S(34, 116), S(55, 118), S(35, 115), + S(0, 0), S(-314, -47), S(-47, 30), S(-27, 61), S(12, 96), S(31, 112), S(49, 112), S(30, 105), }; inline const std::array KNIGHT_MOBILITY = { - S(66, 3), S(137, 172), S(173, 258), S(201, 293), S(241, 310), S(266, 343), S(298, 341), S(329, 355), S(381, 272), + S(56, 0), S(127, 171), S(162, 261), S(190, 297), S(230, 315), S(254, 350), S(286, 347), S(317, 361), S(371, 274), }; inline const std::array BISHOP_MOBILITY = { - S(85, -2), S(129, 168), S(184, 228), S(211, 272), S(236, 302), S(253, 325), S(260, 344), S(275, 353), S(281, 371), S(305, 355), S(317, 354), S(365, 304), S(365, 315), S(391, 276), + S(90, 2), S(133, 175), S(187, 239), S(214, 284), S(239, 315), S(255, 339), S(262, 359), S(276, 369), S(282, 386), S(307, 368), S(317, 371), S(366, 317), S(364, 332), S(394, 279), }; inline const std::array ROOK_MOBILITY = { - S(317, 237), S(237, 410), S(263, 434), S(280, 443), S(291, 455), S(298, 466), S(304, 476), S(314, 477), S(320, 487), S(332, 487), S(344, 488), S(353, 490), S(358, 489), S(374, 465), S(478, 344), + S(307, 241), S(226, 420), S(251, 445), S(268, 455), S(279, 467), S(286, 478), S(292, 488), S(301, 490), S(307, 501), S(318, 502), S(330, 503), S(337, 508), S(342, 507), S(359, 479), S(446, 374), }; inline const std::array QUEEN_MOBILITY = { - S(494, 521), S(649, 495), S(674, 604), S(692, 716), S(708, 763), S(716, 806), S(722, 837), S(730, 847), S(733, 871), S(737, 883), S(743, 888), S(748, 895), S(757, 890), S(760, 892), S(765, 889), S(765, 889), S(767, 886), S(775, 876), S(783, 865), S(789, 864), S(801, 836), S(826, 793), S(820, 799), S(820, 740), S(807, 730), S(799, 706), S(735, 768), S(756, 666), + S(493, 512), S(633, 531), S(658, 643), S(676, 754), S(692, 801), S(700, 845), S(706, 877), S(714, 887), S(717, 911), S(721, 925), S(726, 932), S(731, 940), S(740, 933), S(742, 938), S(747, 934), S(745, 938), S(747, 933), S(754, 925), S(761, 916), S(770, 910), S(778, 887), S(801, 847), S(800, 844), S(797, 791), S(786, 777), S(777, 749), S(709, 810), S(733, 714), }; inline const std::array KING_MOBILITY = { - S(481, -173), S(107, -108), S(29, -27), S(16, 6), S(-3, 6), S(-21, 3), S(-23, 7), S(-38, 16), S(-27, -24), + S(496, -200), S(107, -106), S(29, -28), S(16, 6), S(-3, 5), S(-20, 1), S(-25, 8), S(-41, 16), S(-31, -22), }; inline const std::array PT_INNER_RING_ATTACKS = { - S(12, -8), S(15, -16), S(13, -12), S(6, -8), S(2, 179), + S(12, -8), S(16, -15), S(13, -12), S(6, -8), S(2, 205), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(4, -0), S(7, -11), S(6, -9), S(5, -5), S(6, 429), + S(4, -0), S(7, -11), S(6, -9), S(5, -5), S(6, 414), }; -inline const PParam PAWN_THREAT_KNIGHT = S(216, 87); -inline const PParam PAWN_THREAT_BISHOP = S(193, 138); -inline const PParam PAWN_THREAT_ROOK = S(196, 116); -inline const PParam PAWN_THREAT_QUEEN = S(175, -37); +inline const PParam PAWN_THREAT_KNIGHT = S(212, 92); +inline const PParam PAWN_THREAT_BISHOP = S(190, 143); +inline const PParam PAWN_THREAT_ROOK = S(192, 123); +inline const PParam PAWN_THREAT_QUEEN = S(167, -17); -inline const PParam KNIGHT_THREAT_BISHOP = S(112, 95); -inline const PParam KNIGHT_THREAT_ROOK = S(232, 57); -inline const PParam KNIGHT_THREAT_QUEEN = S(153, -6); +inline const PParam KNIGHT_THREAT_BISHOP = S(109, 101); +inline const PParam KNIGHT_THREAT_ROOK = S(225, 68); +inline const PParam KNIGHT_THREAT_QUEEN = S(150, -2); -inline const PParam BISHOP_THREAT_KNIGHT = S(107, 55); -inline const PParam BISHOP_THREAT_ROOK = S(216, 117); -inline const PParam BISHOP_THREAT_QUEEN = S(179, 93); +inline const PParam BISHOP_THREAT_KNIGHT = S(105, 57); +inline const PParam BISHOP_THREAT_ROOK = S(212, 124); +inline const PParam BISHOP_THREAT_QUEEN = S(175, 98); inline const std::array BISHOP_PAWNS = { - S(7, -31), S(-3, -10), S(-6, -18), S(-9, -28), S(-13, -37), S(-18, -42), S(-20, -54), S(-27, -51), S(-38, -51), + S(9, -35), S(-4, -9), S(-6, -18), S(-9, -28), S(-13, -37), S(-18, -42), S(-20, -55), S(-27, -52), S(-38, -53), }; -inline const PParam ROOK_LINEUP = S(11, 72); +inline const PParam ROOK_LINEUP = S(12, 66); inline const std::array PAWN_PSQT = { - S(313, 328), S(167, 420), S(300, 401), S(315, 264), S(333, 225), S(227, 306), S(166, 341), S(266, 306), // - S(117, 207), S(148, 241), S(190, 158), S(175, 96), S(153, 82), S(125, 133), S(97, 189), S(50, 216), // - S(82, 169), S(68, 169), S(110, 99), S(111, 79), S(99, 76), S(71, 107), S(24, 154), S(13, 183), // - S(55, 126), S(45, 146), S(81, 99), S(79, 89), S(57, 91), S(41, 115), S(-19, 156), S(-18, 149), // - S(54, 101), S(94, 105), S(79, 137), S(73, 122), S(44, 117), S(22, 123), S(-12, 139), S(-20, 134), // - S(68, 101), S(160, 113), S(144, 170), S(96, 150), S(66, 139), S(46, 132), S(16, 144), S(-2, 148), // + S(294, 346), S(145, 444), S(290, 413), S(303, 278), S(320, 238), S(214, 322), S(151, 359), S(258, 315), // + S(114, 212), S(145, 252), S(186, 167), S(172, 103), S(152, 86), S(125, 139), S(95, 197), S(47, 222), // + S(80, 174), S(67, 176), S(110, 101), S(111, 79), S(100, 76), S(71, 109), S(23, 159), S(10, 188), // + S(57, 125), S(46, 149), S(82, 96), S(79, 88), S(58, 91), S(40, 117), S(-20, 160), S(-20, 152), // + S(56, 98), S(95, 105), S(80, 137), S(72, 122), S(44, 118), S(21, 125), S(-13, 142), S(-21, 135), // + S(69, 100), S(158, 116), S(143, 172), S(94, 154), S(66, 141), S(45, 136), S(15, 148), S(-3, 150), // }; inline const std::array KNIGHT_PSQT = { - S(-266, -64), S(-145, 183), S(-143, 91), S(92, 180), S(38, 173), S(-122, 199), S(-231, 210), S(-303, 4), // - S(67, 165), S(118, 178), S(201, 144), S(188, 167), S(180, 180), S(109, 187), S(72, 204), S(50, 173), // - S(162, 147), S(194, 168), S(207, 204), S(200, 201), S(169, 223), S(108, 239), S(119, 187), S(86, 176), // - S(228, 172), S(236, 194), S(233, 214), S(220, 247), S(221, 253), S(176, 240), S(168, 209), S(164, 178), // - S(211, 177), S(244, 162), S(216, 216), S(213, 234), S(189, 240), S(187, 225), S(185, 173), S(148, 179), // - S(155, 146), S(182, 153), S(172, 191), S(181, 215), S(177, 214), S(141, 195), S(130, 164), S(101, 133), // - S(167, 149), S(189, 143), S(156, 154), S(159, 174), S(150, 174), S(122, 132), S(107, 158), S(96, 75), // - S(101, 103), S(147, 163), S(164, 130), S(181, 123), S(162, 144), S(128, 119), S(113, 143), S(73, 70), // + S(-251, -76), S(-156, 196), S(-102, 47), S(94, 182), S(32, 184), S(-115, 189), S(-246, 237), S(-291, -3), // + S(75, 159), S(116, 187), S(204, 145), S(197, 156), S(194, 162), S(111, 187), S(74, 203), S(48, 180), // + S(159, 156), S(206, 152), S(207, 209), S(208, 193), S(167, 229), S(107, 244), S(119, 189), S(84, 182), // + S(227, 178), S(235, 198), S(231, 223), S(218, 254), S(219, 262), S(173, 248), S(166, 216), S(161, 188), // + S(210, 183), S(245, 165), S(214, 223), S(211, 242), S(187, 247), S(185, 231), S(182, 181), S(145, 188), // + S(155, 149), S(180, 159), S(170, 197), S(178, 224), S(174, 223), S(138, 203), S(128, 171), S(100, 136), // + S(166, 152), S(187, 150), S(155, 159), S(156, 183), S(148, 180), S(121, 137), S(108, 157), S(95, 76), // + S(101, 104), S(147, 169), S(162, 136), S(179, 128), S(159, 152), S(127, 124), S(112, 148), S(75, 71), // }; inline const std::array BISHOP_PSQT = { - S(-3, 287), S(-12, 297), S(-285, 354), S(-155, 292), S(-164, 313), S(-186, 320), S(-58, 305), S(22, 281), // - S(123, 196), S(65, 279), S(93, 238), S(32, 268), S(47, 267), S(78, 258), S(119, 249), S(101, 220), // - S(194, 226), S(203, 245), S(200, 248), S(176, 247), S(146, 245), S(154, 253), S(172, 240), S(168, 213), // - S(164, 217), S(200, 225), S(198, 251), S(198, 282), S(230, 269), S(158, 251), S(170, 215), S(131, 213), // - S(192, 176), S(209, 206), S(214, 231), S(221, 255), S(196, 271), S(180, 250), S(147, 229), S(142, 191), // - S(218, 184), S(255, 193), S(265, 221), S(210, 246), S(206, 224), S(200, 236), S(208, 212), S(146, 214), // - S(186, 155), S(286, 172), S(243, 185), S(209, 205), S(189, 208), S(194, 182), S(193, 183), S(187, 176), // - S(217, 158), S(205, 177), S(204, 208), S(220, 167), S(209, 181), S(208, 222), S(205, 202), S(195, 180), // + S(-2, 293), S(-17, 304), S(-279, 348), S(-144, 284), S(-155, 306), S(-169, 304), S(-52, 300), S(30, 273), // + S(121, 202), S(61, 285), S(94, 240), S(40, 259), S(56, 257), S(81, 257), S(119, 252), S(95, 231), // + S(191, 235), S(204, 246), S(196, 256), S(173, 255), S(144, 251), S(152, 259), S(167, 251), S(164, 222), // + S(161, 224), S(197, 235), S(198, 255), S(194, 294), S(224, 282), S(155, 259), S(168, 223), S(125, 225), // + S(189, 184), S(206, 216), S(211, 240), S(215, 268), S(191, 283), S(177, 260), S(144, 238), S(141, 195), // + S(216, 191), S(249, 204), S(260, 231), S(205, 257), S(202, 235), S(196, 247), S(203, 224), S(144, 219), // + S(182, 165), S(281, 182), S(238, 196), S(205, 213), S(185, 217), S(189, 193), S(190, 190), S(183, 184), // + S(213, 167), S(201, 184), S(200, 217), S(214, 180), S(204, 191), S(204, 233), S(200, 212), S(192, 189), // }; inline const std::array ROOK_PSQT = { - S(421, 375), S(445, 384), S(417, 399), S(434, 367), S(412, 374), S(377, 387), S(377, 399), S(365, 407), // - S(303, 453), S(383, 444), S(462, 405), S(407, 414), S(385, 429), S(373, 424), S(300, 461), S(279, 472), // - S(270, 451), S(373, 434), S(431, 395), S(414, 379), S(365, 408), S(324, 430), S(325, 430), S(257, 471), // - S(277, 410), S(355, 415), S(390, 390), S(368, 389), S(358, 401), S(321, 419), S(316, 416), S(238, 447), // - S(259, 344), S(327, 354), S(315, 376), S(295, 373), S(274, 394), S(263, 408), S(230, 407), S(210, 403), // - S(250, 288), S(313, 312), S(301, 336), S(286, 334), S(272, 344), S(248, 365), S(242, 345), S(205, 355), // - S(145, 295), S(276, 264), S(286, 293), S(277, 314), S(263, 319), S(252, 327), S(237, 307), S(210, 321), // - S(206, 287), S(229, 309), S(286, 296), S(299, 293), S(288, 302), S(268, 316), S(257, 312), S(237, 321), // + S(425, 384), S(437, 403), S(413, 417), S(433, 378), S(413, 384), S(378, 396), S(374, 412), S(369, 415), // + S(303, 465), S(378, 462), S(453, 429), S(400, 433), S(385, 441), S(364, 446), S(297, 477), S(280, 483), // + S(272, 460), S(373, 448), S(430, 408), S(411, 395), S(362, 424), S(320, 447), S(323, 444), S(257, 484), // + S(276, 420), S(353, 429), S(389, 402), S(363, 406), S(354, 417), S(315, 439), S(311, 434), S(236, 461), // + S(259, 352), S(323, 370), S(312, 390), S(291, 387), S(268, 411), S(258, 424), S(228, 418), S(208, 415), // + S(251, 296), S(313, 323), S(299, 349), S(284, 347), S(271, 356), S(245, 379), S(243, 353), S(208, 361), // + S(144, 307), S(276, 273), S(285, 304), S(275, 326), S(260, 331), S(253, 334), S(235, 321), S(211, 331), // + S(208, 293), S(231, 313), S(287, 303), S(299, 300), S(288, 308), S(268, 323), S(257, 320), S(238, 328), // }; inline const std::array QUEEN_PSQT = { - S(567, 609), S(619, 561), S(544, 685), S(509, 759), S(498, 736), S(522, 694), S(548, 610), S(493, 661), // - S(563, 674), S(530, 767), S(512, 813), S(375, 897), S(377, 890), S(444, 834), S(485, 716), S(499, 688), // - S(528, 738), S(571, 766), S(515, 851), S(455, 887), S(428, 882), S(477, 804), S(520, 712), S(538, 635), // - S(570, 650), S(575, 737), S(510, 814), S(501, 845), S(488, 854), S(500, 757), S(551, 673), S(531, 653), // - S(584, 621), S(574, 687), S(542, 750), S(513, 791), S(510, 796), S(509, 750), S(531, 662), S(557, 588), // - S(563, 566), S(598, 617), S(591, 681), S(558, 680), S(555, 668), S(550, 691), S(564, 612), S(543, 584), // - S(543, 459), S(583, 466), S(589, 528), S(599, 572), S(583, 604), S(577, 569), S(542, 601), S(552, 582), // - S(527, 470), S(557, 327), S(582, 345), S(596, 456), S(592, 528), S(591, 475), S(579, 498), S(545, 533), // + S(553, 638), S(603, 589), S(528, 712), S(493, 783), S(478, 768), S(515, 706), S(534, 633), S(489, 669), // + S(553, 691), S(515, 789), S(503, 825), S(358, 922), S(365, 911), S(430, 855), S(475, 729), S(485, 709), // + S(514, 762), S(561, 782), S(494, 885), S(443, 903), S(417, 900), S(468, 818), S(504, 738), S(525, 657), // + S(554, 680), S(558, 767), S(493, 841), S(486, 869), S(477, 867), S(489, 773), S(531, 707), S(518, 672), // + S(568, 649), S(555, 721), S(525, 778), S(496, 818), S(494, 820), S(497, 766), S(514, 690), S(542, 610), // + S(548, 593), S(582, 643), S(573, 712), S(543, 705), S(539, 693), S(534, 720), S(549, 637), S(528, 609), // + S(529, 480), S(567, 493), S(570, 561), S(582, 599), S(569, 626), S(563, 590), S(525, 630), S(537, 605), // + S(511, 496), S(544, 343), S(567, 363), S(581, 474), S(577, 549), S(575, 496), S(564, 520), S(532, 549), // }; inline const std::array KING_PSQT = { - S(-67, -360), S(261, 213), S(164, 128), S(35, -43), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(238, -87), S(334, 188), S(178, 181), S(141, -24), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(225, 27), S(379, 100), S(276, 93), S(185, -22), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(72, 2), S(323, 43), S(169, 63), S(107, 25), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-31, -16), S(230, 7), S(148, 20), S(15, 38), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-21, -13), S(215, -5), S(109, 12), S(60, -6), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-1, -16), S(84, 32), S(-5, 40), S(-60, 16), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-115, -66), S(-16, -22), S(-119, -13), S(-120, -81), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-69, -319), S(265, 196), S(140, 151), S(25, -28), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(212, -52), S(327, 175), S(185, 165), S(116, 3), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(202, 46), S(357, 119), S(250, 117), S(159, 6), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(54, 16), S(304, 59), S(158, 76), S(105, 33), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-33, -18), S(219, 14), S(151, 20), S(27, 32), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-23, -15), S(212, -3), S(114, 8), S(64, -11), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(1, -21), S(85, 32), S(2, 34), S(-55, 10), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-112, -72), S(-13, -26), S(-113, -20), S(-116, -89), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; inline const std::array, 4> KING_SHELTER = {{ - {{ S(15, -17), S(-3, 18), S(-7, 21), S(-0, 8), S(-0, 4), S(-7, 21), S(-1, 21), }}, - {{ S(4, -3), S(-23, 30), S(-19, 24), S(-11, 7), S(-10, 7), S(-19, 29), S(-22, 38), }}, - {{ S(-14, 4), S(-26, 31), S(-24, 12), S(-20, -1), S(-20, -0), S(-23, 12), S(-24, 27), }}, - {{ S(1, -12), S(-17, -12), S(-9, -15), S(-4, -19), S(-5, -17), S(-9, -13), S(-13, -13), }}, + {{ S(20, -17), S(2, 19), S(-2, 21), S(5, 7), S(5, 4), S(-2, 21), S(4, 20), }}, + {{ S(10, -5), S(-18, 28), S(-14, 22), S(-5, 4), S(-4, 4), S(-13, 26), S(-17, 36), }}, + {{ S(-12, 3), S(-23, 28), S(-22, 10), S(-18, -5), S(-18, -3), S(-21, 10), S(-22, 25), }}, + {{ S(6, -15), S(-12, -15), S(-3, -19), S(2, -23), S(0, -21), S(-4, -16), S(-8, -16), }}, }}; inline const std::array BLOCKED_SHELTER_STORM = { - S(0, 0), S(0, 0), S(5, 26), S(-16, 31), S(-14, 20), S(-6, 8), S(-7, -8), + S(0, 0), S(0, 0), S(4, 23), S(-18, 31), S(-15, 19), S(-8, 7), S(-8, -8), }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(-3, 4), S(-13, 12), S(-12, 10), S(-11, 10), S(-11, 5), S(-10, 2), S(-13, 9), }}, - {{ S(-2, 2), S(-10, 8), S(-16, 13), S(-13, 10), S(-13, 6), S(-15, 10), S(-9, 7), }}, - {{ S(-8, 5), S(-13, 3), S(-14, 9), S(-10, 9), S(-9, 7), S(-13, 8), S(-12, 4), }}, - {{ S(-9, 7), S(-14, 9), S(-15, 8), S(-10, 12), S(-8, 12), S(-14, 8), S(-16, 8), }}, + {{ S(-4, 2), S(-15, 10), S(-13, 9), S(-12, 9), S(-13, 3), S(-11, -1), S(-15, 8), }}, + {{ S(-3, 1), S(-11, 7), S(-18, 12), S(-15, 9), S(-14, 5), S(-16, 9), S(-11, 6), }}, + {{ S(-10, 5), S(-14, 2), S(-15, 9), S(-11, 8), S(-11, 7), S(-15, 7), S(-14, 3), }}, + {{ S(-10, 7), S(-15, 9), S(-16, 8), S(-11, 12), S(-9, 12), S(-15, 8), S(-17, 8), }}, }}; inline TunableSigmoid<32> KING_SAFETY_ACTIVATION( - 1192, 541, -31, 51 + 1166, 539, -40, 58 ); -inline VParam WINNABLE_PAWNS = V(47); -inline VParam WINNABLE_BIAS = V(-451); +inline VParam WINNABLE_PAWNS = V(-15); +inline VParam WINNABLE_SYM = V(135); +inline VParam WINNABLE_ASYM = V(123); +inline VParam WINNABLE_BIAS = V(-642); -// Epoch duration: 7.46582s +// Epoch duration: 7.52381s // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index 3b5d3d47..2fd2425c 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -415,6 +415,8 @@ int main() { std::cout << std::endl; std::cout << "inline VParam WINNABLE_PAWNS = " << WINNABLE_PAWNS << ";\n"; + std::cout << "inline VParam WINNABLE_SYM = " << WINNABLE_SYM << ";\n"; + std::cout << "inline VParam WINNABLE_ASYM = " << WINNABLE_ASYM << ";\n"; std::cout << "inline VParam WINNABLE_BIAS = " << WINNABLE_BIAS << ";\n"; std::cout << std::endl; diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 53d9ef56..e9455a27 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -417,10 +417,20 @@ PScore king_safety_activation(const Position& pos, PScore& king_safety_score) { PScore apply_winnable(const Position& pos, PScore& score) { - i32 pawn_count = (pos.bitboard_for(Color::White, PieceType::Pawn) - | pos.bitboard_for(Color::Black, PieceType::Pawn)) - .ipopcount(); - Score winnable = WINNABLE_PAWNS * pawn_count + WINNABLE_BIAS; + Bitboard white_pawns = pos.bitboard_for(Color::White, PieceType::Pawn); + Bitboard black_pawns = pos.bitboard_for(Color::Black, PieceType::Pawn); + + i32 pawn_count = (white_pawns | black_pawns).ipopcount(); + + Bitboard white_files = Bitboard::fill_verticals(white_pawns); + Bitboard black_files = Bitboard::fill_verticals(black_pawns); + + i32 sym_files = (white_files & black_files).ipopcount() / 8; + i32 asym_files = (white_files ^ black_files).ipopcount() / 8; + + Score symmetry = WINNABLE_SYM * sym_files + WINNABLE_ASYM * asym_files; + + Score winnable = WINNABLE_PAWNS * pawn_count + symmetry + WINNABLE_BIAS; if (score.eg() < 0) { winnable = -winnable; From 581606b2d0e03bf5cc7e16a984511898fab5a02a Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Thu, 5 Feb 2026 20:02:10 +0100 Subject: [PATCH 2/2] Bench: 18003890 --- src/evaluation.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/evaluation.cpp b/src/evaluation.cpp index e9455a27..55cb8d7b 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -420,16 +420,16 @@ PScore apply_winnable(const Position& pos, PScore& score) { Bitboard white_pawns = pos.bitboard_for(Color::White, PieceType::Pawn); Bitboard black_pawns = pos.bitboard_for(Color::Black, PieceType::Pawn); - i32 pawn_count = (white_pawns | black_pawns).ipopcount(); + i32 pawn_count = (white_pawns | black_pawns).ipopcount(); Bitboard white_files = Bitboard::fill_verticals(white_pawns); Bitboard black_files = Bitboard::fill_verticals(black_pawns); - i32 sym_files = (white_files & black_files).ipopcount() / 8; + i32 sym_files = (white_files & black_files).ipopcount() / 8; i32 asym_files = (white_files ^ black_files).ipopcount() / 8; Score symmetry = WINNABLE_SYM * sym_files + WINNABLE_ASYM * asym_files; - + Score winnable = WINNABLE_PAWNS * pawn_count + symmetry + WINNABLE_BIAS; if (score.eg() < 0) {