diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 048b1ef2..27f38a14 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,169 +5,170 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(172, 149); -inline const PParam KNIGHT_MAT = S(680, 428); -inline const PParam BISHOP_MAT = S(746, 446); -inline const PParam ROOK_MAT = S(610, 479); -inline const PParam QUEEN_MAT = S(1415, 722); +inline const PParam PAWN_MAT = S(170, 151); +inline const PParam KNIGHT_MAT = S(692, 434); +inline const PParam BISHOP_MAT = S(752, 448); +inline const PParam ROOK_MAT = S(611, 480); +inline const PParam QUEEN_MAT = S(1424, 724); inline const PParam TEMPO_VAL = S(64, 13); inline const PParam BISHOP_PAIR_VAL = S(78, 160); -inline const PParam ROOK_OPEN_VAL = S(107, -23); -inline const PParam ROOK_SEMIOPEN_VAL = S(44, 16); +inline const PParam ROOK_OPEN_VAL = S(108, -22); +inline const PParam ROOK_SEMIOPEN_VAL = S(45, 15); -inline const PParam DOUBLED_PAWN_VAL = S(-27, -74); +inline const PParam DOUBLED_PAWN_VAL = S(-13, -60); +inline const PParam ISOLATED_PAWN_VAL = S(-23, -18); inline const PParam POTENTIAL_CHECKER_VAL = S(-59, -7); -inline const PParam OUTPOST_KNIGHT_VAL = S(44, 45); -inline const PParam OUTPOST_BISHOP_VAL = S(56, 29); +inline const PParam OUTPOST_KNIGHT_VAL = S(43, 46); +inline const PParam OUTPOST_BISHOP_VAL = S(53, 29); inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(45, 5); inline const PParam PAWN_PUSH_THREAT_BISHOP = S(55, -23); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(34, 39); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(68, -49); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(35, 39); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(67, -48); inline const std::array PAWN_PHALANX = { - S(23, 12), S(54, 35), S(69, 68), S(166, 149), S(481, 182), S(668, 632), + S(21, -3), S(47, 17), S(65, 48), S(159, 127), S(474, 159), S(661, 608), }; inline const std::array DEFENDED_PAWN = { - S(68, 39), S(56, 36), S(70, 65), S(162, 119), S(563, -12), + S(62, 21), S(51, 17), S(62, 44), S(154, 96), S(554, -37), }; inline const std::array PASSED_PAWN = { - S(-93, -100), S(-84, -80), S(-49, 1), S(20, 84), S(113, 206), S(318, 280), + S(-86, -96), S(-79, -78), S(-44, 4), S(22, 86), S(112, 210), S(317, 282), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(36, -34), S(35, -6), S(27, 20), S(21, 70), S(87, 138), S(182, 234), + S(33, -35), S(33, -7), S(26, 19), S(21, 70), S(89, 139), S(190, 234), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(20, -33), S(3, 7), S(-2, -17), S(-9, -39), S(-26, -82), S(-274, -107), + S(19, -34), S(3, 6), S(-3, -18), S(-10, -39), S(-27, -81), S(-276, -105), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(14, 110), S(-8, 90), S(-11, 38), S(-7, 8), S(-1, 5), S(35, 2), S(8, -6), + S(0, 0), S(17, 113), S(-6, 92), S(-8, 40), S(-6, 10), S(4, 7), S(41, 5), S(13, -3), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-337, -8), S(-33, 19), S(-12, 43), S(23, 72), S(37, 87), S(51, 91), S(26, 87), + S(0, 0), S(-336, -5), S(-31, 21), S(-10, 46), S(25, 75), S(42, 90), S(57, 94), S(32, 90), }; inline const std::array KNIGHT_MOBILITY = { - S(90, -35), S(179, 134), S(225, 207), S(259, 241), S(304, 253), S(332, 287), S(366, 281), S(402, 285), S(449, 225), + S(85, -36), S(174, 132), S(220, 203), S(253, 237), S(298, 248), S(326, 282), S(361, 277), S(397, 282), S(444, 221), }; inline const std::array BISHOP_MOBILITY = { - S(102, -77), S(159, 118), S(225, 176), S(258, 219), S(285, 251), S(305, 271), S(315, 287), S(331, 294), S(343, 306), S(363, 296), S(380, 289), S(429, 251), S(437, 249), S(490, 208), + S(105, -72), S(161, 121), S(227, 179), S(260, 222), S(287, 253), S(306, 273), S(316, 289), S(333, 294), S(344, 306), S(364, 296), S(380, 290), S(430, 251), S(436, 250), S(490, 208), }; inline const std::array ROOK_MOBILITY = { - S(342, 162), S(284, 327), S(312, 347), S(331, 354), S(344, 366), S(352, 376), S(360, 384), S(370, 384), S(379, 389), S(390, 389), S(404, 387), S(415, 385), S(422, 384), S(436, 370), S(537, 280), + S(344, 162), S(287, 327), S(315, 348), S(335, 354), S(348, 366), S(355, 376), S(363, 384), S(373, 383), S(382, 389), S(394, 389), S(408, 386), S(418, 385), S(427, 383), S(441, 368), S(546, 279), }; inline const std::array QUEEN_MOBILITY = { - S(647, 206), S(753, 306), S(786, 404), S(808, 519), S(824, 576), S(836, 618), S(843, 653), S(852, 660), S(857, 684), S(862, 694), S(867, 703), S(873, 705), S(882, 699), S(885, 703), S(888, 698), S(890, 696), S(891, 692), S(896, 686), S(903, 672), S(919, 655), S(935, 629), S(963, 596), S(999, 556), S(1092, 460), S(1141, 408), S(1199, 371), S(1227, 340), S(1178, 350), + S(646, 210), S(753, 307), S(785, 404), S(807, 519), S(822, 576), S(835, 618), S(842, 653), S(851, 661), S(855, 685), S(861, 694), S(866, 703), S(872, 705), S(880, 699), S(884, 703), S(887, 698), S(889, 696), S(890, 692), S(895, 687), S(902, 673), S(919, 655), S(935, 629), S(963, 596), S(1001, 556), S(1094, 460), S(1142, 408), S(1202, 370), S(1229, 340), S(1179, 350), }; inline const std::array KING_MOBILITY = { - S(526, -212), S(122, -134), S(36, -46), S(24, -8), S(1, -0), S(-23, 6), S(-25, 18), S(-41, 27), S(-41, -6), + S(523, -206), S(123, -136), S(39, -46), S(24, -10), S(2, -2), S(-22, 5), S(-25, 16), S(-40, 25), S(-39, -7), }; inline const std::array PT_INNER_RING_ATTACKS = { - S(11, -12), S(16, -17), S(14, -13), S(6, -9), S(3, 213), + S(11, -12), S(16, -16), S(14, -13), S(6, -9), S(3, 230), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(3, -2), S(7, -10), S(6, -8), S(6, -6), S(7, 464), + S(3, -2), S(7, -10), S(6, -8), S(6, -5), S(7, 469), }; -inline const PParam PAWN_THREAT_KNIGHT = S(237, 68); -inline const PParam PAWN_THREAT_BISHOP = S(215, 117); -inline const PParam PAWN_THREAT_ROOK = S(217, 87); -inline const PParam PAWN_THREAT_QUEEN = S(185, -46); +inline const PParam PAWN_THREAT_KNIGHT = S(236, 65); +inline const PParam PAWN_THREAT_BISHOP = S(215, 114); +inline const PParam PAWN_THREAT_ROOK = S(218, 84); +inline const PParam PAWN_THREAT_QUEEN = S(182, -47); inline const PParam KNIGHT_THREAT_BISHOP = S(124, 73); inline const PParam KNIGHT_THREAT_ROOK = S(257, 16); -inline const PParam KNIGHT_THREAT_QUEEN = S(169, -43); +inline const PParam KNIGHT_THREAT_QUEEN = S(169, -42); inline const PParam BISHOP_THREAT_KNIGHT = S(117, 41); inline const PParam BISHOP_THREAT_ROOK = S(247, 72); -inline const PParam BISHOP_THREAT_QUEEN = S(202, 52); +inline const PParam BISHOP_THREAT_QUEEN = S(201, 52); inline const std::array BISHOP_PAWNS = { - S(3, -22), S(-4, -9), S(-5, -19), S(-11, -26), S(-17, -31), S(-23, -35), S(-27, -44), S(-33, -43), S(-45, -41), + S(3, -22), S(-4, -9), S(-6, -19), S(-11, -26), S(-17, -32), S(-24, -34), S(-27, -42), S(-34, -40), S(-45, -36), }; -inline const PParam ROOK_LINEUP = S(13, 73); +inline const PParam ROOK_LINEUP = S(13, 74); inline const std::array PAWN_PSQT = { - S(313, 289), S(187, 372), S(317, 340), S(335, 212), S(361, 162), S(281, 236), S(222, 266), S(309, 223), // - S(129, 184), S(185, 216), S(209, 136), S(202, 82), S(178, 69), S(150, 114), S(135, 153), S(75, 174), // - S(94, 149), S(97, 150), S(128, 76), S(129, 62), S(116, 63), S(85, 95), S(52, 138), S(29, 159), // - S(63, 111), S(71, 132), S(93, 76), S(92, 69), S(69, 74), S(54, 99), S(11, 142), S(-6, 132), // - S(54, 88), S(109, 96), S(84, 119), S(81, 104), S(52, 105), S(29, 110), S(12, 128), S(-11, 116), // - S(73, 93), S(180, 105), S(161, 145), S(117, 131), S(85, 125), S(61, 123), S(45, 137), S(9, 133), // + S(319, 290), S(178, 373), S(315, 343), S(331, 214), S(360, 162), S(279, 238), S(213, 267), S(317, 227), // + S(135, 186), S(179, 215), S(210, 137), S(201, 81), S(179, 69), S(151, 116), S(126, 154), S(81, 177), // + S(101, 151), S(90, 150), S(133, 81), S(132, 65), S(119, 68), S(88, 99), S(41, 140), S(35, 162), // + S(69, 114), S(59, 132), S(96, 82), S(93, 74), S(71, 79), S(55, 104), S(-4, 143), S(-2, 135), // + S(64, 92), S(101, 95), S(91, 123), S(86, 107), S(57, 108), S(33, 115), S(0, 128), S(-5, 120), // + S(79, 94), S(167, 100), S(163, 147), S(117, 132), S(85, 125), S(60, 126), S(29, 133), S(12, 135), // }; inline const std::array KNIGHT_PSQT = { - S(-277, 34), S(-179, 217), S(-272, 287), S(94, 180), S(36, 176), S(-96, 170), S(-272, 213), S(-340, 107), // - S(103, 160), S(166, 159), S(244, 121), S(242, 139), S(228, 156), S(160, 149), S(126, 171), S(88, 147), // - S(196, 130), S(232, 160), S(250, 184), S(244, 181), S(219, 187), S(155, 204), S(168, 151), S(125, 150), // - S(265, 152), S(275, 164), S(275, 189), S(268, 212), S(271, 212), S(221, 204), S(214, 171), S(204, 147), // - S(250, 152), S(280, 142), S(261, 183), S(256, 200), S(234, 204), S(229, 191), S(222, 148), S(190, 148), // - S(183, 132), S(212, 131), S(203, 165), S(216, 187), S(215, 184), S(174, 170), S(165, 134), S(132, 112), // - S(196, 121), S(220, 123), S(190, 128), S(195, 147), S(184, 146), S(152, 113), S(151, 121), S(117, 61), // - S(127, 103), S(174, 156), S(194, 118), S(209, 111), S(194, 126), S(155, 106), S(140, 133), S(90, 77), // + S(-284, 34), S(-184, 216), S(-278, 288), S(90, 179), S(33, 176), S(-99, 169), S(-277, 212), S(-345, 104), // + S(99, 159), S(161, 158), S(240, 121), S(239, 138), S(224, 156), S(156, 148), S(120, 169), S(83, 145), // + S(194, 129), S(230, 159), S(247, 182), S(242, 179), S(216, 185), S(151, 202), S(165, 149), S(122, 148), // + S(262, 150), S(273, 163), S(272, 187), S(265, 210), S(268, 210), S(218, 202), S(210, 169), S(201, 145), // + S(247, 150), S(277, 141), S(258, 181), S(253, 198), S(230, 202), S(225, 188), S(218, 146), S(187, 146), // + S(179, 131), S(208, 130), S(200, 162), S(213, 185), S(211, 182), S(170, 168), S(161, 133), S(129, 111), // + S(193, 120), S(217, 122), S(188, 127), S(192, 146), S(181, 145), S(149, 112), S(148, 120), S(114, 60), // + S(124, 100), S(170, 154), S(190, 117), S(206, 110), S(190, 125), S(151, 105), S(137, 131), S(86, 75), // }; inline const std::array BISHOP_PSQT = { - S(13, 276), S(-5, 267), S(-261, 312), S(-162, 288), S(-152, 307), S(-213, 320), S(-70, 314), S(29, 281), // - S(148, 190), S(102, 253), S(121, 225), S(58, 256), S(62, 258), S(105, 244), S(140, 230), S(118, 213), // - S(221, 201), S(235, 218), S(235, 230), S(209, 222), S(181, 219), S(188, 222), S(208, 214), S(187, 191), // - S(199, 190), S(226, 207), S(230, 224), S(232, 251), S(264, 232), S(190, 222), S(194, 195), S(156, 195), // - S(217, 157), S(237, 185), S(243, 206), S(251, 224), S(231, 234), S(208, 223), S(173, 203), S(166, 168), // - S(243, 161), S(279, 172), S(293, 190), S(240, 219), S(233, 202), S(227, 208), S(234, 184), S(176, 188), // - S(219, 127), S(309, 142), S(269, 155), S(237, 178), S(217, 181), S(219, 157), S(217, 159), S(212, 145), // - S(236, 144), S(225, 169), S(232, 190), S(245, 152), S(240, 155), S(238, 199), S(232, 176), S(216, 167), // + S(7, 272), S(-10, 263), S(-266, 309), S(-166, 286), S(-156, 304), S(-217, 317), S(-74, 310), S(23, 278), // + S(143, 186), S(96, 250), S(117, 222), S(54, 254), S(58, 256), S(101, 241), S(132, 227), S(113, 209), // + S(219, 198), S(232, 215), S(232, 228), S(207, 219), S(179, 216), S(184, 220), S(205, 211), S(184, 188), // + S(196, 187), S(223, 204), S(227, 221), S(229, 248), S(261, 230), S(186, 219), S(191, 193), S(152, 192), // + S(214, 154), S(234, 182), S(240, 203), S(248, 221), S(228, 231), S(205, 219), S(169, 200), S(162, 165), // + S(240, 158), S(275, 169), S(289, 187), S(237, 215), S(229, 199), S(224, 205), S(230, 181), S(174, 186), // + S(215, 124), S(305, 140), S(266, 152), S(234, 175), S(214, 178), S(216, 154), S(213, 156), S(209, 141), // + S(232, 140), S(222, 165), S(228, 186), S(241, 149), S(236, 152), S(234, 195), S(228, 172), S(211, 164), // }; inline const std::array ROOK_PSQT = { - S(493, 321), S(537, 323), S(486, 344), S(492, 331), S(491, 321), S(461, 327), S(459, 338), S(447, 348), // - S(381, 383), S(476, 362), S(544, 338), S(486, 351), S(477, 355), S(455, 359), S(384, 389), S(362, 397), // - S(354, 373), S(478, 337), S(516, 325), S(494, 320), S(457, 334), S(413, 358), S(413, 358), S(337, 397), // - S(344, 351), S(432, 346), S(462, 333), S(443, 332), S(435, 338), S(394, 358), S(382, 356), S(310, 380), // - S(312, 310), S(381, 315), S(375, 330), S(352, 333), S(337, 344), S(329, 358), S(301, 351), S(278, 350), // - S(291, 272), S(359, 280), S(350, 302), S(336, 300), S(331, 299), S(307, 323), S(298, 307), S(261, 316), // - S(199, 288), S(324, 239), S(337, 261), S(333, 274), S(323, 275), S(311, 283), S(294, 268), S(263, 285), // - S(248, 285), S(275, 296), S(335, 268), S(351, 261), S(339, 270), S(321, 286), S(307, 283), S(285, 302), // + S(490, 321), S(533, 324), S(484, 343), S(488, 331), S(486, 321), S(455, 327), S(454, 339), S(441, 349), // + S(380, 383), S(473, 362), S(541, 338), S(482, 352), S(472, 355), S(450, 359), S(379, 389), S(359, 397), // + S(353, 372), S(477, 336), S(514, 324), S(492, 320), S(455, 334), S(410, 357), S(411, 357), S(335, 397), // + S(343, 351), S(429, 346), S(458, 333), S(440, 332), S(431, 338), S(390, 357), S(379, 356), S(307, 380), // + S(307, 310), S(377, 315), S(369, 331), S(348, 333), S(333, 344), S(324, 358), S(296, 351), S(273, 350), // + S(286, 272), S(354, 280), S(346, 302), S(332, 299), S(327, 299), S(303, 322), S(294, 306), S(256, 316), // + S(193, 288), S(319, 239), S(332, 261), S(328, 273), S(318, 275), S(306, 283), S(289, 268), S(258, 284), // + S(243, 285), S(270, 296), S(331, 268), S(347, 260), S(334, 270), S(316, 286), S(303, 283), S(280, 302), // }; inline const std::array QUEEN_PSQT = { - S(658, 511), S(707, 480), S(674, 531), S(624, 616), S(634, 584), S(630, 568), S(658, 494), S(586, 558), // - S(652, 570), S(622, 652), S(603, 690), S(460, 781), S(469, 768), S(537, 713), S(577, 611), S(586, 587), // - S(626, 608), S(678, 626), S(618, 706), S(565, 739), S(539, 730), S(571, 681), S(620, 587), S(620, 537), // - S(660, 541), S(674, 604), S(614, 672), S(599, 718), S(586, 721), S(585, 653), S(639, 562), S(624, 531), // - S(665, 522), S(667, 560), S(640, 622), S(607, 675), S(606, 668), S(607, 622), S(619, 556), S(641, 484), // - S(647, 462), S(682, 504), S(683, 562), S(649, 562), S(643, 558), S(644, 570), S(652, 501), S(629, 476), // - S(629, 359), S(664, 354), S(672, 414), S(688, 450), S(673, 478), S(664, 448), S(633, 484), S(638, 464), // - S(602, 380), S(637, 228), S(658, 239), S(678, 336), S(680, 394), S(676, 351), S(664, 376), S(623, 426), // + S(657, 512), S(707, 480), S(674, 531), S(624, 616), S(634, 584), S(628, 568), S(657, 495), S(584, 559), // + S(653, 570), S(621, 653), S(603, 690), S(460, 782), S(468, 770), S(536, 713), S(574, 612), S(585, 587), // + S(627, 608), S(679, 625), S(617, 707), S(566, 738), S(540, 728), S(569, 683), S(621, 586), S(620, 537), // + S(660, 541), S(674, 604), S(613, 672), S(599, 718), S(585, 721), S(584, 653), S(638, 562), S(624, 531), // + S(665, 522), S(668, 559), S(639, 622), S(607, 674), S(605, 667), S(607, 622), S(619, 554), S(641, 484), // + S(647, 461), S(683, 502), S(683, 561), S(651, 561), S(644, 557), S(645, 570), S(652, 500), S(630, 475), // + S(629, 357), S(665, 353), S(673, 414), S(688, 449), S(674, 477), S(665, 448), S(634, 482), S(639, 462), // + S(603, 379), S(638, 227), S(658, 238), S(679, 335), S(681, 393), S(677, 350), S(665, 374), S(623, 425), // }; inline const std::array KING_PSQT = { - S(-255, -270), S(223, 76), S(143, 49), S(-161, 29), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(280, -109), S(357, 81), S(187, 100), S(86, 9), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(203, 27), S(419, 52), S(286, 66), S(136, 6), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-8, 30), S(315, 28), S(137, 51), S(50, 25), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-94, 21), S(206, 7), S(135, 16), S(25, 18), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-61, 23), S(194, -4), S(99, 12), S(69, -15), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-2, -5), S(90, 21), S(2, 32), S(-46, 2), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-125, -32), S(-11, -13), S(-113, 3), S(-122, -62), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-261, -267), S(217, 80), S(141, 52), S(-161, 30), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(276, -107), S(353, 82), S(184, 101), S(84, 9), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(202, 28), S(417, 52), S(284, 67), S(136, 5), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-11, 30), S(313, 28), S(136, 51), S(50, 24), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-96, 20), S(206, 5), S(135, 15), S(26, 17), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-61, 21), S(195, -6), S(99, 11), S(70, -17), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-1, -8), S(91, 18), S(2, 30), S(-46, -0), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-124, -35), S(-10, -16), S(-112, 1), S(-120, -65), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; inline const std::array, 4> KING_SHELTER = {{ - {{ S(18, -25), S(-0, 8), S(-6, 16), S(2, 2), S(2, 1), S(-5, 16), S(1, 14), }}, - {{ S(8, -7), S(-22, 32), S(-19, 27), S(-10, 6), S(-10, 9), S(-18, 34), S(-21, 45), }}, - {{ S(-10, 1), S(-23, 26), S(-22, 9), S(-19, -7), S(-18, -5), S(-21, 10), S(-21, 25), }}, - {{ S(4, -14), S(-15, -21), S(-7, -22), S(-2, -25), S(-3, -23), S(-8, -18), S(-11, -16), }}, + {{ S(14, -27), S(-4, 5), S(-9, 12), S(-2, -1), S(-2, -2), S(-8, 13), S(-2, 10), }}, + {{ S(4, -9), S(-26, 29), S(-23, 23), S(-13, 3), S(-12, 6), S(-22, 30), S(-25, 41), }}, + {{ S(-15, 0), S(-27, 25), S(-26, 7), S(-23, -7), S(-22, -6), S(-26, 9), S(-26, 24), }}, + {{ S(-0, -17), S(-19, -23), S(-11, -24), S(-6, -27), S(-7, -25), S(-12, -20), S(-15, -18), }}, }}; inline const std::array BLOCKED_SHELTER_STORM = { - S(0, 0), S(0, 0), S(5, 19), S(-20, 34), S(-18, 23), S(-11, 10), S(-14, -3), + S(0, 0), S(0, 0), S(10, 19), S(-16, 35), S(-14, 24), S(-7, 12), S(-10, -1), }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(-7, 11), S(-17, 17), S(-16, 16), S(-15, 10), S(-16, 6), S(-14, 6), S(-17, 14), }}, - {{ S(-6, 9), S(-14, 14), S(-21, 21), S(-18, 9), S(-17, 7), S(-20, 16), S(-14, 13), }}, - {{ S(-12, 10), S(-17, 3), S(-17, 11), S(-13, 10), S(-13, 7), S(-17, 9), S(-16, 5), }}, - {{ S(-13, 11), S(-19, 11), S(-20, 10), S(-14, 14), S(-13, 14), S(-19, 9), S(-21, 9), }}, + {{ S(-3, 13), S(-13, 18), S(-11, 17), S(-10, 12), S(-11, 8), S(-10, 8), S(-13, 15), }}, + {{ S(-2, 11), S(-11, 16), S(-18, 23), S(-13, 11), S(-13, 8), S(-16, 18), S(-10, 15), }}, + {{ S(-7, 12), S(-13, 5), S(-13, 13), S(-9, 11), S(-8, 9), S(-13, 11), S(-12, 7), }}, + {{ S(-9, 13), S(-16, 13), S(-16, 12), S(-10, 15), S(-8, 15), S(-15, 11), S(-17, 11), }}, }}; inline TunableSigmoid<32> KING_SAFETY_ACTIVATION( - 1088, 417, -28, 45 + 1088, 421, -29, 46 ); // Epoch duration: 9.05276s // clang-format on diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index b5bfa944..7d39fa51 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -274,6 +274,8 @@ int main() { std::cout << std::endl; std::cout << "inline const PParam DOUBLED_PAWN_VAL = " << DOUBLED_PAWN_VAL << ";" << std::endl; + std::cout << "inline const PParam ISOLATED_PAWN_VAL = " << ISOLATED_PAWN_VAL << ";" + << std::endl; std::cout << std::endl; std::cout << "inline const PParam POTENTIAL_CHECKER_VAL = " << POTENTIAL_CHECKER_VAL << ";" @@ -407,7 +409,7 @@ int main() { << "\t" << std::lround(a_h.first()) << ", " << std::lround(a_h.second()) << ", " << std::lround(c_h.first()) << ", " << std::lround(c_h.second()) << "\n" - << ")\n"; + << ");\n"; }; print_sigmoid("KING_SAFETY_ACTIVATION", KING_SAFETY_ACTIVATION, 32); diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 17097633..8d65e7df 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -150,13 +150,19 @@ PScore evaluate_pawns(const Position& pos) { constexpr i32 RANK_3 = 2; constexpr Color them = color == Color::White ? Color::Black : Color::White; - Bitboard pawns = pos.board().bitboard_for(color, PieceType::Pawn); - Bitboard opp_pawns = pos.board().bitboard_for(~color, PieceType::Pawn); - Square our_king = pos.king_sq(color); - Square their_king = pos.king_sq(them); - PScore eval = PSCORE_ZERO; + Square our_king = pos.king_sq(color); + Square their_king = pos.king_sq(them); + PScore eval = PSCORE_ZERO; - eval += DOUBLED_PAWN_VAL * (pawns & pawns.shift(Direction::North)).ipopcount(); + Bitboard pawns = pos.board().bitboard_for(color, PieceType::Pawn); + Bitboard opp_pawns = pos.board().bitboard_for(~color, PieceType::Pawn); + + Bitboard pawn_files = Bitboard::fill_verticals(pawns); + Bitboard doubled = pawns & pawns.shift(Direction::North); + Bitboard isolated = + pawns & ~(pawn_files.shift(Direction::East) | pawn_files.shift(Direction::West)); + eval += DOUBLED_PAWN_VAL * doubled.ipopcount(); + eval += ISOLATED_PAWN_VAL * isolated.ipopcount(); for (Square sq : pawns) { Square push = sq.push(); @@ -181,6 +187,7 @@ PScore evaluate_pawns(const Position& pos) { } } + Bitboard phalanx = pawns & pawns.shift(Direction::East); for (Square sq : phalanx) { eval += PAWN_PHALANX[static_cast(sq.relative_sq(color).rank() - RANK_2)];