From ec6ff37fd9086068bffab09ace5058dbbb71c684 Mon Sep 17 00:00:00 2001 From: Hans Binderup Date: Fri, 16 May 2025 14:52:48 +0200 Subject: [PATCH 1/2] attack_gen: add discovered attack generation Inspired by Ethereal: https://github.com/AndyGrant/Ethereal/blob/0e47e9b67f345c75eb965d9fb3e2493b6a11d09a/src/attacks.c#L263 Bench 813471 Signed-off-by: Hans Binderup --- src/core/attack_generation.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/core/attack_generation.h b/src/core/attack_generation.h index af615e85..c3aa4d23 100644 --- a/src/core/attack_generation.h +++ b/src/core/attack_generation.h @@ -117,4 +117,25 @@ constexpr uint64_t getAllAttacks(const BitBoard& board) return attacks; } +/* computes discovered attacks based on the given position + * NOTE: queen attacks are not included - it's only rook and bishops */ +template +constexpr uint64_t getDiscoveredAttacks(const BitBoard& board, BoardPosition pos) +{ + constexpr Player opponent = nextPlayer(player); + constexpr Piece opponentRook = opponent == PlayerWhite ? WhiteRook : BlackRook; + constexpr Piece opponentBishop = opponent == PlayerWhite ? WhiteBishop : BlackBishop; + + const uint64_t occupancy = board.occupation[Both]; + + const uint64_t rookAttacks = movegen::getRookMoves(pos, occupancy); + const uint64_t bishopAttacks = movegen::getBishopMoves(pos, occupancy); + + const uint64_t rooks = board.pieces[opponentRook] & ~rookAttacks; + const uint64_t bishops = board.pieces[opponentBishop] & ~bishopAttacks; + + return (rooks & movegen::getRookMoves(pos, occupancy & ~rookAttacks)) + | (bishops & movegen::getBishopMoves(pos, occupancy & ~bishopAttacks)); +} + } From 6f3f5fcb6536048947990389ec28beba35463b3c Mon Sep 17 00:00:00 2001 From: Hans Binderup Date: Sun, 6 Jul 2025 13:43:10 +0200 Subject: [PATCH 2/2] terms: add queen discovered attack This commit adds discovered queen attacks to the evaluation terms. Bench 836728 Signed-off-by: Hans Binderup --- src/evaluation/generated/tuned_terms.h | 1195 ++++++++++++------------ src/evaluation/term_methods.h | 6 + src/evaluation/terms.h | 99 +- 3 files changed, 655 insertions(+), 645 deletions(-) diff --git a/src/evaluation/generated/tuned_terms.h b/src/evaluation/generated/tuned_terms.h index 5ad8e820..945770a1 100644 --- a/src/evaluation/generated/tuned_terms.h +++ b/src/evaluation/generated/tuned_terms.h @@ -3,13 +3,13 @@ /* =========================================================== Auto-Generated Tuning Parameters ----------------------------------------------------------- - Generated: 31/07/2025 at 18:34 + Generated: 16/09/2025 at 21:08 ----------------------------------------------------------- Parameters: ▸ K-value = 3.00 ▸ Learning Rate = 1.00 ▸ Epochs = 2500 - ▸ Error = 0.07334865 + ▸ Error = 0.07331488 ----------------------------------------------------------- See the 'tuner/' for more information on how to generate =========================================================== */ @@ -23,345 +23,348 @@ constexpr Terms s_terms = { TermScore(39, 33), }, .pieceValues = { - TermScore(55, 132), - TermScore(163, 193), - TermScore(137, 234), - TermScore(236, 330), - TermScore(503, 584), + TermScore(41, 81), + TermScore(183, 145), + TermScore(105, 112), + TermScore(226, 282), + TermScore(478, 499), TermScore(0, 0), }, .doublePawnPenalty = { - TermScore(-3, -11), + TermScore(-3, -10), }, .isolatedPawnPenalty = { - TermScore(-8, -10), + TermScore(-8, -9), }, .protectedPawnScore = { TermScore(0, 0), TermScore(0, 0), - TermScore(25, 16), - TermScore(15, 9), - TermScore(18, 21), - TermScore(37, 63), - TermScore(190, 46), + TermScore(27, 16), + TermScore(16, 10), + TermScore(19, 22), + TermScore(38, 62), + TermScore(188, 44), TermScore(0, 0), }, .passedPawnBonus = { TermScore(0, 0), - TermScore(-21, -14), - TermScore(-16, -2), - TermScore(-8, 22), - TermScore(33, 51), - TermScore(59, 87), - TermScore(89, 89), + TermScore(-21, -33), + TermScore(-15, -21), + TermScore(-7, 3), + TermScore(34, 32), + TermScore(63, 66), + TermScore(85, 119), TermScore(0, 0), }, .freePassedPawnBonus = { TermScore(0, 0), - TermScore(-0, 8), - TermScore(4, -5), - TermScore(-14, 17), - TermScore(-31, 52), - TermScore(-59, 147), - TermScore(-61, 208), + TermScore(1, 8), + TermScore(4, -4), + TermScore(-15, 18), + TermScore(-33, 52), + TermScore(-59, 149), + TermScore(-62, 209), TermScore(0, 0), }, .protectedPassedPawnBonus = { TermScore(0, 0), TermScore(19, -17), - TermScore(12, -2), - TermScore(14, 8), - TermScore(11, 22), - TermScore(8, 61), - TermScore(12, 151), + TermScore(12, -1), + TermScore(11, 9), + TermScore(10, 22), + TermScore(9, 62), + TermScore(15, 150), TermScore(0, 0), }, .passersOurKingDistance = { TermScore(0, 0), - TermScore(4, 44), - TermScore(-8, 30), - TermScore(-2, 7), - TermScore(3, -6), - TermScore(13, -9), - TermScore(33, -10), - TermScore(20, -14), + TermScore(-5, 51), + TermScore(-18, 37), + TermScore(-13, 14), + TermScore(-8, 0), + TermScore(3, -2), + TermScore(23, -4), + TermScore(9, -7), }, .passersTheirKingDistance = { TermScore(0, 0), - TermScore(-80, -3), - TermScore(-10, -28), - TermScore(-12, -6), - TermScore(-9, 8), - TermScore(-8, 18), - TermScore(-8, 25), - TermScore(-28, 22), + TermScore(-74, 13), + TermScore(-1, -13), + TermScore(-1, 9), + TermScore(1, 23), + TermScore(1, 33), + TermScore(2, 40), + TermScore(-19, 39), }, .passerCandidateDefended = { TermScore(0, 0), - TermScore(-31, 6), - TermScore(-13, 25), - TermScore(-1, 43), - TermScore(41, 83), - TermScore(56, 165), + TermScore(-31, 7), + TermScore(-12, 24), + TermScore(0, 44), + TermScore(44, 83), + TermScore(62, 160), TermScore(0, 0), TermScore(0, 0), }, .passerCandidateUndefended = { TermScore(0, 0), - TermScore(-61, 28), - TermScore(-33, 18), - TermScore(-1, 45), - TermScore(34, 75), - TermScore(73, 108), + TermScore(-62, 27), + TermScore(-32, 17), + TermScore(-1, 46), + TermScore(36, 72), + TermScore(76, 108), TermScore(0, 0), TermScore(0, 0), }, .pawnSquareRuleBonus = { - TermScore(-22, 219), + TermScore(-25, 218), }, .pawnShieldBonus = { TermScore(32, -16), - TermScore(23, -7), - TermScore(19, -10), + TermScore(24, -8), + TermScore(20, -10), }, .pawnStormScore = { - TermScore(-49, 14), + TermScore(-50, 13), TermScore(-6, -2), - TermScore(-12, -4), + TermScore(-11, -5), }, .pawnPhalanxScore = { - TermScore(8, 2), + TermScore(9, 3), }, .rookOpenFileBonus = { - TermScore(15, -1), + TermScore(15, -0), }, .rookSemiOpenFileBonus = { - TermScore(26, -1), + TermScore(27, -1), }, .rook7thRankBonus = { - TermScore(-44, 39), + TermScore(-39, 39), }, .queenOpenFileBonus = { - TermScore(-25, 19), + TermScore(-24, 17), }, .queenSemiOpenFileBonus = { - TermScore(7, 11), + TermScore(6, 11), }, .knightMobilityScore = { - TermScore(81, 78), - TermScore(104, 116), - TermScore(116, 141), - TermScore(122, 153), - TermScore(128, 162), - TermScore(133, 172), - TermScore(141, 169), - TermScore(147, 167), - TermScore(151, 155), + TermScore(84, 98), + TermScore(107, 138), + TermScore(119, 161), + TermScore(125, 172), + TermScore(132, 180), + TermScore(138, 191), + TermScore(146, 188), + TermScore(150, 185), + TermScore(154, 173), }, .knightOutpostScore = { - TermScore(14, -20), - TermScore(11, -20), - TermScore(38, 8), - TermScore(21, -5), + TermScore(13, -19), + TermScore(12, -20), + TermScore(40, 8), + TermScore(20, -6), }, .knightShelterBonus = { - TermScore(8, 15), + TermScore(9, 15), }, .bishopMobilityScore = { - TermScore(64, 27), - TermScore(76, 47), - TermScore(86, 63), - TermScore(93, 77), - TermScore(98, 84), - TermScore(102, 94), - TermScore(106, 97), - TermScore(109, 99), - TermScore(109, 103), - TermScore(116, 97), - TermScore(125, 91), - TermScore(131, 88), - TermScore(137, 97), - TermScore(148, 69), + TermScore(71, 66), + TermScore(84, 84), + TermScore(95, 101), + TermScore(102, 114), + TermScore(107, 122), + TermScore(111, 131), + TermScore(115, 133), + TermScore(119, 135), + TermScore(120, 138), + TermScore(125, 132), + TermScore(135, 126), + TermScore(139, 124), + TermScore(143, 134), + TermScore(151, 106), }, .bishopOutpostScore = { - TermScore(12, -12), - TermScore(-4, 8), - TermScore(53, -1), - TermScore(-13, 12), + TermScore(13, -12), + TermScore(-2, 8), + TermScore(53, 0), + TermScore(-11, 10), }, .bishopShelterBonus = { - TermScore(10, -2), + TermScore(11, -2), }, .badBishopScore = { - TermScore(135, 107), - TermScore(135, 107), - TermScore(133, 100), - TermScore(127, 93), - TermScore(121, 85), - TermScore(119, 74), - TermScore(113, 67), - TermScore(108, 51), - TermScore(89, 46), + TermScore(131, 139), + TermScore(131, 138), + TermScore(128, 131), + TermScore(122, 124), + TermScore(117, 117), + TermScore(115, 106), + TermScore(109, 98), + TermScore(104, 82), + TermScore(86, 79), }, .bishopLongDiagScore = { - TermScore(19, 9), + TermScore(20, 11), }, .rookMobilityScore = { - TermScore(145, 191), - TermScore(157, 221), - TermScore(161, 229), - TermScore(165, 236), - TermScore(162, 244), - TermScore(167, 251), - TermScore(169, 257), - TermScore(171, 261), - TermScore(172, 265), - TermScore(174, 269), - TermScore(174, 274), - TermScore(169, 281), - TermScore(172, 283), - TermScore(168, 284), - TermScore(161, 283), + TermScore(141, 211), + TermScore(153, 241), + TermScore(157, 250), + TermScore(162, 254), + TermScore(159, 263), + TermScore(165, 269), + TermScore(167, 275), + TermScore(168, 280), + TermScore(170, 283), + TermScore(172, 287), + TermScore(173, 291), + TermScore(169, 298), + TermScore(169, 301), + TermScore(164, 302), + TermScore(158, 301), }, .queenMobilityScore = { - TermScore(349, 152), - TermScore(348, 313), - TermScore(339, 392), - TermScore(344, 420), - TermScore(346, 444), - TermScore(351, 449), - TermScore(354, 467), - TermScore(355, 479), - TermScore(357, 487), - TermScore(361, 487), - TermScore(362, 492), - TermScore(364, 497), - TermScore(368, 493), - TermScore(366, 497), - TermScore(369, 496), - TermScore(373, 493), - TermScore(372, 498), - TermScore(377, 490), - TermScore(390, 476), - TermScore(402, 461), - TermScore(411, 453), - TermScore(468, 409), - TermScore(465, 401), - TermScore(482, 375), - TermScore(529, 364), - TermScore(444, 368), - TermScore(283, 459), - TermScore(223, 438), + TermScore(382, 119), + TermScore(377, 315), + TermScore(370, 397), + TermScore(374, 426), + TermScore(376, 449), + TermScore(380, 457), + TermScore(383, 475), + TermScore(384, 487), + TermScore(387, 494), + TermScore(390, 494), + TermScore(391, 500), + TermScore(394, 504), + TermScore(396, 503), + TermScore(394, 506), + TermScore(397, 505), + TermScore(402, 501), + TermScore(399, 508), + TermScore(404, 498), + TermScore(417, 486), + TermScore(432, 468), + TermScore(439, 460), + TermScore(497, 417), + TermScore(496, 408), + TermScore(512, 381), + TermScore(595, 345), + TermScore(543, 335), + TermScore(397, 414), + TermScore(329, 400), + }, + .queenDiscoveredAttackScore = { + TermScore(-27, 22), }, .kingVirtualMobilityScore = { - TermScore(16, -17), - TermScore(24, -18), - TermScore(18, -10), - TermScore(15, -14), - TermScore(12, -10), - TermScore(11, -10), - TermScore(11, -10), - TermScore(7, -9), - TermScore(4, -0), - TermScore(-4, 3), - TermScore(-9, 5), - TermScore(-17, 10), - TermScore(-20, 12), - TermScore(-29, 14), - TermScore(-35, 14), - TermScore(-43, 17), - TermScore(-54, 14), - TermScore(-57, 16), - TermScore(-54, 12), - TermScore(-37, 5), - TermScore(-29, 1), - TermScore(-25, -2), - TermScore(-38, -4), - TermScore(-5, -11), - TermScore(-24, -17), - TermScore(31, -24), - TermScore(30, -24), - TermScore(96, -32), + TermScore(3, -15), + TermScore(14, -21), + TermScore(8, -12), + TermScore(4, -13), + TermScore(1, -10), + TermScore(-1, -9), + TermScore(-2, -9), + TermScore(-5, -8), + TermScore(-8, 0), + TermScore(-16, 4), + TermScore(-21, 8), + TermScore(-29, 11), + TermScore(-34, 12), + TermScore(-41, 14), + TermScore(-46, 16), + TermScore(-54, 18), + TermScore(-65, 16), + TermScore(-68, 16), + TermScore(-63, 13), + TermScore(-44, 5), + TermScore(-40, 1), + TermScore(-31, -2), + TermScore(-49, -4), + TermScore(-12, -12), + TermScore(-33, -16), + TermScore(26, -25), + TermScore(25, -26), + TermScore(94, -33), }, .kingZone = { - TermScore(35, -31), - TermScore(41, -10), - TermScore(29, -4), - TermScore(8, -0), - TermScore(-33, 18), - TermScore(-79, 33), - TermScore(-126, 41), - TermScore(-181, 64), - TermScore(-278, 96), - TermScore(-343, 114), - TermScore(-364, 52), - TermScore(-216, -93), - TermScore(-167, -59), - TermScore(-45, -14), - TermScore(-3, -1), + TermScore(32, -21), + TermScore(38, -1), + TermScore(26, 4), + TermScore(5, 9), + TermScore(-36, 27), + TermScore(-82, 41), + TermScore(-131, 51), + TermScore(-184, 74), + TermScore(-280, 104), + TermScore(-358, 131), + TermScore(-410, 88), + TermScore(-271, -64), + TermScore(-171, -60), + TermScore(-50, -15), + TermScore(-4, -1), }, .kingAttackPawn = { - TermScore(-20, 48), + TermScore(-22, 48), }, .bishopPairScore = { - TermScore(24, 66), + TermScore(23, 67), }, .pawnAttacks = { - TermScore(13, -15), - TermScore(82, 33), - TermScore(76, 68), - TermScore(99, 30), - TermScore(92, -28), + TermScore(11, -14), + TermScore(82, 32), + TermScore(77, 65), + TermScore(101, 27), + TermScore(90, -26), }, .knightAttacks = { TermScore(-9, 14), - TermScore(0, 22), - TermScore(31, 39), - TermScore(80, 18), - TermScore(62, -26), + TermScore(0, 20), + TermScore(32, 39), + TermScore(82, 16), + TermScore(61, -26), }, .bishopAttacks = { TermScore(-9, 10), - TermScore(19, 26), + TermScore(18, 28), TermScore(0, 0), - TermScore(64, 29), - TermScore(84, 90), + TermScore(63, 28), + TermScore(84, 89), }, .rookAttacks = { - TermScore(-10, 12), - TermScore(1, 23), - TermScore(12, 20), - TermScore(-16, -17), - TermScore(91, 17), + TermScore(-13, 13), + TermScore(0, 25), + TermScore(11, 19), + TermScore(-23, -12), + TermScore(90, 19), }, .queenAttacks = { - TermScore(-9, 8), - TermScore(1, 9), + TermScore(-8, 7), + TermScore(-0, 9), TermScore(-1, 30), - TermScore(1, -6), - TermScore(2, -0), + TermScore(-2, -1), + TermScore(4, -1), }, .safeChecks = { - TermScore(16, 4), + TermScore(16, 5), TermScore(57, 11), - TermScore(33, 18), - TermScore(62, 0), - TermScore(21, 31), + TermScore(34, 17), + TermScore(63, -0), + TermScore(21, 32), }, .unsafeChecks = { TermScore(-6, 10), TermScore(15, -4), TermScore(19, 12), - TermScore(23, 3), - TermScore(9, 10), + TermScore(25, 2), + TermScore(9, 11), }, .pawnPushThreats = { TermScore(0, 0), - TermScore(18, 29), - TermScore(19, 22), - TermScore(30, 12), - TermScore(21, 13), - TermScore(80, 16), + TermScore(19, 26), + TermScore(19, 21), + TermScore(32, 11), + TermScore(22, 11), + TermScore(79, 15), }, .psqtPawns = { TermScore(0, 0), @@ -372,54 +375,54 @@ constexpr Terms s_terms = { TermScore(0, 0), TermScore(0, 0), TermScore(0, 0), - TermScore(10, 13), - TermScore(12, 9), - TermScore(23, 4), - TermScore(21, 5), - TermScore(30, 13), - TermScore(42, 6), - TermScore(49, -6), - TermScore(24, -6), - TermScore(3, 8), - TermScore(7, 5), - TermScore(20, -3), - TermScore(21, -1), - TermScore(28, -1), - TermScore(27, -0), - TermScore(36, -6), - TermScore(22, -9), - TermScore(15, 14), - TermScore(17, 16), - TermScore(32, -2), - TermScore(47, -10), - TermScore(49, -10), - TermScore(45, -4), - TermScore(33, 4), - TermScore(28, -3), - TermScore(22, 29), - TermScore(28, 15), - TermScore(33, 1), - TermScore(37, -14), - TermScore(55, -15), - TermScore(60, -9), - TermScore(44, 8), - TermScore(41, 6), - TermScore(43, 34), - TermScore(23, 39), - TermScore(52, 11), - TermScore(54, -12), - TermScore(65, -18), - TermScore(105, -6), - TermScore(62, 25), - TermScore(54, 30), - TermScore(74, 110), - TermScore(70, 89), - TermScore(44, 114), - TermScore(91, 65), - TermScore(68, 69), - TermScore(64, 78), - TermScore(-1, 104), - TermScore(-5, 122), + TermScore(21, 60), + TermScore(23, 56), + TermScore(35, 51), + TermScore(33, 49), + TermScore(42, 59), + TermScore(54, 53), + TermScore(59, 41), + TermScore(34, 40), + TermScore(13, 55), + TermScore(19, 52), + TermScore(31, 44), + TermScore(32, 45), + TermScore(39, 46), + TermScore(38, 45), + TermScore(47, 40), + TermScore(32, 37), + TermScore(27, 60), + TermScore(29, 62), + TermScore(44, 45), + TermScore(57, 36), + TermScore(61, 36), + TermScore(55, 42), + TermScore(44, 50), + TermScore(39, 43), + TermScore(32, 75), + TermScore(40, 61), + TermScore(45, 48), + TermScore(50, 32), + TermScore(68, 31), + TermScore(71, 37), + TermScore(55, 52), + TermScore(52, 51), + TermScore(53, 80), + TermScore(33, 86), + TermScore(62, 58), + TermScore(63, 35), + TermScore(76, 30), + TermScore(116, 41), + TermScore(71, 72), + TermScore(63, 77), + TermScore(91, 109), + TermScore(85, 89), + TermScore(64, 112), + TermScore(108, 64), + TermScore(88, 67), + TermScore(83, 78), + TermScore(17, 105), + TermScore(14, 117), TermScore(0, 0), TermScore(0, 0), TermScore(0, 0), @@ -430,334 +433,334 @@ constexpr Terms s_terms = { TermScore(0, 0), }, .psqtKnights = { - TermScore(31, 91), - TermScore(73, 84), - TermScore(79, 97), - TermScore(96, 107), - TermScore(102, 105), - TermScore(97, 90), - TermScore(78, 94), - TermScore(75, 86), - TermScore(69, 86), - TermScore(83, 96), - TermScore(97, 98), - TermScore(112, 102), - TermScore(115, 100), - TermScore(106, 98), - TermScore(100, 87), - TermScore(99, 102), - TermScore(78, 92), - TermScore(107, 99), - TermScore(116, 106), - TermScore(124, 121), - TermScore(135, 119), - TermScore(130, 100), - TermScore(127, 95), - TermScore(105, 100), - TermScore(100, 124), - TermScore(122, 118), - TermScore(135, 135), - TermScore(140, 132), - TermScore(140, 146), - TermScore(154, 124), - TermScore(141, 121), - TermScore(124, 120), - TermScore(105, 129), - TermScore(120, 125), - TermScore(141, 133), - TermScore(135, 147), - TermScore(159, 138), - TermScore(163, 135), - TermScore(149, 124), - TermScore(145, 119), - TermScore(87, 120), - TermScore(101, 121), - TermScore(108, 142), - TermScore(142, 135), - TermScore(155, 132), - TermScore(171, 110), - TermScore(112, 115), - TermScore(114, 104), - TermScore(71, 96), - TermScore(93, 106), - TermScore(100, 106), - TermScore(119, 109), - TermScore(115, 97), - TermScore(166, 84), - TermScore(106, 98), - TermScore(111, 72), - TermScore(-63, 40), - TermScore(-28, 88), - TermScore(16, 105), - TermScore(82, 87), - TermScore(107, 93), - TermScore(52, 68), - TermScore(-17, 90), - TermScore(-11, 12), + TermScore(12, 112), + TermScore(55, 107), + TermScore(60, 119), + TermScore(77, 128), + TermScore(84, 127), + TermScore(78, 114), + TermScore(60, 117), + TermScore(56, 112), + TermScore(49, 110), + TermScore(63, 119), + TermScore(77, 123), + TermScore(93, 126), + TermScore(96, 123), + TermScore(85, 122), + TermScore(81, 112), + TermScore(79, 126), + TermScore(58, 115), + TermScore(88, 122), + TermScore(97, 131), + TermScore(104, 145), + TermScore(115, 144), + TermScore(110, 124), + TermScore(106, 118), + TermScore(86, 121), + TermScore(81, 147), + TermScore(104, 140), + TermScore(115, 159), + TermScore(120, 155), + TermScore(121, 168), + TermScore(134, 147), + TermScore(122, 143), + TermScore(103, 144), + TermScore(86, 152), + TermScore(100, 147), + TermScore(121, 156), + TermScore(116, 168), + TermScore(139, 160), + TermScore(143, 156), + TermScore(128, 146), + TermScore(126, 142), + TermScore(70, 144), + TermScore(80, 144), + TermScore(89, 163), + TermScore(121, 158), + TermScore(134, 155), + TermScore(152, 131), + TermScore(92, 138), + TermScore(94, 128), + TermScore(51, 119), + TermScore(73, 130), + TermScore(82, 128), + TermScore(100, 133), + TermScore(95, 120), + TermScore(148, 107), + TermScore(88, 121), + TermScore(93, 95), + TermScore(-82, 64), + TermScore(-46, 111), + TermScore(-2, 128), + TermScore(62, 109), + TermScore(90, 114), + TermScore(33, 92), + TermScore(-30, 111), + TermScore(-30, 36), }, .psqtBishops = { - TermScore(52, 30), - TermScore(70, 53), - TermScore(54, 49), - TermScore(51, 48), - TermScore(65, 49), - TermScore(41, 58), - TermScore(67, 35), - TermScore(74, 4), - TermScore(57, 44), - TermScore(64, 33), - TermScore(73, 37), - TermScore(62, 54), - TermScore(71, 48), - TermScore(74, 46), - TermScore(77, 31), - TermScore(72, 27), - TermScore(51, 54), - TermScore(75, 59), - TermScore(69, 58), - TermScore(68, 64), - TermScore(75, 71), - TermScore(69, 50), - TermScore(82, 52), - TermScore(69, 36), - TermScore(58, 47), - TermScore(59, 71), - TermScore(67, 76), - TermScore(94, 79), - TermScore(88, 73), - TermScore(80, 70), - TermScore(65, 64), - TermScore(77, 39), - TermScore(54, 52), - TermScore(63, 69), - TermScore(74, 75), - TermScore(74, 90), - TermScore(92, 81), - TermScore(81, 73), - TermScore(76, 68), - TermScore(55, 53), - TermScore(61, 53), - TermScore(56, 67), - TermScore(37, 69), - TermScore(68, 71), - TermScore(61, 71), - TermScore(99, 70), - TermScore(73, 64), - TermScore(91, 53), - TermScore(52, 38), - TermScore(30, 48), - TermScore(57, 56), - TermScore(37, 62), - TermScore(63, 56), - TermScore(72, 49), - TermScore(42, 49), - TermScore(49, 38), - TermScore(3, 51), - TermScore(7, 65), - TermScore(3, 58), - TermScore(-33, 69), - TermScore(-34, 68), - TermScore(-6, 55), - TermScore(23, 55), - TermScore(-18, 41), + TermScore(78, 75), + TermScore(98, 95), + TermScore(82, 92), + TermScore(78, 92), + TermScore(91, 92), + TermScore(68, 103), + TermScore(95, 80), + TermScore(98, 51), + TermScore(82, 88), + TermScore(90, 76), + TermScore(99, 82), + TermScore(87, 98), + TermScore(96, 91), + TermScore(99, 87), + TermScore(101, 77), + TermScore(95, 72), + TermScore(76, 99), + TermScore(101, 104), + TermScore(94, 101), + TermScore(93, 110), + TermScore(100, 116), + TermScore(96, 93), + TermScore(106, 97), + TermScore(93, 80), + TermScore(83, 90), + TermScore(83, 115), + TermScore(92, 119), + TermScore(119, 122), + TermScore(114, 116), + TermScore(103, 115), + TermScore(91, 107), + TermScore(97, 87), + TermScore(76, 95), + TermScore(87, 113), + TermScore(99, 118), + TermScore(99, 134), + TermScore(116, 124), + TermScore(106, 116), + TermScore(97, 115), + TermScore(80, 98), + TermScore(84, 96), + TermScore(80, 110), + TermScore(61, 111), + TermScore(93, 114), + TermScore(86, 114), + TermScore(123, 111), + TermScore(96, 106), + TermScore(117, 96), + TermScore(78, 84), + TermScore(55, 93), + TermScore(81, 99), + TermScore(63, 107), + TermScore(85, 99), + TermScore(95, 94), + TermScore(65, 93), + TermScore(74, 83), + TermScore(30, 94), + TermScore(30, 111), + TermScore(28, 103), + TermScore(-7, 113), + TermScore(-9, 111), + TermScore(22, 98), + TermScore(47, 99), + TermScore(8, 84), }, .psqtRooks = { - TermScore(111, 232), - TermScore(116, 230), - TermScore(119, 237), - TermScore(126, 226), - TermScore(131, 220), - TermScore(123, 225), - TermScore(125, 220), - TermScore(110, 218), - TermScore(98, 225), - TermScore(103, 231), - TermScore(117, 231), - TermScore(119, 227), - TermScore(125, 219), - TermScore(124, 216), - TermScore(134, 208), - TermScore(110, 212), - TermScore(98, 240), - TermScore(100, 238), - TermScore(109, 233), - TermScore(111, 235), - TermScore(117, 229), - TermScore(128, 219), - TermScore(146, 207), - TermScore(132, 209), - TermScore(102, 248), - TermScore(112, 248), - TermScore(119, 244), - TermScore(125, 240), - TermScore(131, 237), - TermScore(125, 238), - TermScore(142, 231), - TermScore(123, 231), - TermScore(112, 255), - TermScore(131, 246), - TermScore(130, 251), - TermScore(134, 243), - TermScore(136, 233), - TermScore(160, 223), - TermScore(148, 235), - TermScore(136, 233), - TermScore(108, 253), - TermScore(137, 246), - TermScore(129, 247), - TermScore(128, 240), - TermScore(160, 229), - TermScore(168, 226), - TermScore(196, 226), - TermScore(149, 228), - TermScore(150, 228), - TermScore(153, 233), - TermScore(165, 235), - TermScore(187, 221), - TermScore(166, 222), - TermScore(191, 221), - TermScore(176, 223), - TermScore(186, 218), - TermScore(104, 260), - TermScore(102, 260), - TermScore(99, 268), - TermScore(89, 267), - TermScore(103, 257), - TermScore(132, 252), - TermScore(124, 257), - TermScore(129, 252), + TermScore(127, 256), + TermScore(131, 255), + TermScore(134, 261), + TermScore(141, 252), + TermScore(146, 243), + TermScore(138, 250), + TermScore(141, 245), + TermScore(126, 243), + TermScore(113, 250), + TermScore(118, 255), + TermScore(131, 255), + TermScore(133, 252), + TermScore(140, 245), + TermScore(139, 241), + TermScore(149, 231), + TermScore(125, 237), + TermScore(112, 265), + TermScore(118, 262), + TermScore(124, 259), + TermScore(126, 259), + TermScore(133, 253), + TermScore(144, 243), + TermScore(164, 229), + TermScore(146, 233), + TermScore(120, 272), + TermScore(127, 273), + TermScore(134, 269), + TermScore(139, 266), + TermScore(147, 262), + TermScore(142, 262), + TermScore(160, 253), + TermScore(141, 252), + TermScore(127, 280), + TermScore(147, 271), + TermScore(147, 275), + TermScore(149, 267), + TermScore(154, 257), + TermScore(178, 247), + TermScore(168, 259), + TermScore(156, 257), + TermScore(123, 277), + TermScore(154, 270), + TermScore(146, 272), + TermScore(145, 264), + TermScore(178, 254), + TermScore(184, 250), + TermScore(209, 250), + TermScore(165, 253), + TermScore(162, 253), + TermScore(168, 258), + TermScore(180, 260), + TermScore(201, 245), + TermScore(183, 247), + TermScore(201, 245), + TermScore(189, 250), + TermScore(196, 243), + TermScore(119, 284), + TermScore(117, 285), + TermScore(115, 292), + TermScore(107, 290), + TermScore(118, 282), + TermScore(148, 277), + TermScore(136, 283), + TermScore(142, 277), }, .psqtQueens = { - TermScore(284, 388), - TermScore(294, 378), - TermScore(298, 386), - TermScore(296, 399), - TermScore(303, 373), - TermScore(285, 370), - TermScore(300, 354), - TermScore(291, 363), - TermScore(295, 377), - TermScore(297, 384), - TermScore(302, 390), - TermScore(307, 398), - TermScore(307, 399), - TermScore(309, 369), - TermScore(317, 338), - TermScore(330, 320), - TermScore(290, 392), - TermScore(298, 412), - TermScore(297, 429), - TermScore(294, 428), - TermScore(299, 429), - TermScore(305, 420), - TermScore(316, 399), - TermScore(308, 392), - TermScore(295, 398), - TermScore(290, 439), - TermScore(295, 436), - TermScore(302, 448), - TermScore(311, 436), - TermScore(303, 432), - TermScore(313, 415), - TermScore(309, 419), - TermScore(289, 411), - TermScore(299, 416), - TermScore(296, 432), - TermScore(294, 445), - TermScore(297, 440), - TermScore(304, 426), - TermScore(312, 432), - TermScore(305, 411), - TermScore(290, 403), - TermScore(292, 400), - TermScore(292, 426), - TermScore(290, 435), - TermScore(290, 446), - TermScore(299, 429), - TermScore(311, 397), - TermScore(293, 412), - TermScore(285, 394), - TermScore(276, 402), - TermScore(270, 434), - TermScore(251, 449), - TermScore(221, 485), - TermScore(271, 443), - TermScore(280, 416), - TermScore(323, 410), - TermScore(233, 423), - TermScore(245, 411), - TermScore(262, 427), - TermScore(284, 420), - TermScore(253, 436), - TermScore(256, 432), - TermScore(312, 368), - TermScore(256, 413), + TermScore(310, 435), + TermScore(318, 426), + TermScore(322, 433), + TermScore(321, 445), + TermScore(329, 421), + TermScore(311, 417), + TermScore(320, 404), + TermScore(318, 408), + TermScore(321, 423), + TermScore(322, 430), + TermScore(326, 437), + TermScore(333, 445), + TermScore(332, 446), + TermScore(335, 416), + TermScore(341, 385), + TermScore(355, 367), + TermScore(325, 427), + TermScore(323, 455), + TermScore(323, 474), + TermScore(319, 475), + TermScore(324, 476), + TermScore(334, 461), + TermScore(341, 443), + TermScore(338, 430), + TermScore(332, 431), + TermScore(318, 482), + TermScore(320, 483), + TermScore(329, 492), + TermScore(338, 481), + TermScore(333, 474), + TermScore(341, 458), + TermScore(338, 461), + TermScore(317, 451), + TermScore(327, 461), + TermScore(322, 477), + TermScore(320, 489), + TermScore(325, 485), + TermScore(336, 466), + TermScore(339, 474), + TermScore(335, 451), + TermScore(321, 446), + TermScore(319, 445), + TermScore(318, 470), + TermScore(317, 480), + TermScore(318, 489), + TermScore(333, 469), + TermScore(337, 442), + TermScore(322, 452), + TermScore(311, 440), + TermScore(301, 448), + TermScore(296, 480), + TermScore(277, 494), + TermScore(250, 526), + TermScore(297, 487), + TermScore(307, 461), + TermScore(348, 456), + TermScore(265, 464), + TermScore(274, 453), + TermScore(294, 467), + TermScore(316, 459), + TermScore(284, 477), + TermScore(294, 467), + TermScore(343, 409), + TermScore(287, 454), }, .psqtKings = { - TermScore(14, -57), - TermScore(25, -27), - TermScore(9, -2), - TermScore(-67, 16), - TermScore(-22, -2), - TermScore(-52, 12), - TermScore(-3, -17), - TermScore(13, -59), - TermScore(49, -28), - TermScore(21, 3), - TermScore(15, 12), - TermScore(-22, 25), - TermScore(-19, 27), - TermScore(-11, 20), - TermScore(24, -0), - TermScore(23, -18), - TermScore(-16, -16), - TermScore(35, 0), - TermScore(6, 22), - TermScore(-7, 36), - TermScore(-4, 36), - TermScore(-0, 25), - TermScore(7, 9), - TermScore(-51, 1), - TermScore(-37, -14), - TermScore(15, 9), - TermScore(-3, 34), - TermScore(-57, 58), - TermScore(-32, 55), + TermScore(19, -60), + TermScore(31, -32), + TermScore(14, -5), + TermScore(-63, 14), + TermScore(-17, -6), + TermScore(-47, 9), + TermScore(3, -19), + TermScore(18, -60), + TermScore(54, -31), + TermScore(26, -1), + TermScore(19, 10), + TermScore(-17, 22), + TermScore(-14, 24), + TermScore(-7, 17), + TermScore(30, -5), + TermScore(27, -20), + TermScore(-11, -19), + TermScore(41, -2), + TermScore(10, 20), + TermScore(-2, 34), + TermScore(0, 34), + TermScore(5, 22), + TermScore(12, 6), + TermScore(-43, -1), + TermScore(-30, -17), + TermScore(19, 7), + TermScore(2, 33), + TermScore(-53, 56), + TermScore(-28, 52), + TermScore(14, 31), + TermScore(-7, 18), + TermScore(-109, 12), + TermScore(-20, -6), + TermScore(16, 19), + TermScore(-8, 41), + TermScore(-54, 61), + TermScore(-41, 60), + TermScore(-5, 50), + TermScore(-5, 32), + TermScore(-118, 26), + TermScore(-62, 8), + TermScore(73, 24), + TermScore(27, 41), + TermScore(-10, 56), + TermScore(52, 55), + TermScore(104, 45), + TermScore(21, 45), + TermScore(-5, 16), + TermScore(-63, -2), + TermScore(32, 19), TermScore(9, 33), - TermScore(-12, 21), - TermScore(-115, 15), - TermScore(-22, -1), - TermScore(15, 21), - TermScore(-11, 44), - TermScore(-56, 62), - TermScore(-45, 63), - TermScore(-11, 53), - TermScore(-11, 35), - TermScore(-127, 29), - TermScore(-66, 12), - TermScore(64, 25), - TermScore(26, 43), - TermScore(-12, 59), - TermScore(47, 59), - TermScore(102, 49), - TermScore(19, 48), - TermScore(-9, 20), - TermScore(-67, 1), - TermScore(27, 22), - TermScore(6, 35), - TermScore(140, 8), - TermScore(52, 32), - TermScore(40, 49), - TermScore(17, 46), - TermScore(-16, 22), - TermScore(87, -100), - TermScore(101, -64), - TermScore(78, -36), - TermScore(3, 3), - TermScore(19, -6), - TermScore(-17, 11), - TermScore(46, -0), - TermScore(101, -97), + TermScore(144, 4), + TermScore(55, 30), + TermScore(43, 47), + TermScore(23, 42), + TermScore(-12, 19), + TermScore(99, -103), + TermScore(105, -68), + TermScore(81, -40), + TermScore(7, 0), + TermScore(26, -11), + TermScore(-15, 9), + TermScore(51, -4), + TermScore(112, -100), }, }; } \ No newline at end of file diff --git a/src/evaluation/term_methods.h b/src/evaluation/term_methods.h index fa664ef9..98036a8f 100644 --- a/src/evaluation/term_methods.h +++ b/src/evaluation/term_methods.h @@ -1,5 +1,6 @@ #pragma once +#include "core/attack_generation.h" #include "core/bit_board.h" #include "core/mask_tables.h" #include "evaluation/generated/tuned_terms.h" @@ -407,6 +408,11 @@ static inline TermScore getQueenScore(const BitBoard& board, TermContext& ctx, u const int mobilityCount = std::popcount(moves & ~theirPawnAttacks); ADD_SCORE_INDEXED(queenMobilityScore, mobilityCount); + const uint64_t discoveredAttacks = attackgen::getDiscoveredAttacks(board, pos); + if (discoveredAttacks != 0) { + ADD_SCORE(queenDiscoveredAttackScore); + } + /* moves into opponent king zone -> update potential king attacks */ ctx.attacksToKingZone[opponent] += std::popcount(moves & ctx.kingZone[opponent]); ctx.pieceAttacks[player][Queen] |= moves; diff --git a/src/evaluation/terms.h b/src/evaluation/terms.h index b1c6628c..d984021e 100644 --- a/src/evaluation/terms.h +++ b/src/evaluation/terms.h @@ -7,55 +7,56 @@ namespace evaluation { template using WeightTable = std::array; -#define TERM_LIST(TERM) \ - TERM(tempoScore, 1) \ - TERM(pieceValues, 6) \ - TERM(doublePawnPenalty, 1) \ - TERM(isolatedPawnPenalty, 1) \ - TERM(protectedPawnScore, 8) \ - TERM(passedPawnBonus, 8) \ - TERM(freePassedPawnBonus, 8) \ - TERM(protectedPassedPawnBonus, 8) \ - TERM(passersOurKingDistance, 8) \ - TERM(passersTheirKingDistance, 8) \ - TERM(passerCandidateDefended, 8) \ - TERM(passerCandidateUndefended, 8) \ - TERM(pawnSquareRuleBonus, 1) \ - TERM(pawnShieldBonus, 3) \ - TERM(pawnStormScore, 3) \ - TERM(pawnPhalanxScore, 1) \ - TERM(rookOpenFileBonus, 1) \ - TERM(rookSemiOpenFileBonus, 1) \ - TERM(rook7thRankBonus, 1) \ - TERM(queenOpenFileBonus, 1) \ - TERM(queenSemiOpenFileBonus, 1) \ - TERM(knightMobilityScore, 9) \ - TERM(knightOutpostScore, 4) \ - TERM(knightShelterBonus, 1) \ - TERM(bishopMobilityScore, 14) \ - TERM(bishopOutpostScore, 4) \ - TERM(bishopShelterBonus, 1) \ - TERM(badBishopScore, 9) \ - TERM(bishopLongDiagScore, 1) \ - TERM(rookMobilityScore, 15) \ - TERM(queenMobilityScore, 28) \ - TERM(kingVirtualMobilityScore, 28) \ - TERM(kingZone, 15) \ - TERM(kingAttackPawn, 1) \ - TERM(bishopPairScore, 1) \ - TERM(pawnAttacks, 5) \ - TERM(knightAttacks, 5) \ - TERM(bishopAttacks, 5) \ - TERM(rookAttacks, 5) \ - TERM(queenAttacks, 5) \ - TERM(safeChecks, 5) \ - TERM(unsafeChecks, 5) \ - TERM(pawnPushThreats, 6) \ - TERM(psqtPawns, 64) \ - TERM(psqtKnights, 64) \ - TERM(psqtBishops, 64) \ - TERM(psqtRooks, 64) \ - TERM(psqtQueens, 64) \ +#define TERM_LIST(TERM) \ + TERM(tempoScore, 1) \ + TERM(pieceValues, 6) \ + TERM(doublePawnPenalty, 1) \ + TERM(isolatedPawnPenalty, 1) \ + TERM(protectedPawnScore, 8) \ + TERM(passedPawnBonus, 8) \ + TERM(freePassedPawnBonus, 8) \ + TERM(protectedPassedPawnBonus, 8) \ + TERM(passersOurKingDistance, 8) \ + TERM(passersTheirKingDistance, 8) \ + TERM(passerCandidateDefended, 8) \ + TERM(passerCandidateUndefended, 8) \ + TERM(pawnSquareRuleBonus, 1) \ + TERM(pawnShieldBonus, 3) \ + TERM(pawnStormScore, 3) \ + TERM(pawnPhalanxScore, 1) \ + TERM(rookOpenFileBonus, 1) \ + TERM(rookSemiOpenFileBonus, 1) \ + TERM(rook7thRankBonus, 1) \ + TERM(queenOpenFileBonus, 1) \ + TERM(queenSemiOpenFileBonus, 1) \ + TERM(knightMobilityScore, 9) \ + TERM(knightOutpostScore, 4) \ + TERM(knightShelterBonus, 1) \ + TERM(bishopMobilityScore, 14) \ + TERM(bishopOutpostScore, 4) \ + TERM(bishopShelterBonus, 1) \ + TERM(badBishopScore, 9) \ + TERM(bishopLongDiagScore, 1) \ + TERM(rookMobilityScore, 15) \ + TERM(queenMobilityScore, 28) \ + TERM(queenDiscoveredAttackScore, 1) \ + TERM(kingVirtualMobilityScore, 28) \ + TERM(kingZone, 15) \ + TERM(kingAttackPawn, 1) \ + TERM(bishopPairScore, 1) \ + TERM(pawnAttacks, 5) \ + TERM(knightAttacks, 5) \ + TERM(bishopAttacks, 5) \ + TERM(rookAttacks, 5) \ + TERM(queenAttacks, 5) \ + TERM(safeChecks, 5) \ + TERM(unsafeChecks, 5) \ + TERM(pawnPushThreats, 6) \ + TERM(psqtPawns, 64) \ + TERM(psqtKnights, 64) \ + TERM(psqtBishops, 64) \ + TERM(psqtRooks, 64) \ + TERM(psqtQueens, 64) \ TERM(psqtKings, 64) #define WEIGHT(name, size) \