diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 8db4015f..613ffa4e 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,153 +5,151 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(189, 484); -inline const PParam KNIGHT_MAT = S(804, 1521); -inline const PParam BISHOP_MAT = S(842, 1618); -inline const PParam ROOK_MAT = S(1013, 2561); -inline const PParam QUEEN_MAT = S(2374, 3864); -inline const PParam TEMPO_VAL = S(61, 26); - -inline const PParam BISHOP_XRAY_PAWNS = S(-13, 13); -inline const PParam BISHOP_PAIR_VAL = S(63, 228); -inline const PParam ROOK_OPEN_VAL = S(118, -10); -inline const PParam ROOK_SEMIOPEN_VAL = S(44, 37); -inline const PParam MINOR_BEHIND_PAWN = S(17, 39); -inline const PParam RESTRICTED_SQUARES = S(-23, -7); - -inline const PParam DOUBLED_PAWN_VAL = S(-21, -75); -inline const PParam ISOLATED_PAWN_VAL = S(-14, -39); - -inline const PParam POTENTIAL_CHECKER_VAL = S(-44, -40); -inline const PParam OUTPOST_KNIGHT_VAL = S(57, 55); -inline const PParam OUTPOST_BISHOP_VAL = S(55, 45); - -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(36, 10); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(39, -2); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(24, 60); +inline const PParam PAWN_MAT = S(189, 491); +inline const PParam KNIGHT_MAT = S(801, 1533); +inline const PParam BISHOP_MAT = S(847, 1631); +inline const PParam ROOK_MAT = S(1010, 2571); +inline const PParam QUEEN_MAT = S(2384, 3882); +inline const PParam TEMPO_VAL = S(65, 33); + +inline const PParam BISHOP_XRAY_PAWNS = S(-13, -7); +inline const PParam BISHOP_PAIR_VAL = S(63, 223); +inline const PParam ROOK_OPEN_VAL = S(108, -13); +inline const PParam ROOK_SEMIOPEN_VAL = S(44, -2); +inline const PParam MINOR_BEHIND_PAWN = S(15, 36); +inline const PParam RESTRICTED_SQUARES = S(-24, -6); + +inline const PParam DOUBLED_PAWN_VAL = S(-21, -76); +inline const PParam ISOLATED_PAWN_VAL = S(-13, -38); + +inline const PParam POTENTIAL_CHECKER_VAL = S(-46, -37); +inline const PParam OUTPOST_KNIGHT_VAL = S(56, 45); +inline const PParam OUTPOST_BISHOP_VAL = S(48, 40); + +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(37, 52); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(39, 3); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(25, 52); inline const PParam PAWN_PUSH_THREAT_QUEEN = S(58, -41); inline const std::array PAWN_PHALANX = { - S(14, -2), S(28, 37), S(58, 68), S(127, 200), S(424, 291), S(587, 605), + S(15, -4), S(30, 38), S(57, 68), S(126, 197), S(421, 287), S(582, 600), }; inline const std::array DEFENDED_PAWN = { - S(45, 45), S(41, 41), S(60, 77), S(103, 209), S(406, 169), + S(45, 34), S(38, 28), S(55, 64), S(99, 194), S(401, 137), }; inline const std::array PASSED_PAWN = { - S(-90, -266), S(-87, -229), S(-66, -92), S(-24, 41), S(71, 231), S(211, 380), + S(-91, -266), S(-89, -230), S(-67, -94), S(-25, 41), S(72, 232), S(211, 390), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(24, -41), S(25, -8), S(16, 32), S(16, 109), S(84, 232), S(146, 430), + S(25, -43), S(25, -6), S(16, 33), S(15, 111), S(80, 238), S(148, 425), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(18, -37), S(5, 11), S(-4, -23), S(-0, -55), S(-7, -167), S(-170, -331), + S(15, -39), S(4, 7), S(-5, -23), S(-4, -55), S(-9, -165), S(-163, -326), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(17, 229), S(-1, 183), S(-3, 105), S(6, 64), S(18, 65), S(58, 63), S(48, 46), + S(0, 0), S(16, 234), S(-0, 185), S(-2, 108), S(8, 68), S(19, 70), S(59, 67), S(47, 50), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-125, -149), S(14, 22), S(2, 114), S(27, 161), S(38, 197), S(51, 203), S(36, 183), + S(0, 0), S(-128, -152), S(15, 21), S(2, 113), S(27, 161), S(38, 197), S(51, 202), S(34, 184), }; inline const std::array KNIGHT_MOBILITY = { - S(-87, -365), S(-27, -147), S(2, -30), S(25, 15), S(54, 42), S(69, 80), S(87, 86), S(105, 95), S(124, 45), + S(-82, -365), S(-22, -135), S(7, -19), S(31, 22), S(59, 48), S(73, 80), S(91, 84), S(110, 89), S(128, 42), }; inline const std::array BISHOP_MOBILITY = { - S(-60, -290), S(-13, -126), S(35, -54), S(57, 0), S(79, 41), S(91, 70), S(97, 93), S(102, 110), S(105, 121), S(109, 125), S(118, 113), S(131, 92), S(133, 93), S(111, 60), + S(-59, -273), S(-12, -109), S(37, -39), S(59, 9), S(80, 46), S(92, 71), S(98, 92), S(102, 108), S(106, 119), S(112, 123), S(122, 114), S(137, 95), S(142, 98), S(121, 68), }; inline const std::array ROOK_MOBILITY = { - S(109, -191), S(26, -12), S(47, 21), S(63, 35), S(73, 53), S(77, 67), S(83, 81), S(89, 85), S(94, 97), S(102, 101), S(109, 105), S(112, 111), S(111, 115), S(112, 99), S(137, 46), + S(108, -203), S(24, -16), S(45, 18), S(61, 33), S(71, 52), S(75, 66), S(80, 80), S(85, 86), S(90, 98), S(96, 103), S(102, 108), S(105, 114), S(108, 117), S(112, 107), S(141, 58), }; inline const std::array QUEEN_MOBILITY = { - S(-212, -131), S(-66, -25), S(-39, 93), S(-18, 216), S(-3, 258), S(4, 310), S(11, 342), S(16, 359), S(20, 383), S(23, 401), S(27, 409), S(30, 420), S(32, 425), S(32, 432), S(32, 434), S(26, 441), S(21, 442), S(23, 431), S(22, 427), S(25, 418), S(20, 404), S(22, 380), S(-8, 405), S(-51, 389), S(-84, 395), S(-121, 416), S(-163, 429), S(-136, 353), + S(-210, -129), S(-61, -21), S(-35, 99), S(-13, 219), S(3, 262), S(10, 314), S(16, 348), S(22, 364), S(25, 389), S(27, 409), S(32, 416), S(35, 427), S(38, 430), S(39, 436), S(39, 437), S(34, 443), S(30, 443), S(31, 434), S(31, 427), S(32, 420), S(26, 406), S(28, 382), S(-3, 409), S(-46, 391), S(-80, 398), S(-116, 419), S(-159, 433), S(-132, 355), }; -inline const PParam PAWN_THREAT_KNIGHT = S(199, 143); -inline const PParam PAWN_THREAT_BISHOP = S(185, 194); -inline const PParam PAWN_THREAT_ROOK = S(202, 149); -inline const PParam PAWN_THREAT_QUEEN = S(169, 25); - -inline const PParam KNIGHT_THREAT_BISHOP = S(109, 126); -inline const PParam KNIGHT_THREAT_ROOK = S(223, 97); -inline const PParam KNIGHT_THREAT_QUEEN = S(163, -25); - -inline const PParam BISHOP_THREAT_KNIGHT = S(97, 80); -inline const PParam BISHOP_THREAT_ROOK = S(208, 163); -inline const PParam BISHOP_THREAT_QUEEN = S(181, 91); +inline const PParam PAWN_THREAT_KNIGHT = S(200, 147); +inline const PParam PAWN_THREAT_BISHOP = S(193, 215); +inline const PParam PAWN_THREAT_ROOK = S(206, 155); +inline const PParam PAWN_THREAT_QUEEN = S(175, 25); +inline const std::array MINOR_THREAT = { + S(7, 69), S(96, 89), S(113, 126), S(215, 133), S(180, 30), S(0, 0), +}; +inline const std::array ROOK_THREAT = { + S(4, 67), S(68, 83), S(79, 94), S(-19, 34), S(205, -18), S(0, 0), +}; inline const std::array BISHOP_PAWNS = { - S(3, -19), S(3, -17), S(-1, -23), S(-6, -32), S(-11, -40), S(-16, -46), S(-18, -59), S(-23, -61), S(-27, -76), + S(5, -19), S(4, -16), S(-0, -21), S(-6, -29), S(-11, -37), S(-16, -44), S(-18, -57), S(-24, -61), S(-27, -80), }; -inline const PParam ROOK_LINEUP = S(17, 74); +inline const PParam ROOK_LINEUP = S(15, 75); inline const std::array PAWN_PSQT = { - S(184, 255), S(37, 359), S(65, 337), S(132, 241), S(190, 144), S(119, 208), S(83, 250), S(223, 199), // - S(35, 46), S(43, 84), S(25, 26), S(39, -45), S(33, -81), S(3, -40), S(-3, 16), S(-26, 47), // - S(27, -22), S(2, -13), S(32, -57), S(19, -80), S(9, -99), S(-10, -84), S(-44, -49), S(-46, -10), // - S(-13, -77), S(-36, -44), S(-2, -66), S(-12, -78), S(-32, -89), S(-41, -78), S(-88, -57), S(-81, -57), // - S(-15, -108), S(19, -107), S(7, -46), S(-9, -53), S(-36, -65), S(-50, -73), S(-79, -71), S(-82, -76), // - S(8, -102), S(83, -91), S(71, -40), S(24, -15), S(-4, -39), S(-24, -60), S(-48, -56), S(-61, -56), // + S(183, 263), S(38, 365), S(70, 340), S(135, 245), S(192, 153), S(120, 214), S(84, 255), S(222, 205), // + S(40, 49), S(46, 91), S(30, 33), S(42, -40), S(35, -74), S(8, -34), S(1, 23), S(-22, 53), // + S(33, -18), S(6, -8), S(37, -53), S(24, -74), S(16, -94), S(-6, -78), S(-40, -44), S(-42, -5), // + S(-9, -73), S(-34, -41), S(1, -64), S(-9, -74), S(-29, -85), S(-39, -74), S(-86, -54), S(-78, -52), // + S(-13, -106), S(20, -104), S(5, -46), S(-9, -52), S(-35, -64), S(-51, -73), S(-79, -69), S(-81, -73), // + S(9, -101), S(81, -90), S(69, -38), S(23, -15), S(-5, -40), S(-24, -62), S(-49, -57), S(-61, -55), // }; inline const std::array KNIGHT_PSQT = { - S(-265, -515), S(-284, 60), S(-305, -79), S(-9, 25), S(-113, 42), S(-283, 74), S(-409, 124), S(-358, -382), // - S(-28, -23), S(-20, 27), S(78, 0), S(62, 46), S(76, 30), S(36, 14), S(-31, 21), S(-47, 1), // - S(33, -26), S(30, 22), S(73, 55), S(80, 72), S(70, 77), S(24, 70), S(9, 17), S(-44, 12), // - S(93, 18), S(96, 51), S(106, 69), S(109, 109), S(115, 104), S(80, 75), S(56, 43), S(35, 29), // - S(71, 12), S(105, 3), S(100, 54), S(90, 78), S(78, 76), S(78, 65), S(61, 11), S(20, 22), // - S(15, -44), S(45, -14), S(49, 22), S(62, 53), S(56, 49), S(30, 17), S(18, -10), S(-26, -48), // - S(35, -32), S(41, -25), S(23, -23), S(31, -0), S(27, -3), S(2, -51), S(-32, -8), S(-38, -116), // - S(-43, -89), S(8, -36), S(29, -58), S(48, -46), S(28, -26), S(-8, -61), S(-19, -36), S(-62, -143), // + S(-256, -523), S(-254, 31), S(-282, -99), S(17, 1), S(-84, 14), S(-255, 53), S(-379, 102), S(-344, -396), // + S(-12, -29), S(-9, 15), S(97, -8), S(80, 39), S(93, 26), S(52, 10), S(-22, 16), S(-32, -5), // + S(39, -42), S(37, 24), S(75, 47), S(82, 56), S(69, 59), S(25, 64), S(15, 22), S(-36, -3), // + S(98, 7), S(92, 37), S(105, 65), S(107, 104), S(114, 105), S(79, 75), S(53, 36), S(40, 21), // + S(75, 10), S(106, 3), S(103, 57), S(94, 87), S(81, 88), S(80, 71), S(66, 12), S(24, 21), // + S(18, -39), S(47, -13), S(50, 33), S(64, 65), S(59, 63), S(32, 29), S(19, -6), S(-23, -43), // + S(38, -29), S(45, -18), S(27, -9), S(34, 19), S(31, 14), S(6, -37), S(-27, -5), S(-33, -114), // + S(-40, -91), S(9, -30), S(30, -44), S(48, -34), S(28, -11), S(-8, -49), S(-18, -30), S(-59, -146), // }; inline const std::array BISHOP_PSQT = { - S(-125, 12), S(-186, 115), S(-481, 214), S(-301, 103), S(-325, 150), S(-328, 159), S(-216, 128), S(-126, 49), // - S(-46, -23), S(-98, 94), S(-53, 49), S(-103, 75), S(-89, 68), S(-48, 41), S(-26, 35), S(-58, 15), // - S(30, 15), S(8, 67), S(23, 69), S(19, 61), S(12, 42), S(10, 45), S(6, 50), S(12, 4), // - S(8, -3), S(51, 14), S(62, 41), S(76, 65), S(105, 51), S(46, 26), S(48, -10), S(-1, -11), // - S(50, -61), S(48, -4), S(81, 11), S(96, 30), S(81, 45), S(72, 22), S(22, 3), S(19, -39), // - S(63, -39), S(88, -27), S(102, 3), S(71, 28), S(67, 7), S(66, 14), S(75, -10), S(22, -24), // - S(35, -93), S(117, -66), S(75, -30), S(53, -14), S(36, -11), S(55, -52), S(53, -61), S(48, -69), // - S(54, -89), S(25, -26), S(29, -13), S(54, -39), S(37, -33), S(43, 4), S(52, -30), S(47, -66), // + S(-121, 15), S(-172, 99), S(-456, 192), S(-277, 86), S(-294, 130), S(-299, 141), S(-199, 110), S(-118, 47), // + S(-33, -26), S(-79, 91), S(-36, 47), S(-76, 70), S(-65, 64), S(-33, 41), S(-8, 32), S(-47, 8), // + S(36, 17), S(14, 67), S(35, 70), S(33, 60), S(26, 41), S(21, 47), S(13, 49), S(18, 7), // + S(15, -11), S(57, 17), S(68, 38), S(79, 59), S(107, 42), S(50, 27), S(53, -5), S(6, -13), // + S(51, -61), S(51, -4), S(83, 12), S(101, 31), S(84, 48), S(72, 23), S(26, 7), S(22, -40), // + S(64, -43), S(87, -28), S(101, 8), S(71, 38), S(69, 20), S(66, 21), S(74, -10), S(24, -27), // + S(35, -98), S(117, -54), S(75, -12), S(53, 2), S(36, 5), S(55, -41), S(53, -52), S(48, -73), // + S(52, -89), S(22, -17), S(26, -4), S(49, -29), S(33, -23), S(40, 13), S(50, -22), S(45, -63), // }; inline const std::array ROOK_PSQT = { - S(199, 83), S(229, 95), S(172, 123), S(164, 95), S(228, 53), S(185, 79), S(210, 84), S(188, 94), // - S(95, 161), S(166, 149), S(232, 113), S(173, 127), S(218, 112), S(176, 135), S(116, 160), S(105, 163), // - S(61, 153), S(198, 94), S(218, 83), S(205, 58), S(200, 84), S(138, 126), S(140, 127), S(73, 177), // - S(32, 117), S(107, 128), S(134, 99), S(112, 100), S(142, 87), S(101, 130), S(94, 138), S(26, 160), // - S(1, 44), S(78, 53), S(64, 73), S(39, 71), S(49, 81), S(37, 109), S(13, 109), S(-8, 107), // - S(10, -39), S(88, -19), S(75, 5), S(53, 8), S(65, 11), S(36, 47), S(41, 27), S(-8, 40), // - S(-77, -41), S(60, -86), S(59, -48), S(47, -14), S(53, -16), S(37, -3), S(27, -18), S(-2, -11), // - S(-16, -74), S(-2, -33), S(68, -51), S(76, -50), S(77, -41), S(56, -18), S(56, -32), S(37, -25), // + S(162, 87), S(202, 97), S(153, 123), S(141, 99), S(198, 61), S(157, 84), S(174, 91), S(144, 102), // + S(82, 135), S(147, 123), S(196, 93), S(147, 94), S(192, 75), S(142, 105), S(95, 131), S(89, 135), // + S(57, 135), S(180, 80), S(208, 60), S(187, 39), S(183, 63), S(127, 102), S(130, 108), S(72, 153), // + S(36, 102), S(101, 110), S(126, 81), S(106, 84), S(134, 72), S(96, 111), S(93, 119), S(30, 146), // + S(8, 43), S(78, 51), S(66, 68), S(41, 75), S(50, 84), S(38, 110), S(17, 109), S(-3, 107), // + S(21, -30), S(92, -9), S(80, 16), S(60, 22), S(71, 28), S(39, 63), S(47, 39), S(1, 50), // + S(-67, -26), S(68, -69), S(70, -29), S(57, 7), S(61, 4), S(46, 18), S(36, 0), S(8, 6), // + S(-4, -60), S(8, -16), S(80, -36), S(90, -35), S(89, -27), S(68, -3), S(67, -17), S(49, -11), // }; inline const std::array QUEEN_PSQT = { - S(27, 181), S(126, 120), S(31, 265), S(-35, 375), S(7, 328), S(41, 236), S(42, 154), S(-30, 215), // - S(40, 179), S(48, 252), S(10, 328), S(-133, 460), S(-77, 426), S(-25, 322), S(25, 180), S(7, 166), // - S(-6, 239), S(23, 289), S(-11, 369), S(-54, 412), S(-32, 397), S(17, 285), S(53, 172), S(48, 101), // - S(12, 144), S(1, 253), S(-32, 316), S(-54, 397), S(-35, 399), S(2, 260), S(46, 156), S(23, 119), // - S(5, 128), S(-5, 171), S(-21, 236), S(-42, 304), S(-27, 328), S(-3, 250), S(7, 167), S(33, 74), // - S(5, 28), S(28, 50), S(21, 137), S(-2, 161), S(8, 168), S(12, 198), S(34, 121), S(24, 76), // - S(-23, -130), S(6, -112), S(8, -28), S(31, 10), S(25, 56), S(30, 29), S(4, 61), S(20, 37), // - S(-34, -107), S(-18, -256), S(12, -257), S(28, -146), S(34, -64), S(36, -97), S(34, -67), S(7, -25), // + S(53, 162), S(142, 109), S(42, 262), S(-16, 365), S(24, 320), S(60, 224), S(58, 147), S(-8, 200), // + S(48, 173), S(59, 245), S(22, 323), S(-119, 458), S(-61, 419), S(-12, 320), S(38, 173), S(12, 163), // + S(-2, 237), S(30, 286), S(-3, 369), S(-44, 411), S(-23, 395), S(27, 280), S(60, 167), S(51, 100), // + S(15, 144), S(4, 255), S(-25, 319), S(-46, 399), S(-27, 401), S(8, 262), S(49, 159), S(24, 121), // + S(5, 137), S(-3, 177), S(-17, 242), S(-37, 312), S(-23, 337), S(-2, 259), S(9, 170), S(33, 78), // + S(5, 35), S(27, 62), S(21, 151), S(-3, 174), S(9, 176), S(11, 207), S(33, 127), S(22, 85), // + S(-25, -117), S(3, -95), S(8, -13), S(31, 23), S(26, 65), S(29, 40), S(4, 67), S(19, 43), // + S(-38, -97), S(-23, -241), S(7, -241), S(22, -129), S(30, -51), S(31, -83), S(29, -58), S(2, -16), // }; inline const std::array KING_PSQT = { - S(131, -581), S(470, 19), S(288, 174), S(19, 135), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(331, -160), S(346, 146), S(180, 201), S(12, 154), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(167, 70), S(187, 207), S(93, 225), S(-43, 183), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-4, 27), S(61, 156), S(-44, 191), S(-97, 199), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-121, 2), S(-44, 91), S(-108, 155), S(-182, 197), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-50, -35), S(8, 38), S(-75, 115), S(-122, 155), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(24, -92), S(28, -11), S(-34, 50), S(-104, 100), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-19, -199), S(4, -85), S(-76, -25), S(-69, -49), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(134, -595), S(481, 5), S(293, 166), S(16, 131), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(340, -171), S(351, 142), S(185, 197), S(8, 157), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(170, 69), S(195, 204), S(96, 224), S(-41, 182), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-3, 27), S(67, 154), S(-41, 192), S(-95, 199), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-118, 4), S(-40, 92), S(-104, 156), S(-176, 196), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-48, -34), S(11, 40), S(-71, 117), S(-121, 158), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(23, -90), S(29, -9), S(-33, 54), S(-106, 105), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-19, -203), S(4, -87), S(-76, -25), S(-71, -47), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; -inline const PParam KS_NO_QUEEN = S(-97, -440); +inline const PParam KS_NO_QUEEN = S(-97, -437); inline const std::array PT_INNER_RING_ATTACKS = { - S(8, -7), S(9, 10), S(10, 4), S(4, 0), S(3, -10), + S(8, -7), S(10, 9), S(10, 2), S(4, 0), S(3, -10), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(4, -7), S(4, 3), S(2, 2), S(3, -0), S(3, -2), + S(4, -7), S(4, 3), S(2, 2), S(3, -0), S(3, -1), }; inline const PParam KS_FLANK_ATTACK = S(3, -2); @@ -160,30 +158,30 @@ inline const PParam KS_FLANK_DOUBLE_ATTACK = S(2, -1); inline const PParam KS_FLANK_DOUBLE_DEFENSE = S(-2, 2); inline const std::array, 4> KING_SHELTER = {{ - {{ S(18, -20), S(-6, 4), S(-2, -9), S(9, -17), S(14, -30), S(8, -55), S(-2, -48), }}, - {{ S(1, 2), S(-22, 3), S(-17, 10), S(-10, 16), S(-7, 7), S(-8, -19), S(-19, -26), }}, - {{ S(-2, -1), S(-9, -8), S(-11, 19), S(-6, 18), S(-6, 10), S(-6, -18), S(-22, -39), }}, - {{ S(7, 6), S(-9, 15), S(-6, 35), S(-2, 40), S(-2, 35), S(6, 9), S(10, -20), }}, + {{ S(18, -19), S(-6, 5), S(-1, -9), S(10, -17), S(15, -30), S(9, -54), S(-2, -45), }}, + {{ S(2, 2), S(-21, 2), S(-16, 8), S(-9, 16), S(-6, 7), S(-7, -20), S(-18, -24), }}, + {{ S(-3, -2), S(-11, -9), S(-13, 17), S(-7, 16), S(-7, 9), S(-7, -20), S(-22, -39), }}, + {{ S(8, 7), S(-9, 15), S(-5, 35), S(-1, 41), S(-1, 37), S(6, 13), S(11, -18), }}, }}; inline const std::array BLOCKED_SHELTER_STORM = { - S(0, 0), S(0, 0), S(8, 27), S(-4, 3), S(-7, 10), S(-5, 27), S(2, 48), + S(0, 0), S(0, 0), S(9, 27), S(-4, 4), S(-7, 11), S(-5, 28), S(2, 48), }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(6, 10), S(-44, -146), S(-9, -52), S(0, 4), S(-1, 3), S(-5, 10), S(-4, 8), }}, - {{ S(10, -2), S(-25, -164), S(-5, -35), S(-2, 0), S(1, -4), S(-6, 3), S(3, 1), }}, - {{ S(1, 10), S(-10, -89), S(8, -21), S(0, 9), S(-3, 10), S(-9, 18), S(-5, 19), }}, - {{ S(2, 1), S(4, -64), S(-2, 30), S(-3, 26), S(-5, 10), S(-11, 12), S(-9, 20), }}, + {{ S(6, 11), S(-45, -157), S(-9, -53), S(0, 5), S(-1, 4), S(-5, 11), S(-4, 9), }}, + {{ S(10, -1), S(-26, -174), S(-5, -35), S(-2, 1), S(1, -3), S(-6, 4), S(3, 2), }}, + {{ S(1, 10), S(-10, -96), S(8, -21), S(1, 9), S(-2, 11), S(-9, 19), S(-5, 20), }}, + {{ S(2, 1), S(5, -70), S(-1, 28), S(-2, 26), S(-5, 10), S(-11, 12), S(-9, 21), }}, }}; inline TunableSigmoid<32> KING_SAFETY_ACTIVATION( - 1412, 886, -16, -6 + 1400, 893, -19, -7 ); inline VParam WINNABLE_PAWNS = V(-20); inline VParam WINNABLE_SYM = V(100); -inline VParam WINNABLE_ASYM = V(82); -inline VParam WINNABLE_PAWN_ENDGAME = V(104); -inline VParam WINNABLE_BIAS = V(-364); +inline VParam WINNABLE_ASYM = V(83); +inline VParam WINNABLE_PAWN_ENDGAME = V(102); +inline VParam WINNABLE_BIAS = V(-368); -// Epoch duration: 7.43877s +// Epoch duration: 7.9106s // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index 0636727c..3789f2bc 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -419,21 +419,8 @@ int main() { << std::endl; std::cout << std::endl; - std::cout << "inline const PParam KNIGHT_THREAT_BISHOP = " << KNIGHT_THREAT_BISHOP << ";" - << std::endl; - std::cout << "inline const PParam KNIGHT_THREAT_ROOK = " << KNIGHT_THREAT_ROOK << ";" - << std::endl; - std::cout << "inline const PParam KNIGHT_THREAT_QUEEN = " << KNIGHT_THREAT_QUEEN << ";" - << std::endl; - std::cout << std::endl; - - std::cout << "inline const PParam BISHOP_THREAT_KNIGHT = " << BISHOP_THREAT_KNIGHT << ";" - << std::endl; - std::cout << "inline const PParam BISHOP_THREAT_ROOK = " << BISHOP_THREAT_ROOK << ";" - << std::endl; - std::cout << "inline const PParam BISHOP_THREAT_QUEEN = " << BISHOP_THREAT_QUEEN << ";" - << std::endl; - std::cout << std::endl; + print_table("MINOR_THREAT", MINOR_THREAT); + print_table("ROOK_THREAT", ROOK_THREAT); print_table("BISHOP_PAWNS", BISHOP_PAWNS); std::cout << std::endl; diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 1d5f412f..92228187 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -404,6 +404,35 @@ 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); + + 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; + + weak = pos.board().get_color_bitboard(opp) & ~strongly_protected + & pos.attack_table(color).get_attacked_bitboard(); + + if ((defended | weak).any()) { + // Minor threats + b = (defended | weak) + & (pos.attacked_by(color, PieceType::Knight) | pos.attacked_by(color, PieceType::Bishop)); + for (Square sq : b) { + 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) { + PieceType pt = pos.piece_at(sq); + eval += ROOK_THREAT[static_cast(pt) - static_cast(PieceType::Pawn)]; + } + } + Bitboard pawn_attacks = pos.attacked_by(color, PieceType::Pawn); eval += PAWN_THREAT_KNIGHT * (pos.bitboard_for(opp, PieceType::Knight) & pawn_attacks).ipopcount(); @@ -413,22 +442,6 @@ PScore evaluate_threats(const Position& pos) { eval += PAWN_THREAT_QUEEN * (pos.bitboard_for(opp, PieceType::Queen) & pawn_attacks).ipopcount(); - Bitboard knight_attacks = pos.attacked_by(color, PieceType::Knight); - eval += KNIGHT_THREAT_BISHOP - * (pos.bitboard_for(opp, PieceType::Bishop) & knight_attacks).ipopcount(); - eval += - KNIGHT_THREAT_ROOK * (pos.bitboard_for(opp, PieceType::Rook) & knight_attacks).ipopcount(); - eval += - KNIGHT_THREAT_QUEEN * (pos.bitboard_for(opp, PieceType::Queen) & knight_attacks).ipopcount(); - - Bitboard bishop_attacks = pos.attacked_by(color, PieceType::Bishop); - eval += BISHOP_THREAT_KNIGHT - * (pos.bitboard_for(opp, PieceType::Knight) & bishop_attacks).ipopcount(); - eval += - BISHOP_THREAT_ROOK * (pos.bitboard_for(opp, PieceType::Rook) & bishop_attacks).ipopcount(); - eval += - BISHOP_THREAT_QUEEN * (pos.bitboard_for(opp, PieceType::Queen) & bishop_attacks).ipopcount(); - return eval; }