diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 100830c1..5712efc1 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,185 +5,187 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(187, 494); -inline const PParam KNIGHT_MAT = S(801, 1536); -inline const PParam BISHOP_MAT = S(846, 1634); -inline const PParam ROOK_MAT = S(1009, 2571); -inline const PParam QUEEN_MAT = S(2391, 3894); -inline const PParam TEMPO_VAL = S(63, 38); - -inline const PParam BISHOP_XRAY_PAWNS = S(-13, -7); -inline const PParam BISHOP_PAIR_VAL = S(63, 222); -inline const PParam ROOK_OPEN_VAL = S(107, -12); -inline const PParam ROOK_SEMIOPEN_VAL = S(44, -1); -inline const PParam MINOR_BEHIND_PAWN = S(15, 36); -inline const PParam RESTRICTED_SQUARES = S(-24, -7); +inline const PParam PAWN_MAT = S(192, 495); +inline const PParam KNIGHT_MAT = S(808, 1534); +inline const PParam BISHOP_MAT = S(852, 1627); +inline const PParam ROOK_MAT = S(1013, 2567); +inline const PParam QUEEN_MAT = S(2395, 3888); +inline const PParam TEMPO_VAL = S(68, 48); + +inline const PParam BISHOP_XRAY_PAWNS = S(-13, -5); +inline const PParam BISHOP_PAIR_VAL = S(63, 224); +inline const PParam ROOK_OPEN_VAL = S(109, -5); +inline const PParam ROOK_SEMIOPEN_VAL = S(44, 12); +inline const PParam MINOR_BEHIND_PAWN = S(15, 37); +inline const PParam RESTRICTED_SQUARES = S(-23, -6); inline const PParam DOUBLED_PAWN_VAL = S(-20, -79); -inline const PParam ISOLATED_PAWN_VAL = S(-14, -37); +inline const PParam ISOLATED_PAWN_VAL = S(-13, -36); -inline const PParam POTENTIAL_CHECKER_VAL = S(-45, -39); -inline const PParam OUTPOST_KNIGHT_VAL = S(58, 38); -inline const PParam OUTPOST_BISHOP_VAL = S(48, 38); +inline const PParam POTENTIAL_CHECKER_VAL = S(-46, -39); +inline const PParam OUTPOST_KNIGHT_VAL = S(53, 41); +inline const PParam OUTPOST_BISHOP_VAL = S(44, 36); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(36, 55); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(39, 3); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(24, 54); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(58, -41); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(37, 52); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(40, 3); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(25, 53); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(60, -48); inline const std::array PAWN_PHALANX = { - S(15, -3), S(30, 37), S(58, 66), S(127, 193), S(423, 279), S(579, 600), + S(14, -3), S(31, 35), S(59, 64), S(127, 194), S(417, 289), S(582, 606), }; inline const std::array DEFENDED_PAWN = { - S(45, 35), S(39, 27), S(57, 57), S(108, 168), S(414, 82), + S(44, 34), S(37, 24), S(54, 52), S(102, 165), S(405, 90), }; inline const std::array PASSED_PAWN = { - S(-90, -266), S(-88, -231), S(-66, -94), S(-24, 41), S(73, 232), S(208, 399), + S(-88, -265), S(-87, -230), S(-65, -93), S(-24, 41), S(70, 231), S(214, 400), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(26, -45), S(25, -6), S(15, 36), S(14, 113), S(79, 238), S(152, 415), + S(26, -43), S(25, -3), S(14, 38), S(12, 115), S(76, 244), S(113, 438), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(15, -40), S(4, 7), S(-5, -24), S(-3, -59), S(-9, -161), S(-165, -320), + S(14, -39), S(2, 10), S(-7, -22), S(-4, -58), S(-8, -166), S(-168, -330), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(13, 245), S(0, 188), S(-1, 112), S(9, 72), S(20, 74), S(59, 72), S(47, 55), + S(0, 0), S(13, 239), S(-0, 189), S(-1, 113), S(9, 74), S(20, 75), S(60, 72), S(50, 53), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-130, -53), S(16, 5), S(2, 106), S(27, 154), S(38, 190), S(51, 194), S(34, 177), + S(0, 0), S(-140, -50), S(15, 4), S(1, 106), S(26, 155), S(37, 191), S(50, 196), S(34, 179), }; inline const std::array KNIGHT_MOBILITY = { - S(-84, -360), S(-25, -131), S(5, -16), S(28, 25), S(56, 50), S(71, 83), S(89, 87), S(107, 93), S(126, 44), + S(-85, -367), S(-25, -139), S(5, -22), S(28, 21), S(57, 48), S(72, 81), S(90, 86), S(109, 92), S(127, 45), }; inline const std::array BISHOP_MOBILITY = { - S(-59, -270), S(-12, -106), S(37, -36), S(58, 12), S(80, 48), S(92, 73), S(98, 92), S(103, 108), S(107, 118), S(113, 121), S(122, 113), S(137, 92), S(142, 95), S(121, 62), + S(-61, -278), S(-14, -113), S(35, -43), S(57, 6), S(79, 44), S(91, 70), S(98, 91), S(103, 108), S(107, 120), S(115, 125), S(125, 116), S(142, 100), S(147, 104), S(125, 78), }; inline const std::array ROOK_MOBILITY = { - S(107, -198), S(23, -12), S(43, 21), S(59, 36), S(70, 55), S(73, 69), S(78, 83), S(84, 88), S(89, 100), S(95, 106), S(101, 110), S(105, 114), S(108, 117), S(112, 106), S(141, 56), + S(104, -191), S(24, -13), S(44, 21), S(60, 35), S(71, 53), S(74, 67), S(79, 81), S(85, 86), S(90, 98), S(97, 103), S(103, 108), S(106, 113), S(109, 118), S(113, 107), S(143, 56), }; inline const std::array QUEEN_MOBILITY = { - S(-210, -129), S(-61, -21), S(-36, 101), S(-13, 221), S(2, 265), S(9, 316), S(15, 350), S(21, 366), S(25, 391), S(27, 410), S(32, 417), S(35, 427), S(38, 431), S(39, 437), S(39, 438), S(35, 442), S(31, 442), S(32, 432), S(31, 428), S(34, 418), S(28, 403), S(30, 379), S(-0, 405), S(-42, 385), S(-75, 390), S(-111, 410), S(-157, 429), S(-128, 345), + S(-205, -132), S(-59, -21), S(-33, 101), S(-12, 223), S(3, 263), S(10, 313), S(17, 345), S(22, 361), S(26, 385), S(28, 403), S(34, 411), S(36, 421), S(39, 426), S(40, 432), S(40, 435), S(36, 441), S(33, 440), S(34, 434), S(34, 431), S(39, 422), S(35, 407), S(38, 385), S(6, 415), S(-34, 396), S(-64, 397), S(-99, 419), S(-145, 443), S(-116, 357), }; -inline const PParam PAWN_THREAT_KNIGHT = S(199, 152); -inline const PParam PAWN_THREAT_BISHOP = S(192, 219); -inline const PParam PAWN_THREAT_ROOK = S(204, 161); -inline const PParam PAWN_THREAT_QUEEN = S(174, 29); +inline const PParam PAWN_THREAT_KNIGHT = S(193, 141); +inline const PParam PAWN_THREAT_BISHOP = S(171, 205); +inline const PParam PAWN_THREAT_ROOK = S(192, 141); +inline const PParam PAWN_THREAT_QUEEN = S(148, 12); inline const std::array MINOR_THREAT = { - S(7, 70), S(96, 91), S(112, 127), S(213, 137), S(179, 33), S(0, 0), + S(7, 51), S(92, 90), S(104, 119), S(202, 117), S(160, 12), S(0, 0), }; inline const std::array ROOK_THREAT = { - S(4, 67), S(67, 85), S(78, 95), S(-18, 30), S(204, -13), S(0, 0), + S(7, 45), S(49, 85), S(68, 90), S(-25, 9), S(177, -55), S(0, 0), }; -inline const PParam KING_THREAT = S(-11, 178); +inline const PParam KING_THREAT = S(-27, 158); +inline const PParam HANGING_PAWN = S(30, 93); +inline const PParam HANGING_NON_PAWN = S(67, 25); inline const std::array BISHOP_PAWNS = { - S(5, -19), S(4, -15), S(-0, -21), S(-6, -29), S(-11, -37), S(-16, -44), S(-18, -57), S(-24, -60), S(-27, -79), + S(5, -17), S(4, -14), S(-0, -20), S(-5, -28), S(-11, -37), S(-16, -43), S(-18, -56), S(-23, -60), S(-27, -77), }; -inline const PParam ROOK_LINEUP = S(15, 75); +inline const PParam ROOK_LINEUP = S(15, 77); inline const std::array PAWN_PSQT = { - S(181, 267), S(35, 375), S(62, 352), S(128, 259), S(188, 159), S(118, 220), S(84, 259), S(226, 201), // - S(34, 61), S(39, 105), S(23, 45), S(38, -29), S(32, -66), S(4, -25), S(-3, 32), S(-25, 61), // - S(31, -14), S(4, -3), S(36, -50), S(23, -72), S(15, -91), S(-7, -76), S(-42, -39), S(-42, -2), // - S(-9, -73), S(-34, -41), S(1, -65), S(-8, -75), S(-28, -86), S(-38, -75), S(-87, -52), S(-78, -52), // - S(-12, -108), S(21, -106), S(7, -49), S(-8, -55), S(-34, -66), S(-50, -74), S(-78, -70), S(-80, -74), // - S(10, -104), S(82, -93), S(70, -42), S(25, -19), S(-4, -44), S(-23, -65), S(-48, -59), S(-60, -57), // + S(183, 270), S(43, 381), S(65, 354), S(134, 255), S(190, 161), S(122, 221), S(88, 265), S(227, 201), // + S(36, 68), S(46, 110), S(28, 51), S(42, -23), S(36, -60), S(7, -18), S(2, 38), S(-22, 68), // + S(33, -8), S(6, 1), S(38, -46), S(24, -69), S(15, -87), S(-5, -71), S(-40, -34), S(-41, 4), // + S(-9, -69), S(-33, -38), S(1, -63), S(-9, -74), S(-30, -84), S(-39, -72), S(-87, -48), S(-78, -47), // + S(-12, -106), S(21, -105), S(7, -48), S(-9, -53), S(-36, -64), S(-52, -71), S(-80, -67), S(-81, -70), // + S(10, -104), S(83, -94), S(70, -44), S(25, -18), S(-5, -42), S(-24, -62), S(-50, -55), S(-61, -53), // }; inline const std::array KNIGHT_PSQT = { - S(-257, -520), S(-255, 39), S(-278, -81), S(12, 20), S(-84, 27), S(-252, 59), S(-381, 110), S(-344, -395), // - S(-7, -28), S(-7, 25), S(98, 11), S(76, 55), S(89, 39), S(52, 18), S(-21, 19), S(-31, -2), // - S(43, -38), S(36, 29), S(73, 55), S(77, 67), S(65, 68), S(25, 67), S(13, 26), S(-36, 3), // - S(96, 11), S(90, 39), S(102, 68), S(104, 107), S(111, 108), S(77, 77), S(51, 38), S(39, 24), // - S(74, 10), S(105, 2), S(102, 56), S(93, 87), S(80, 87), S(79, 70), S(65, 11), S(24, 22), // - S(18, -42), S(48, -17), S(51, 30), S(65, 62), S(60, 60), S(33, 25), S(20, -8), S(-23, -44), // - S(39, -30), S(46, -21), S(28, -12), S(35, 17), S(32, 12), S(6, -39), S(-26, -6), S(-34, -112), // - S(-39, -93), S(10, -32), S(31, -46), S(48, -36), S(29, -13), S(-7, -51), S(-17, -32), S(-58, -148), // + S(-251, -508), S(-242, 37), S(-262, -91), S(27, 15), S(-79, 30), S(-241, 53), S(-358, 99), S(-335, -389), // + S(-4, -23), S(-2, 23), S(101, 8), S(82, 51), S(93, 38), S(53, 17), S(-15, 15), S(-28, 4), // + S(44, -33), S(36, 28), S(75, 48), S(79, 64), S(66, 64), S(28, 54), S(13, 26), S(-35, 4), // + S(98, 15), S(91, 39), S(102, 65), S(104, 106), S(111, 106), S(76, 70), S(51, 34), S(40, 24), // + S(76, 12), S(104, 2), S(101, 53), S(94, 83), S(81, 83), S(79, 63), S(65, 7), S(25, 22), // + S(17, -38), S(45, -18), S(48, 26), S(63, 58), S(58, 57), S(30, 19), S(17, -9), S(-24, -42), // + S(39, -26), S(44, -20), S(27, -12), S(34, 16), S(31, 10), S(5, -41), S(-27, -6), S(-36, -103), // + S(-41, -84), S(8, -26), S(28, -41), S(47, -33), S(27, -12), S(-10, -51), S(-18, -30), S(-60, -141), // }; inline const std::array BISHOP_PSQT = { - S(-119, 12), S(-169, 98), S(-443, 192), S(-276, 89), S(-293, 135), S(-296, 141), S(-197, 109), S(-119, 46), // - S(-28, -26), S(-77, 94), S(-38, 56), S(-78, 74), S(-67, 70), S(-33, 44), S(-6, 31), S(-46, 10), // - S(34, 18), S(11, 70), S(30, 78), S(28, 67), S(22, 47), S(20, 50), S(11, 51), S(17, 7), // - S(14, -13), S(55, 17), S(65, 41), S(77, 61), S(105, 45), S(48, 29), S(52, -5), S(5, -13), // - S(50, -61), S(50, -4), S(81, 13), S(100, 32), S(82, 50), S(71, 24), S(24, 8), S(21, -40), // - S(63, -44), S(86, -29), S(100, 8), S(70, 38), S(68, 19), S(66, 21), S(73, -10), S(23, -28), // - S(35, -99), S(116, -54), S(75, -14), S(52, 2), S(35, 5), S(55, -41), S(53, -53), S(47, -73), // - S(51, -90), S(22, -19), S(26, -5), S(49, -31), S(33, -23), S(39, 11), S(49, -23), S(45, -65), // + S(-116, 19), S(-165, 93), S(-428, 185), S(-263, 85), S(-283, 131), S(-287, 139), S(-191, 105), S(-114, 55), // + S(-28, -16), S(-75, 91), S(-34, 50), S(-70, 67), S(-62, 66), S(-27, 38), S(-3, 31), S(-42, 18), // + S(39, 23), S(12, 66), S(31, 73), S(28, 62), S(23, 41), S(20, 46), S(13, 48), S(21, 14), // + S(16, -4), S(57, 17), S(66, 37), S(77, 56), S(104, 42), S(48, 23), S(54, -7), S(7, -6), // + S(52, -54), S(50, -2), S(81, 11), S(99, 25), S(80, 42), S(71, 20), S(23, 7), S(23, -35), // + S(63, -37), S(85, -27), S(100, 5), S(69, 34), S(67, 13), S(64, 16), S(71, -11), S(23, -22), // + S(35, -91), S(116, -54), S(75, -16), S(52, -0), S(35, 3), S(55, -43), S(53, -52), S(48, -64), // + S(52, -83), S(23, -19), S(25, -2), S(50, -31), S(33, -22), S(39, 12), S(48, -23), S(45, -62), // }; inline const std::array ROOK_PSQT = { - S(163, 89), S(204, 98), S(150, 130), S(138, 105), S(199, 63), S(156, 87), S(175, 92), S(145, 103), // - S(83, 139), S(147, 132), S(197, 102), S(146, 100), S(191, 81), S(142, 109), S(95, 135), S(90, 137), // - S(60, 133), S(180, 84), S(208, 63), S(184, 47), S(182, 69), S(128, 104), S(130, 110), S(73, 154), // - S(38, 99), S(101, 109), S(125, 82), S(106, 84), S(133, 73), S(95, 113), S(92, 121), S(30, 146), // - S(9, 39), S(79, 49), S(66, 66), S(41, 73), S(50, 84), S(39, 108), S(17, 109), S(-3, 107), // - S(21, -31), S(92, -11), S(80, 14), S(61, 21), S(71, 28), S(40, 62), S(48, 38), S(1, 50), // - S(-66, -26), S(69, -69), S(71, -30), S(59, 4), S(62, 3), S(47, 16), S(37, -0), S(8, 6), // - S(-3, -60), S(9, -17), S(81, -38), S(91, -37), S(90, -28), S(68, -4), S(67, -16), S(49, -11), // + S(174, 82), S(212, 99), S(155, 133), S(145, 107), S(204, 64), S(163, 84), S(184, 87), S(156, 94), // + S(90, 138), S(149, 133), S(197, 102), S(145, 102), S(191, 80), S(142, 109), S(98, 135), S(93, 138), // + S(64, 131), S(184, 81), S(209, 62), S(183, 47), S(182, 66), S(130, 98), S(131, 107), S(75, 152), // + S(39, 98), S(105, 104), S(127, 79), S(106, 79), S(135, 66), S(98, 105), S(93, 113), S(32, 141), // + S(10, 36), S(80, 46), S(68, 62), S(42, 68), S(53, 74), S(39, 102), S(18, 101), S(-4, 102), // + S(22, -34), S(93, -11), S(82, 12), S(63, 16), S(73, 22), S(41, 57), S(47, 34), S(1, 44), // + S(-66, -27), S(69, -72), S(72, -33), S(61, -1), S(64, -4), S(48, 12), S(36, -3), S(9, 3), // + S(-3, -58), S(11, -14), S(83, -32), S(93, -36), S(92, -28), S(69, -4), S(68, -15), S(49, -10), // }; inline const std::array QUEEN_PSQT = { - S(55, 163), S(144, 112), S(41, 268), S(-11, 361), S(26, 322), S(60, 229), S(60, 150), S(-7, 203), // - S(50, 174), S(61, 247), S(24, 324), S(-115, 455), S(-60, 422), S(-10, 322), S(39, 175), S(13, 166), // - S(0, 237), S(32, 286), S(0, 367), S(-41, 411), S(-22, 398), S(29, 282), S(61, 172), S(52, 103), // - S(18, 142), S(7, 254), S(-23, 319), S(-43, 400), S(-25, 402), S(9, 266), S(50, 163), S(25, 125), // - S(7, 138), S(0, 176), S(-14, 242), S(-35, 314), S(-22, 340), S(-0, 261), S(10, 174), S(35, 80), // - S(7, 36), S(29, 64), S(23, 151), S(-0, 175), S(11, 177), S(13, 210), S(35, 130), S(23, 87), // - S(-23, -112), S(6, -95), S(11, -13), S(33, 25), S(28, 68), S(31, 42), S(6, 71), S(21, 47), // - S(-36, -95), S(-20, -240), S(9, -241), S(25, -129), S(32, -51), S(33, -82), S(31, -55), S(4, -14), // + S(59, 165), S(140, 123), S(45, 271), S(-9, 366), S(31, 318), S(63, 231), S(61, 149), S(-7, 205), // + S(51, 178), S(50, 244), S(15, 313), S(-122, 438), S(-70, 406), S(-18, 303), S(30, 163), S(15, 159), // + S(-1, 247), S(30, 283), S(-4, 355), S(-48, 399), S(-28, 382), S(25, 261), S(58, 155), S(50, 101), // + S(18, 154), S(4, 256), S(-26, 305), S(-50, 385), S(-31, 380), S(5, 240), S(46, 150), S(23, 122), // + S(7, 147), S(0, 180), S(-15, 234), S(-38, 299), S(-26, 319), S(-2, 243), S(8, 165), S(34, 71), // + S(8, 50), S(29, 72), S(23, 152), S(1, 166), S(12, 169), S(13, 200), S(33, 123), S(23, 84), // + S(-19, -101), S(10, -91), S(13, -12), S(37, 23), S(30, 65), S(35, 37), S(8, 74), S(22, 57), // + S(-33, -77), S(-16, -225), S(14, -230), S(30, -118), S(37, -42), S(37, -75), S(34, -49), S(6, -6), // }; inline const std::array KING_PSQT = { - S(140, -595), S(492, 2), S(299, 163), S(21, 126), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(356, -185), S(379, 105), S(200, 171), S(23, 129), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(187, 45), S(222, 159), S(115, 187), S(-34, 162), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(7, 13), S(83, 122), S(-30, 168), S(-87, 180), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-114, -1), S(-32, 80), S(-101, 148), S(-174, 191), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-49, -30), S(12, 40), S(-70, 118), S(-121, 161), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(21, -83), S(28, -3), S(-33, 59), S(-106, 109), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-22, -194), S(2, -79), S(-78, -18), S(-72, -40), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(133, -594), S(491, -1), S(296, 171), S(17, 132), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(356, -188), S(383, 99), S(205, 171), S(22, 132), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(189, 41), S(228, 155), S(122, 186), S(-32, 164), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(7, 12), S(91, 116), S(-25, 168), S(-83, 180), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-117, -1), S(-30, 78), S(-95, 147), S(-171, 192), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-51, -30), S(13, 38), S(-69, 117), S(-121, 161), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(21, -81), S(29, -4), S(-33, 59), S(-108, 112), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-21, -195), S(3, -79), S(-80, -15), S(-75, -37), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; -inline const PParam KS_NO_QUEEN = S(-86, -436); +inline const PParam KS_NO_QUEEN = S(-86, -435); inline const std::array PT_INNER_RING_ATTACKS = { - S(8, -6), S(10, 9), S(10, 3), S(5, 0), S(3, -10), + S(8, -5), S(10, 10), S(10, 4), S(4, 1), S(3, -10), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(4, -7), S(4, 3), S(2, 3), S(3, 0), S(3, -1), + S(4, -7), S(4, 4), S(2, 3), S(3, 0), S(3, -1), }; inline const PParam KS_FLANK_ATTACK = S(3, -2); inline const PParam KS_FLANK_DEFENSE = S(-3, -0); -inline const PParam KS_FLANK_DOUBLE_ATTACK = S(2, -1); +inline const PParam KS_FLANK_DOUBLE_ATTACK = S(2, -0); inline const PParam KS_FLANK_DOUBLE_DEFENSE = S(-2, 2); inline const std::array, 4> KING_SHELTER = {{ - {{ S(17, -18), S(-7, 6), S(-2, -9), S(9, -16), S(13, -28), S(6, -51), S(-4, -44), }}, - {{ S(2, 3), S(-22, 2), S(-17, 9), S(-9, 17), S(-7, 8), S(-9, -17), S(-19, -24), }}, - {{ S(-3, -1), S(-12, -9), S(-13, 18), S(-8, 18), S(-7, 10), S(-8, -17), S(-24, -40), }}, - {{ S(7, 8), S(-9, 16), S(-6, 37), S(-2, 43), S(-2, 38), S(5, 15), S(8, -15), }}, + {{ S(17, -19), S(-7, 6), S(-3, -9), S(8, -16), S(12, -28), S(5, -51), S(-6, -43), }}, + {{ S(2, 2), S(-22, 1), S(-17, 8), S(-10, 16), S(-7, 8), S(-9, -18), S(-19, -24), }}, + {{ S(-3, -2), S(-11, -10), S(-12, 18), S(-7, 17), S(-7, 11), S(-8, -16), S(-24, -40), }}, + {{ S(6, 7), S(-10, 17), S(-7, 38), S(-2, 42), S(-3, 38), S(4, 15), S(7, -14), }}, }}; inline const std::array BLOCKED_SHELTER_STORM = { - S(0, 0), S(0, 0), S(9, 26), S(-5, 4), S(-8, 11), S(-5, 28), S(2, 48), + S(0, 0), S(0, 0), S(8, 25), S(-5, 3), S(-8, 10), S(-5, 27), S(2, 46), }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(5, 12), S(-44, -144), S(-10, -45), S(-0, 5), S(-2, 4), S(-5, 11), S(-5, 9), }}, - {{ S(9, -0), S(-25, -165), S(-6, -32), S(-3, 2), S(0, -2), S(-7, 5), S(2, 3), }}, - {{ S(-0, 10), S(-10, -88), S(6, -17), S(0, 9), S(-3, 11), S(-9, 19), S(-5, 20), }}, - {{ S(2, 1), S(5, -61), S(-2, 30), S(-3, 26), S(-6, 10), S(-11, 12), S(-10, 20), }}, + {{ S(5, 10), S(-45, -143), S(-10, -43), S(-0, 4), S(-2, 3), S(-6, 9), S(-5, 8), }}, + {{ S(9, -0), S(-25, -153), S(-6, -30), S(-4, 2), S(-1, -3), S(-7, 4), S(2, 2), }}, + {{ S(-0, 10), S(-10, -81), S(6, -15), S(-0, 9), S(-4, 10), S(-10, 18), S(-6, 20), }}, + {{ S(1, 0), S(3, -57), S(-2, 30), S(-3, 25), S(-6, 10), S(-12, 12), S(-10, 20), }}, }}; inline TunableSigmoid<32> KING_SAFETY_ACTIVATION( - 1405, 875, -18, -6 + 1402, 867, -19, -5 ); -inline VParam WINNABLE_PAWNS = V(-21); +inline VParam WINNABLE_PAWNS = V(-20); inline VParam WINNABLE_SYM = V(100); inline VParam WINNABLE_ASYM = V(83); -inline VParam WINNABLE_PAWN_ENDGAME = V(107); -inline VParam WINNABLE_BIAS = V(-366); +inline VParam WINNABLE_PAWN_ENDGAME = V(109); +inline VParam WINNABLE_BIAS = V(-371); -// Epoch duration: 7.2013s +// Epoch duration: 7.28738s // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index a4a0688b..3c91fd78 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -421,7 +421,10 @@ int main() { print_table("MINOR_THREAT", MINOR_THREAT); print_table("ROOK_THREAT", ROOK_THREAT); - std::cout << "inline const PParam KING_THREAT = " << KING_THREAT << ";" << std::endl + std::cout << "inline const PParam KING_THREAT = " << KING_THREAT << ";" << std::endl; + std::cout << "inline const PParam HANGING_PAWN = " << HANGING_PAWN << ";" << std::endl; + std::cout << "inline const PParam HANGING_NON_PAWN = " << HANGING_NON_PAWN << ";" + << std::endl << std::endl; print_table("BISHOP_PAWNS", BISHOP_PAWNS); diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 845a74a8..96af22fd 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -404,15 +404,14 @@ PScore evaluate_threats(const Position& pos) { constexpr Color opp = ~color; PScore eval = PSCORE_ZERO; - Bitboard b, weak, defended, non_pawn_enemies, strongly_protected, safe; - - non_pawn_enemies = - pos.board().get_color_bitboard(opp) & ~pos.bitboard_for(opp, PieceType::Pawn); + Bitboard b, weak, defended, opp_pawn, opp_non_pawn, strongly_protected, safe; + opp_pawn = pos.bitboard_for(opp, PieceType::Pawn); + opp_non_pawn = pos.board().get_color_bitboard(opp) & ~opp_pawn; strongly_protected = pos.attacked_by(opp, PieceType::Pawn) | (pos.attacked_by_two_or_more(opp) & ~pos.attacked_by_two_or_more(opp)); - defended = non_pawn_enemies & strongly_protected; + defended = opp_non_pawn & strongly_protected; weak = pos.board().get_color_bitboard(opp) & ~strongly_protected & pos.attack_table(color).get_attacked_bitboard(); @@ -425,6 +424,7 @@ PScore evaluate_threats(const Position& pos) { PieceType pt = pos.piece_at(sq); eval += MINOR_THREAT[static_cast(pt) - static_cast(PieceType::Pawn)]; } + // Rook threats b = weak & pos.attacked_by(color, PieceType::Rook); for (Square sq : b) { @@ -432,9 +432,17 @@ PScore evaluate_threats(const Position& pos) { eval += ROOK_THREAT[static_cast(pt) - static_cast(PieceType::Pawn)]; } + // King threats if ((weak & pos.attacked_by(color, PieceType::King)).any()) { eval += KING_THREAT; } + + // Hanging pieces + b = weak + & (~pos.attack_table(opp).get_attacked_bitboard() + | (opp_non_pawn & pos.attacked_by_two_or_more(color))); + eval += HANGING_PAWN * (b & opp_pawn).ipopcount(); + eval += HANGING_NON_PAWN * (b & opp_non_pawn).ipopcount(); } Bitboard pawn_attacks = pos.attacked_by(color, PieceType::Pawn);