From eb01710937d652d677a2ff7c0848dca81cb1b846 Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Tue, 13 Jan 2026 22:01:22 +0100 Subject: [PATCH 1/6] tentative --- src/bitboard.hpp | 31 +++++++++++++++++++++++++++++++ src/eval_constants.hpp | 10 ++++++++-- src/evaltune_main.cpp | 16 ++++++++++++++++ src/evaluation.cpp | 30 ++++++++++++++++++++++++++++++ src/square.hpp | 4 ++++ 5 files changed, 89 insertions(+), 2 deletions(-) diff --git a/src/bitboard.hpp b/src/bitboard.hpp index 69774b7a..345d74ca 100644 --- a/src/bitboard.hpp +++ b/src/bitboard.hpp @@ -78,6 +78,10 @@ struct Bitboard { return Square{static_cast(std::countr_zero(m_raw))}; } + [[nodiscard]] bool any() const { + return static_cast(m_raw); + } + // Rank closest to player [[nodiscard]] u8 front_rank(Color color) const { i32 color_shift = color == Color::White ? 0 : 56; @@ -107,6 +111,15 @@ struct Bitboard { } } + [[nodiscard]] Square frontmost_square(Color color) const { + return color == Color::White ? lsb() : msb(); + } + + [[nodiscard]] static Bitboard forward_ranks(Color c, Square sq){ + return c == Color::White ? ~rank_mask(0) << (8 * sq.relative_rank(c)) + : ~rank_mask(7) >> (8 * sq.relative_rank(c)); + } + [[nodiscard]] Bitboard shift_relative(Color perspective, Direction dir) const { if (perspective == Color::Black) { dir = static_cast((static_cast(dir) + 4) % 8); @@ -215,6 +228,24 @@ struct Bitboard { friend constexpr Bitboard& operator^=(Bitboard& a, Bitboard b) { return a = a ^ b; } + friend constexpr Bitboard& operator>>=(Bitboard& a, i32 shift) { + return a = a >> shift; + } + friend constexpr Bitboard& operator<<=(Bitboard& a, i32 shift) { + return a = a << shift; + } + + // ostream support for debugging + friend std::ostream& operator<<(std::ostream& os, const Bitboard& bb) { + for (i32 rank = 7; rank >= 0; rank--) { + for (i32 file = 0; file < 8; file++) { + Square sq = Square::from_file_and_rank(file, rank); + os << (bb.is_set(sq) ? '1' : '.') << ' '; + } + os << std::endl; + } + return os; + } private: u64 m_raw = 0; diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index f6177930..3f92c2ff 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -162,6 +162,12 @@ inline const std::array KING_PSQT = { S(-189, -17), S(-18, -21), S(-107, 11), S(-110, -4), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; -// Epoch duration: 4.78127s -// clang-format on +inline const std::array, 4> KING_SHELTER = {{ + { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, + { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, + { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, + { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, +}}; +// Epoch duration: 8.68854s + // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index d4d3a660..85dfde68 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -385,6 +385,22 @@ int main() { printPsqtArray("QUEEN_PSQT", QUEEN_PSQT); printPsqtArray("KING_PSQT", KING_PSQT); std::cout << std::endl; + + auto print2DArray = [](const std::string& name, const auto& arr) { + std::cout << "inline const std::array, " + << arr.size() << "> " << name << " = {" << std::endl; + for (const auto& subarr : arr) { + std::cout << " {"; + for (const auto& val : subarr) { + std::cout << " " << val << ","; + } + std::cout << " }," << std::endl; + } + std::cout << "};" << std::endl; + }; + + print2DArray("KING_SHELTER", KING_SHELTER); + #endif const auto end = time::Clock::now(); std::cout << "// Epoch duration: " << time::cast(end - start).count() diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 296f2866..6a01d752 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -104,6 +104,33 @@ std::array, 2> passed_pawn_spans = []() { return passed_pawn_masks; }(); +template +PScore king_shelter(const Position& pos) { + constexpr Color opp = ~color; + + Square king_square = pos.king_sq(color); + + Bitboard b = ~Bitboard::forward_ranks(opp, king_square); // Squares ahead or on king's rank + Bitboard our_pawns = pos.bitboard_for(color, PieceType::Pawn) & b; + + PScore score = PSCORE_ZERO; + + i32 shelter_center = std::clamp(king_square.file(), 1,6); + + for (i32 offset = -1; offset <= 1; offset++) { + i32 file = shelter_center + offset; + Bitboard file_bb = Bitboard::file_mask(file); + + b = our_pawns & file_bb; + i32 our_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; + + i32 edge_idx = std::min(file, 7 - file); + score += KING_SHELTER[static_cast(edge_idx)][static_cast(our_rank)]; + } + + return score; +} + template PScore evaluate_pawns(const Position& pos) { constexpr i32 RANK_2 = 1; @@ -303,6 +330,9 @@ PScore evaluate_king_safety(const Position& pos) { eval += PT_OUTER_RING_ATTACKS[static_cast(pt) - static_cast(PieceType::Pawn)] * outer.ipopcount(); } + + eval += king_shelter(pos); + return eval; } diff --git a/src/square.hpp b/src/square.hpp index ea59f5c7..8bbfd2ac 100644 --- a/src/square.hpp +++ b/src/square.hpp @@ -54,6 +54,10 @@ struct Square { return c == Color::White ? *this : flip_vertical(); } + [[nodiscard]] constexpr i32 relative_rank(Color c) const { + return c == Color::White ? rank() : 7 - rank(); + } + [[nodiscard]] constexpr std::tuple to_file_and_rank() const { return {file(), rank()}; } From a7cf5da4c84b921dec22accf04cec3c22306194b Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Wed, 14 Jan 2026 09:09:04 +0100 Subject: [PATCH 2/6] oopsie! Bench: 14020706 --- src/eval_constants.hpp | 174 ++++++++++++++++++++--------------------- src/evaltune_main.cpp | 8 +- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 3f92c2ff..8362aaa0 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,91 +5,91 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(171, 156); -inline const PParam KNIGHT_MAT = S(517, 316); -inline const PParam BISHOP_MAT = S(473, 272); -inline const PParam ROOK_MAT = S(546, 411); -inline const PParam QUEEN_MAT = S(1082, 561); +inline const PParam PAWN_MAT = S(162, 164); +inline const PParam KNIGHT_MAT = S(515, 314); +inline const PParam BISHOP_MAT = S(453, 266); +inline const PParam ROOK_MAT = S(545, 405); +inline const PParam QUEEN_MAT = S(1078, 555); inline const PParam TEMPO_VAL = S(63, 14); inline const PParam BISHOP_PAIR_VAL = S(77, 163); -inline const PParam ROOK_OPEN_VAL = S(114, -26); -inline const PParam ROOK_SEMIOPEN_VAL = S(44, 17); +inline const PParam ROOK_OPEN_VAL = S(114, -27); +inline const PParam ROOK_SEMIOPEN_VAL = S(42, 17); -inline const PParam DOUBLED_PAWN_VAL = S(-32, -75); +inline const PParam DOUBLED_PAWN_VAL = S(-15, -84); -inline const PParam POTENTIAL_CHECKER_VAL = S(-69, -10); +inline const PParam POTENTIAL_CHECKER_VAL = S(-66, -11); inline const PParam OUTPOST_KNIGHT_VAL = S(51, 40); -inline const PParam OUTPOST_BISHOP_VAL = S(61, 26); +inline const PParam OUTPOST_BISHOP_VAL = S(60, 26); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(49, 4); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(58, -25); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(48, 4); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(57, -25); inline const PParam PAWN_PUSH_THREAT_ROOK = S(38, 34); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(70, -53); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(69, -51); inline const std::array PAWN_PHALANX = { - S(22, 12), S(57, 33), S(73, 70), S(181, 153), S(481, 225), S(668, 679), + S(20, 10), S(52, 36), S(71, 70), S(175, 156), S(479, 223), S(661, 672), }; inline const std::array DEFENDED_PAWN = { - S(70, 38), S(60, 33), S(73, 65), S(175, 117), S(593, -10), + S(66, 39), S(56, 36), S(70, 66), S(172, 118), S(590, -10), }; inline const std::array PASSED_PAWN = { - S(-80, -96), S(-80, -74), S(-54, 7), S(28, 76), S(102, 197), S(302, 277), + S(-77, -97), S(-79, -75), S(-54, 7), S(24, 79), S(100, 201), S(303, 275), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(43, -38), S(38, -6), S(29, 20), S(26, 66), S(97, 129), S(211, 209), + S(42, -37), S(37, -6), S(30, 18), S(28, 63), S(96, 131), S(204, 216), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(10, -33), S(-1, 11), S(-4, -19), S(-7, -40), S(-14, -89), S(-268, -106), + S(10, -32), S(2, 6), S(-2, -23), S(-5, -41), S(-16, -87), S(-270, -103), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-3, 114), S(-16, 90), S(-9, 33), S(-1, 5), S(11, 6), S(57, 2), S(19, -6), + S(0, 0), S(-8, 116), S(-16, 89), S(-5, 31), S(-0, 4), S(11, 3), S(58, -1), S(19, -9), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-300, -9), S(-35, 23), S(-13, 50), S(34, 60), S(39, 80), S(48, 87), S(19, 84), + S(0, 0), S(-309, -8), S(-33, 20), S(-9, 48), S(32, 62), S(37, 82), S(46, 87), S(18, 83), }; inline const std::array KNIGHT_MOBILITY = { - S(15, -60), S(114, 94), S(171, 164), S(209, 193), S(255, 203), S(284, 235), S(320, 228), S(358, 229), S(404, 169), + S(13, -68), S(111, 86), S(166, 157), S(202, 188), S(249, 197), S(277, 229), S(314, 221), S(352, 223), S(398, 162), }; inline const std::array BISHOP_MOBILITY = { - S(-18, -122), S(53, 37), S(115, 79), S(143, 127), S(172, 156), S(190, 176), S(199, 192), S(217, 197), S(229, 208), S(249, 197), S(272, 187), S(331, 143), S(336, 142), S(407, 96), + S(-16, -123), S(54, 37), S(117, 78), S(145, 126), S(174, 155), S(192, 175), S(201, 191), S(220, 196), S(231, 206), S(251, 195), S(274, 185), S(333, 141), S(339, 138), S(407, 96), }; inline const std::array ROOK_MOBILITY = { - S(275, 98), S(198, 259), S(226, 279), S(243, 282), S(256, 292), S(262, 304), S(270, 312), S(281, 311), S(288, 316), S(299, 318), S(311, 317), S(321, 316), S(327, 315), S(347, 295), S(455, 200), + S(282, 97), S(202, 261), S(231, 279), S(249, 283), S(264, 292), S(269, 304), S(276, 312), S(287, 311), S(295, 317), S(305, 318), S(319, 317), S(329, 315), S(335, 315), S(355, 294), S(463, 199), }; inline const std::array QUEEN_MOBILITY = { - S(457, 121), S(522, 233), S(570, 270), S(598, 364), S(609, 423), S(626, 454), S(630, 496), S(639, 501), S(642, 525), S(648, 534), S(651, 548), S(656, 551), S(668, 539), S(673, 542), S(677, 538), S(680, 534), S(686, 526), S(685, 526), S(697, 505), S(716, 487), S(731, 466), S(747, 433), S(775, 413), S(895, 301), S(946, 248), S(940, 241), S(861, 287), S(958, 217), + S(465, 123), S(531, 234), S(581, 267), S(609, 363), S(620, 422), S(637, 452), S(641, 496), S(649, 501), S(652, 525), S(658, 535), S(662, 548), S(667, 552), S(679, 540), S(684, 542), S(688, 539), S(692, 534), S(697, 527), S(697, 526), S(709, 505), S(729, 486), S(744, 466), S(760, 433), S(789, 412), S(909, 299), S(958, 247), S(954, 238), S(877, 283), S(974, 214), }; inline const std::array KING_MOBILITY = { - S(657, -331), S(243, -187), S(120, -84), S(81, -36), S(29, -21), S(-27, 4), S(-74, 40), S(-127, 68), S(-165, 56), + S(600, -318), S(196, -173), S(90, -77), S(57, -29), S(19, -15), S(-26, 8), S(-58, 38), S(-96, 61), S(-123, 48), }; inline const std::array KNIGHT_KING_RING = { - S(225, 227), S(344, 180), S(447, 118), + S(238, 227), S(354, 182), S(451, 123), }; inline const std::array BISHOP_KING_RING = { - S(457, 372), S(281, 235), S(163, 70), + S(492, 374), S(304, 235), S(167, 71), }; inline const std::array ROOK_KING_RING = { - S(319, 321), S(446, 313), S(488, 321), S(589, 372), S(746, 331), + S(318, 319), S(446, 313), S(484, 322), S(592, 369), S(754, 327), }; inline const std::array QUEEN_KING_RING = { - S(874, 747), S(589, 609), S(332, 459), S(142, 254), S(81, -12), S(15, -297), + S(875, 743), S(592, 607), S(333, 460), S(140, 258), S(81, -7), S(21, -296), }; inline const std::array PT_INNER_RING_ATTACKS = { - S(-119, 61), S(27, -18), S(-216, -128), S(56, 38), S(-242, -154), + S(-100, 52), S(27, -17), S(-230, -129), S(62, 36), S(-241, -153), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(-28, 22), S(-21, 20), S(-20, 15), S(-15, 9), S(-21, -12), + S(-26, 21), S(-20, 19), S(-18, 14), S(-16, 9), S(-22, -12), }; -inline const PParam PAWN_THREAT_KNIGHT = S(245, 60); -inline const PParam PAWN_THREAT_BISHOP = S(217, 116); -inline const PParam PAWN_THREAT_ROOK = S(203, 100); -inline const PParam PAWN_THREAT_QUEEN = S(186, -45); +inline const PParam PAWN_THREAT_KNIGHT = S(243, 61); +inline const PParam PAWN_THREAT_BISHOP = S(218, 115); +inline const PParam PAWN_THREAT_ROOK = S(204, 99); +inline const PParam PAWN_THREAT_QUEEN = S(185, -44); inline const PParam KNIGHT_THREAT_BISHOP = S(118, 73); inline const PParam KNIGHT_THREAT_ROOK = S(256, 15); @@ -97,76 +97,76 @@ inline const PParam KNIGHT_THREAT_QUEEN = S(155, -18); inline const PParam BISHOP_THREAT_KNIGHT = S(115, 38); inline const PParam BISHOP_THREAT_ROOK = S(238, 72); -inline const PParam BISHOP_THREAT_QUEEN = S(199, 52); +inline const PParam BISHOP_THREAT_QUEEN = S(199, 51); inline const std::array BISHOP_PAWNS = { - S(3, -20), S(-3, -8), S(-4, -18), S(-9, -25), S(-15, -32), S(-21, -35), S(-24, -46), S(-29, -47), S(-37, -52), + S(4, -20), S(-3, -8), S(-4, -18), S(-9, -25), S(-15, -31), S(-22, -34), S(-25, -45), S(-30, -46), S(-38, -50), }; inline const std::array PAWN_PSQT = { - S(294, 277), S(196, 348), S(309, 313), S(292, 250), S(343, 180), S(249, 255), S(203, 279), S(309, 230), // - S(158, 173), S(209, 218), S(199, 165), S(163, 130), S(146, 100), S(116, 140), S(95, 179), S(60, 185), // - S(100, 138), S(99, 157), S(112, 116), S(98, 108), S(83, 96), S(53, 110), S(24, 143), S(9, 161), // - S(87, 93), S(100, 123), S(105, 96), S(87, 99), S(58, 93), S(40, 100), S(-9, 142), S(-23, 128), // - S(85, 68), S(145, 73), S(91, 119), S(75, 119), S(43, 113), S(12, 112), S(-12, 127), S(-28, 113), // - S(83, 75), S(209, 84), S(150, 129), S(104, 146), S(73, 131), S(49, 117), S(29, 136), S(-9, 129), // + S(277, 298), S(163, 359), S(302, 305), S(298, 226), S(352, 163), S(261, 246), S(211, 273), S(322, 222), // + S(114, 191), S(165, 246), S(177, 198), S(169, 113), S(154, 85), S(130, 126), S(110, 166), S(71, 176), // + S(68, 153), S(82, 174), S(103, 198), S(98, 94), S(87, 85), S(65, 99), S(37, 133), S(20, 153), // + S(50, 109), S(74, 144), S(89, 182), S(80, 89), S(58, 85), S(51, 91), S(3, 133), S(-13, 122), // + S(39, 88), S(99, 102), S(67, 157), S(75, 111), S(48, 105), S(25, 102), S(3, 116), S(-17, 106), // + S(73, 86), S(183, 86), S(154, 119), S(102, 130), S(75, 118), S(60, 108), S(42, 127), S(1, 122), // }; inline const std::array KNIGHT_PSQT = { - S(-288, -49), S(-224, 184), S(-461, 436), S(89, 146), S(17, 153), S(-113, 131), S(-375, 194), S(-343, 30), // - S(107, 119), S(159, 120), S(239, 81), S(214, 116), S(211, 128), S(145, 121), S(127, 129), S(101, 103), // - S(176, 90), S(189, 137), S(246, 151), S(207, 169), S(181, 174), S(124, 184), S(135, 123), S(105, 118), // - S(235, 131), S(219, 149), S(222, 175), S(197, 208), S(215, 196), S(188, 181), S(189, 137), S(186, 112), // - S(228, 116), S(263, 106), S(239, 150), S(225, 173), S(211, 171), S(213, 160), S(214, 109), S(176, 110), // - S(173, 90), S(203, 87), S(185, 124), S(206, 148), S(208, 144), S(157, 132), S(157, 96), S(123, 79), // - S(184, 84), S(199, 70), S(180, 85), S(178, 106), S(165, 112), S(145, 67), S(150, 79), S(110, 15), // - S(127, 62), S(161, 120), S(186, 73), S(203, 61), S(188, 80), S(138, 61), S(128, 96), S(78, 34), // + S(-293, -43), S(-220, 185), S(-458, 436), S(94, 147), S(22, 153), S(-110, 131), S(-376, 197), S(-348, 36), // + S(113, 118), S(161, 121), S(245, 80), S(225, 112), S(219, 126), S(151, 120), S(130, 130), S(103, 104), // + S(182, 89), S(195, 136), S(255, 148), S(216, 166), S(189, 172), S(129, 183), S(138, 124), S(112, 117), // + S(237, 133), S(225, 149), S(229, 173), S(203, 207), S(221, 195), S(192, 182), S(193, 138), S(188, 115), // + S(229, 118), S(266, 107), S(242, 150), S(229, 174), S(214, 173), S(217, 160), S(216, 111), S(178, 112), // + S(173, 93), S(207, 88), S(188, 124), S(209, 149), S(210, 146), S(159, 134), S(159, 99), S(125, 81), // + S(187, 83), S(208, 69), S(182, 88), S(180, 109), S(169, 113), S(147, 70), S(152, 82), S(110, 18), // + S(127, 64), S(163, 121), S(188, 74), S(207, 62), S(189, 82), S(140, 63), S(133, 96), S(77, 38), // }; inline const std::array BISHOP_PSQT = { - S(-34, 184), S(-69, 168), S(-360, 241), S(-223, 208), S(-190, 217), S(-291, 252), S(-105, 219), S(-30, 194), // - S(76, 114), S(24, 174), S(58, 132), S(-6, 180), S(-21, 186), S(38, 161), S(67, 144), S(50, 134), // - S(143, 126), S(170, 124), S(166, 156), S(128, 149), S(99, 146), S(97, 155), S(143, 132), S(117, 113), // - S(122, 107), S(142, 125), S(162, 138), S(142, 176), S(171, 163), S(111, 147), S(118, 121), S(89, 112), // - S(139, 81), S(149, 109), S(159, 128), S(166, 150), S(155, 158), S(120, 148), S(84, 129), S(90, 96), // - S(157, 86), S(192, 92), S(210, 107), S(158, 144), S(150, 130), S(156, 126), S(165, 102), S(104, 108), // - S(141, 38), S(225, 56), S(188, 69), S(155, 96), S(137, 106), S(145, 79), S(146, 85), S(135, 45), // - S(147, 48), S(133, 97), S(138, 120), S(157, 76), S(165, 64), S(156, 123), S(151, 79), S(130, 71), // + S(-44, 184), S(-78, 168), S(-372, 241), S(-234, 208), S(-199, 217), S(-299, 250), S(-115, 218), S(-39, 194), // + S(73, 109), S(16, 173), S(49, 132), S(-15, 179), S(-27, 183), S(28, 160), S(58, 143), S(43, 132), // + S(129, 127), S(162, 123), S(158, 154), S(120, 147), S(89, 145), S(88, 154), S(132, 132), S(107, 113), // + S(112, 107), S(135, 124), S(156, 135), S(134, 174), S(164, 161), S(101, 146), S(111, 120), S(80, 112), // + S(131, 80), S(142, 107), S(151, 126), S(160, 148), S(146, 157), S(112, 147), S(75, 128), S(83, 95), // + S(151, 82), S(186, 88), S(203, 105), S(150, 143), S(142, 129), S(148, 125), S(156, 101), S(95, 107), // + S(137, 34), S(220, 54), S(179, 69), S(148, 96), S(129, 106), S(138, 77), S(138, 84), S(127, 44), // + S(140, 45), S(124, 94), S(132, 120), S(150, 76), S(156, 63), S(149, 122), S(144, 77), S(121, 70), // }; inline const std::array ROOK_PSQT = { - S(399, 246), S(435, 254), S(396, 278), S(406, 261), S(402, 260), S(351, 271), S(365, 273), S(362, 276), // - S(293, 302), S(356, 292), S(447, 266), S(382, 289), S(385, 290), S(345, 295), S(264, 324), S(262, 324), // - S(280, 288), S(407, 255), S(439, 247), S(423, 245), S(383, 254), S(335, 279), S(336, 280), S(256, 313), // - S(258, 275), S(334, 275), S(374, 259), S(354, 256), S(349, 264), S(307, 284), S(288, 285), S(228, 298), // - S(216, 230), S(287, 240), S(267, 258), S(265, 245), S(255, 255), S(241, 282), S(210, 273), S(185, 270), // - S(184, 204), S(248, 201), S(252, 224), S(238, 216), S(243, 210), S(214, 247), S(205, 225), S(164, 239), // - S(96, 220), S(213, 163), S(235, 184), S(243, 187), S(235, 188), S(222, 202), S(200, 185), S(172, 201), // - S(146, 208), S(163, 229), S(236, 189), S(263, 173), S(243, 191), S(231, 206), S(216, 198), S(197, 222), // + S(404, 242), S(439, 250), S(397, 275), S(412, 256), S(406, 257), S(350, 270), S(367, 271), S(365, 274), // + S(301, 296), S(361, 287), S(452, 261), S(388, 284), S(389, 286), S(346, 293), S(265, 322), S(265, 320), // + S(278, 286), S(408, 251), S(442, 243), S(421, 244), S(381, 254), S(333, 278), S(332, 280), S(252, 313), // + S(255, 274), S(335, 273), S(377, 255), S(350, 256), S(347, 264), S(306, 283), S(284, 285), S(223, 299), // + S(215, 228), S(289, 237), S(273, 253), S(261, 245), S(252, 254), S(239, 281), S(208, 272), S(180, 271), // + S(186, 200), S(251, 197), S(254, 220), S(236, 215), S(240, 210), S(213, 246), S(202, 226), S(159, 240), // + S(103, 215), S(221, 157), S(236, 182), S(241, 187), S(231, 189), S(219, 202), S(196, 186), S(168, 202), // + S(150, 204), S(163, 226), S(235, 188), S(258, 173), S(239, 192), S(227, 207), S(212, 199), S(193, 222), // }; inline const std::array QUEEN_PSQT = { - S(462, 412), S(540, 347), S(530, 380), S(448, 484), S(462, 447), S(451, 442), S(488, 372), S(389, 447), // - S(484, 441), S(427, 545), S(432, 557), S(289, 620), S(295, 613), S(364, 567), S(393, 484), S(414, 461), // - S(422, 497), S(514, 485), S(440, 557), S(407, 576), S(360, 579), S(377, 532), S(452, 435), S(428, 406), // - S(498, 395), S(494, 464), S(454, 508), S(430, 559), S(419, 562), S(421, 496), S(475, 402), S(473, 369), // - S(481, 398), S(491, 417), S(466, 467), S(438, 511), S(441, 507), S(438, 469), S(458, 398), S(469, 349), // - S(469, 318), S(503, 350), S(504, 420), S(469, 401), S(465, 393), S(472, 415), S(477, 358), S(463, 332), // - S(450, 199), S(493, 152), S(496, 242), S(508, 290), S(490, 318), S(490, 286), S(460, 336), S(461, 322), // - S(408, 240), S(458, 41), S(459, 67), S(487, 158), S(495, 233), S(496, 185), S(485, 217), S(437, 266), // + S(466, 400), S(544, 336), S(530, 371), S(447, 477), S(460, 440), S(451, 433), S(488, 364), S(388, 440), // + S(490, 429), S(432, 533), S(433, 548), S(292, 610), S(296, 604), S(363, 560), S(392, 476), S(415, 452), // + S(419, 491), S(511, 480), S(440, 549), S(408, 567), S(359, 571), S(375, 525), S(448, 429), S(425, 400), // + S(493, 391), S(490, 460), S(452, 502), S(426, 555), S(416, 557), S(417, 491), S(470, 398), S(468, 366), // + S(476, 393), S(488, 411), S(465, 460), S(434, 507), S(437, 503), S(433, 465), S(453, 393), S(464, 344), // + S(466, 314), S(501, 346), S(502, 413), S(465, 396), S(461, 389), S(468, 410), S(472, 354), S(458, 326), // + S(450, 189), S(495, 149), S(492, 240), S(503, 285), S(485, 315), S(485, 284), S(455, 333), S(455, 319), // + S(407, 227), S(456, 31), S(456, 62), S(483, 154), S(490, 229), S(492, 179), S(481, 212), S(432, 262), // }; inline const std::array KING_PSQT = { - S(-603, -152), S(-132, 154), S(58, 72), S(-134, 40), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(23, -42), S(174, 59), S(173, 68), S(141, -12), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-42, 87), S(210, 62), S(228, 54), S(123, 19), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-293, 102), S(132, 36), S(63, 46), S(56, 34), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-298, 68), S(74, 2), S(94, 5), S(10, 39), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-153, 36), S(160, -34), S(119, -7), S(90, 12), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-4, -25), S(180, -56), S(134, -28), S(62, 7), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-189, -17), S(-18, -21), S(-107, 11), S(-110, -4), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-478, -214), S(-21, 90), S(123, 31), S(-98, 21), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(134, -108), S(239, 6), S(188, 37), S(134, -23), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(55, 30), S(261, 18), S(227, 28), S(116, 8), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-207, 59), S(170, 6), S(55, 30), S(38, 28), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-227, 45), S(99, -6), S(86, 1), S(-20, 40), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-113, 34), S(168, -24), S(103, -0), S(58, 14), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(4, -11), S(158, -31), S(98, -20), S(28, 5), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-150, -11), S(-8, -8), S(-98, 3), S(-100, -26), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; inline const std::array, 4> KING_SHELTER = {{ - { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, - { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, - { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, - { S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0), S(0,0) }, + {{ S(-67, 30), S(-2, -28), S(50, -41), S(27, -30), S(30, -33), S(50, -40), S(-8, -18), }}, + {{ S(-51, 25), S(31, -6), S(57, -47), S(19, -31), S(20, -27), S(55, -42), S(33, 2), }}, + {{ S(-20, 25), S(6, 19), S(28, -38), S(16, -86), S(22, -84), S(35, -35), S(3, 23), }}, + {{ S(-30, 13), S(20, 18), S(27, -1), S(24, 6), S(25, 9), S(19, 7), S(31, 33), }}, }}; // Epoch duration: 8.68854s // clang-format on diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index 85dfde68..ec8eef0e 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -388,15 +388,15 @@ int main() { auto print2DArray = [](const std::string& name, const auto& arr) { std::cout << "inline const std::array, " - << arr.size() << "> " << name << " = {" << std::endl; + << arr.size() << "> " << name << " = {{" << std::endl; for (const auto& subarr : arr) { - std::cout << " {"; + std::cout << " {{"; for (const auto& val : subarr) { std::cout << " " << val << ","; } - std::cout << " }," << std::endl; + std::cout << " }}," << std::endl; } - std::cout << "};" << std::endl; + std::cout << "}};" << std::endl; }; print2DArray("KING_SHELTER", KING_SHELTER); From 58b425e6052b81e71e74c6942788218a90169310 Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Wed, 14 Jan 2026 19:57:55 +0100 Subject: [PATCH 3/6] is storm different? --- src/eval_constants.hpp | 2 +- src/evaltune_main.cpp | 2 +- src/evaluation.cpp | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 8362aaa0..12b1e8bb 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -162,7 +162,7 @@ inline const std::array KING_PSQT = { S(-150, -11), S(-8, -8), S(-98, 3), S(-100, -26), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; -inline const std::array, 4> KING_SHELTER = {{ +inline const std::array, 4> SHELTER_STORM = {{ {{ S(-67, 30), S(-2, -28), S(50, -41), S(27, -30), S(30, -33), S(50, -40), S(-8, -18), }}, {{ S(-51, 25), S(31, -6), S(57, -47), S(19, -31), S(20, -27), S(55, -42), S(33, 2), }}, {{ S(-20, 25), S(6, 19), S(28, -38), S(16, -86), S(22, -84), S(35, -35), S(3, 23), }}, diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index ec8eef0e..af17b5ef 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -399,7 +399,7 @@ int main() { std::cout << "}};" << std::endl; }; - print2DArray("KING_SHELTER", KING_SHELTER); + print2DArray("SHELTER_STORM", SHELTER_STORM); #endif const auto end = time::Clock::now(); diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 6a01d752..b4c76d2e 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -111,7 +111,7 @@ PScore king_shelter(const Position& pos) { Square king_square = pos.king_sq(color); Bitboard b = ~Bitboard::forward_ranks(opp, king_square); // Squares ahead or on king's rank - Bitboard our_pawns = pos.bitboard_for(color, PieceType::Pawn) & b; + Bitboard their_pawns = pos.bitboard_for(opp, PieceType::Pawn) & b; PScore score = PSCORE_ZERO; @@ -121,11 +121,11 @@ PScore king_shelter(const Position& pos) { i32 file = shelter_center + offset; Bitboard file_bb = Bitboard::file_mask(file); - b = our_pawns & file_bb; - i32 our_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; + b = their_pawns & file_bb; + i32 their_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; i32 edge_idx = std::min(file, 7 - file); - score += KING_SHELTER[static_cast(edge_idx)][static_cast(our_rank)]; + score += SHELTER_STORM[static_cast(edge_idx)][static_cast(their_rank)]; } return score; From 57ba82c2bff1bb48db5bac7fdad47b3cac7eda9e Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Wed, 14 Jan 2026 22:32:25 +0100 Subject: [PATCH 4/6] Bench: 13901516 --- src/bitboard.hpp | 2 +- src/eval_constants.hpp | 180 ++++++++++++++++++++--------------------- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/src/bitboard.hpp b/src/bitboard.hpp index 345d74ca..c2552cba 100644 --- a/src/bitboard.hpp +++ b/src/bitboard.hpp @@ -112,7 +112,7 @@ struct Bitboard { } [[nodiscard]] Square frontmost_square(Color color) const { - return color == Color::White ? lsb() : msb(); + return color == Color::White ? msb() : lsb(); } [[nodiscard]] static Bitboard forward_ranks(Color c, Square sq){ diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 12b1e8bb..5ea21673 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,169 +5,169 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(162, 164); -inline const PParam KNIGHT_MAT = S(515, 314); -inline const PParam BISHOP_MAT = S(453, 266); -inline const PParam ROOK_MAT = S(545, 405); -inline const PParam QUEEN_MAT = S(1078, 555); +inline const PParam PAWN_MAT = S(174, 156); +inline const PParam KNIGHT_MAT = S(510, 311); +inline const PParam BISHOP_MAT = S(458, 270); +inline const PParam ROOK_MAT = S(542, 410); +inline const PParam QUEEN_MAT = S(1077, 560); inline const PParam TEMPO_VAL = S(63, 14); inline const PParam BISHOP_PAIR_VAL = S(77, 163); -inline const PParam ROOK_OPEN_VAL = S(114, -27); -inline const PParam ROOK_SEMIOPEN_VAL = S(42, 17); +inline const PParam ROOK_OPEN_VAL = S(114, -26); +inline const PParam ROOK_SEMIOPEN_VAL = S(44, 18); -inline const PParam DOUBLED_PAWN_VAL = S(-15, -84); +inline const PParam DOUBLED_PAWN_VAL = S(-38, -72); -inline const PParam POTENTIAL_CHECKER_VAL = S(-66, -11); +inline const PParam POTENTIAL_CHECKER_VAL = S(-69, -10); inline const PParam OUTPOST_KNIGHT_VAL = S(51, 40); inline const PParam OUTPOST_BISHOP_VAL = S(60, 26); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(48, 4); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(57, -25); -inline const PParam PAWN_PUSH_THREAT_ROOK = S(38, 34); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(69, -51); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(49, 4); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(58, -25); +inline const PParam PAWN_PUSH_THREAT_ROOK = S(37, 35); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(70, -52); inline const std::array PAWN_PHALANX = { - S(20, 10), S(52, 36), S(71, 70), S(175, 156), S(479, 223), S(661, 672), + S(23, 10), S(59, 32), S(74, 69), S(183, 152), S(483, 221), S(677, 677), }; inline const std::array DEFENDED_PAWN = { - S(66, 39), S(56, 36), S(70, 66), S(172, 118), S(590, -10), + S(72, 36), S(61, 33), S(75, 64), S(179, 115), S(598, -14), }; inline const std::array PASSED_PAWN = { - S(-77, -97), S(-79, -75), S(-54, 7), S(24, 79), S(100, 201), S(303, 275), + S(-83, -95), S(-81, -75), S(-55, 5), S(29, 73), S(105, 195), S(304, 275), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(42, -37), S(37, -6), S(30, 18), S(28, 63), S(96, 131), S(204, 216), + S(42, -36), S(36, -6), S(29, 18), S(26, 64), S(95, 131), S(209, 213), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(10, -32), S(2, 6), S(-2, -23), S(-5, -41), S(-16, -87), S(-270, -103), + S(10, -33), S(-2, 10), S(-3, -19), S(-7, -40), S(-13, -90), S(-266, -110), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-8, 116), S(-16, 89), S(-5, 31), S(-0, 4), S(11, 3), S(58, -1), S(19, -9), + S(0, 0), S(18, 108), S(-9, 88), S(-11, 35), S(-7, 8), S(3, 9), S(46, 5), S(8, -3), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-309, -8), S(-33, 20), S(-9, 48), S(32, 62), S(37, 82), S(46, 87), S(18, 83), + S(0, 0), S(-294, -10), S(-33, 24), S(-10, 49), S(37, 60), S(40, 79), S(48, 85), S(20, 81), }; inline const std::array KNIGHT_MOBILITY = { - S(13, -68), S(111, 86), S(166, 157), S(202, 188), S(249, 197), S(277, 229), S(314, 221), S(352, 223), S(398, 162), + S(11, -59), S(110, 94), S(167, 164), S(204, 193), S(251, 203), S(280, 236), S(316, 228), S(353, 230), S(399, 169), }; inline const std::array BISHOP_MOBILITY = { - S(-16, -123), S(54, 37), S(117, 78), S(145, 126), S(174, 155), S(192, 175), S(201, 191), S(220, 196), S(231, 206), S(251, 195), S(274, 185), S(333, 141), S(339, 138), S(407, 96), + S(-14, -122), S(55, 36), S(117, 79), S(144, 127), S(173, 156), S(191, 176), S(199, 193), S(218, 197), S(229, 209), S(249, 198), S(272, 187), S(331, 144), S(337, 142), S(406, 97), }; inline const std::array ROOK_MOBILITY = { - S(282, 97), S(202, 261), S(231, 279), S(249, 283), S(264, 292), S(269, 304), S(276, 312), S(287, 311), S(295, 317), S(305, 318), S(319, 317), S(329, 315), S(335, 315), S(355, 294), S(463, 199), + S(279, 101), S(203, 261), S(231, 280), S(249, 284), S(262, 294), S(268, 306), S(276, 313), S(286, 312), S(294, 318), S(305, 319), S(318, 318), S(327, 317), S(334, 317), S(353, 296), S(461, 201), }; inline const std::array QUEEN_MOBILITY = { - S(465, 123), S(531, 234), S(581, 267), S(609, 363), S(620, 422), S(637, 452), S(641, 496), S(649, 501), S(652, 525), S(658, 535), S(662, 548), S(667, 552), S(679, 540), S(684, 542), S(688, 539), S(692, 534), S(697, 527), S(697, 526), S(709, 505), S(729, 486), S(744, 466), S(760, 433), S(789, 412), S(909, 299), S(958, 247), S(954, 238), S(877, 283), S(974, 214), + S(458, 111), S(522, 233), S(571, 268), S(599, 362), S(611, 422), S(627, 454), S(630, 497), S(639, 501), S(642, 526), S(648, 535), S(652, 549), S(657, 552), S(669, 541), S(674, 543), S(678, 540), S(682, 535), S(687, 528), S(686, 527), S(698, 507), S(717, 488), S(732, 468), S(748, 435), S(776, 415), S(895, 303), S(947, 250), S(942, 242), S(858, 290), S(962, 217), }; inline const std::array KING_MOBILITY = { - S(600, -318), S(196, -173), S(90, -77), S(57, -29), S(19, -15), S(-26, 8), S(-58, 38), S(-96, 61), S(-123, 48), + S(657, -328), S(242, -191), S(120, -88), S(81, -37), S(31, -21), S(-24, 5), S(-72, 42), S(-124, 68), S(-160, 55), }; inline const std::array KNIGHT_KING_RING = { - S(238, 227), S(354, 182), S(451, 123), + S(233, 231), S(352, 184), S(456, 122), }; inline const std::array BISHOP_KING_RING = { - S(492, 374), S(304, 235), S(167, 71), + S(471, 377), S(289, 238), S(163, 72), }; inline const std::array ROOK_KING_RING = { - S(318, 319), S(446, 313), S(484, 322), S(592, 369), S(754, 327), + S(316, 320), S(439, 315), S(484, 321), S(591, 369), S(751, 328), }; inline const std::array QUEEN_KING_RING = { - S(875, 743), S(592, 607), S(333, 460), S(140, 258), S(81, -7), S(21, -296), + S(876, 748), S(590, 611), S(333, 463), S(143, 258), S(85, -7), S(18, -292), }; inline const std::array PT_INNER_RING_ATTACKS = { - S(-100, 52), S(27, -17), S(-230, -129), S(62, 36), S(-241, -153), + S(-119, 60), S(27, -18), S(-223, -130), S(60, 36), S(-242, -153), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(-26, 21), S(-20, 19), S(-18, 14), S(-16, 9), S(-22, -12), + S(-28, 20), S(-21, 20), S(-21, 16), S(-15, 9), S(-21, -13), }; -inline const PParam PAWN_THREAT_KNIGHT = S(243, 61); -inline const PParam PAWN_THREAT_BISHOP = S(218, 115); -inline const PParam PAWN_THREAT_ROOK = S(204, 99); -inline const PParam PAWN_THREAT_QUEEN = S(185, -44); +inline const PParam PAWN_THREAT_KNIGHT = S(245, 60); +inline const PParam PAWN_THREAT_BISHOP = S(218, 116); +inline const PParam PAWN_THREAT_ROOK = S(203, 99); +inline const PParam PAWN_THREAT_QUEEN = S(187, -44); inline const PParam KNIGHT_THREAT_BISHOP = S(118, 73); inline const PParam KNIGHT_THREAT_ROOK = S(256, 15); -inline const PParam KNIGHT_THREAT_QUEEN = S(155, -18); +inline const PParam KNIGHT_THREAT_QUEEN = S(156, -19); inline const PParam BISHOP_THREAT_KNIGHT = S(115, 38); inline const PParam BISHOP_THREAT_ROOK = S(238, 72); -inline const PParam BISHOP_THREAT_QUEEN = S(199, 51); +inline const PParam BISHOP_THREAT_QUEEN = S(199, 52); inline const std::array BISHOP_PAWNS = { - S(4, -20), S(-3, -8), S(-4, -18), S(-9, -25), S(-15, -31), S(-22, -34), S(-25, -45), S(-30, -46), S(-38, -50), + S(3, -20), S(-3, -8), S(-3, -18), S(-9, -25), S(-14, -32), S(-21, -35), S(-24, -46), S(-29, -47), S(-37, -52), }; inline const std::array PAWN_PSQT = { - S(277, 298), S(163, 359), S(302, 305), S(298, 226), S(352, 163), S(261, 246), S(211, 273), S(322, 222), // - S(114, 191), S(165, 246), S(177, 198), S(169, 113), S(154, 85), S(130, 126), S(110, 166), S(71, 176), // - S(68, 153), S(82, 174), S(103, 198), S(98, 94), S(87, 85), S(65, 99), S(37, 133), S(20, 153), // - S(50, 109), S(74, 144), S(89, 182), S(80, 89), S(58, 85), S(51, 91), S(3, 133), S(-13, 122), // - S(39, 88), S(99, 102), S(67, 157), S(75, 111), S(48, 105), S(25, 102), S(3, 116), S(-17, 106), // - S(73, 86), S(183, 86), S(154, 119), S(102, 130), S(75, 118), S(60, 108), S(42, 127), S(1, 122), // + S(306, 277), S(197, 345), S(313, 306), S(292, 249), S(340, 180), S(249, 251), S(200, 278), S(311, 231), // + S(159, 173), S(217, 215), S(193, 167), S(164, 125), S(146, 98), S(114, 136), S(95, 175), S(66, 184), // + S(108, 140), S(105, 164), S(103, 128), S(91, 103), S(80, 89), S(46, 114), S(29, 145), S(15, 161), // + S(95, 95), S(108, 131), S(95, 109), S(82, 94), S(55, 85), S(36, 107), S(-2, 145), S(-14, 129), // + S(89, 67), S(155, 70), S(87, 122), S(77, 118), S(47, 111), S(10, 114), S(-6, 127), S(-21, 113), // + S(91, 75), S(210, 79), S(154, 118), S(105, 146), S(75, 131), S(50, 110), S(30, 133), S(-0, 128), // }; inline const std::array KNIGHT_PSQT = { - S(-293, -43), S(-220, 185), S(-458, 436), S(94, 147), S(22, 153), S(-110, 131), S(-376, 197), S(-348, 36), // - S(113, 118), S(161, 121), S(245, 80), S(225, 112), S(219, 126), S(151, 120), S(130, 130), S(103, 104), // - S(182, 89), S(195, 136), S(255, 148), S(216, 166), S(189, 172), S(129, 183), S(138, 124), S(112, 117), // - S(237, 133), S(225, 149), S(229, 173), S(203, 207), S(221, 195), S(192, 182), S(193, 138), S(188, 115), // - S(229, 118), S(266, 107), S(242, 150), S(229, 174), S(214, 173), S(217, 160), S(216, 111), S(178, 112), // - S(173, 93), S(207, 88), S(188, 124), S(209, 149), S(210, 146), S(159, 134), S(159, 99), S(125, 81), // - S(187, 83), S(208, 69), S(182, 88), S(180, 109), S(169, 113), S(147, 70), S(152, 82), S(110, 18), // - S(127, 64), S(163, 121), S(188, 74), S(207, 62), S(189, 82), S(140, 63), S(133, 96), S(77, 38), // + S(-284, -49), S(-219, 185), S(-456, 437), S(89, 149), S(16, 155), S(-116, 135), S(-374, 196), S(-343, 33), // + S(111, 121), S(162, 120), S(243, 81), S(215, 118), S(210, 130), S(143, 124), S(125, 132), S(96, 106), // + S(180, 91), S(197, 135), S(249, 152), S(210, 168), S(181, 178), S(125, 185), S(133, 126), S(105, 121), // + S(240, 132), S(222, 151), S(226, 176), S(199, 208), S(217, 198), S(187, 183), S(188, 139), S(185, 115), // + S(230, 118), S(267, 108), S(242, 152), S(226, 175), S(213, 172), S(213, 161), S(213, 110), S(175, 112), // + S(176, 92), S(204, 90), S(187, 126), S(207, 150), S(209, 144), S(157, 134), S(157, 99), S(123, 82), // + S(185, 84), S(200, 72), S(181, 87), S(179, 108), S(166, 114), S(145, 70), S(151, 81), S(110, 18), // + S(127, 63), S(163, 121), S(187, 74), S(205, 61), S(189, 81), S(139, 63), S(129, 98), S(78, 37), // }; inline const std::array BISHOP_PSQT = { - S(-44, 184), S(-78, 168), S(-372, 241), S(-234, 208), S(-199, 217), S(-299, 250), S(-115, 218), S(-39, 194), // - S(73, 109), S(16, 173), S(49, 132), S(-15, 179), S(-27, 183), S(28, 160), S(58, 143), S(43, 132), // - S(129, 127), S(162, 123), S(158, 154), S(120, 147), S(89, 145), S(88, 154), S(132, 132), S(107, 113), // - S(112, 107), S(135, 124), S(156, 135), S(134, 174), S(164, 161), S(101, 146), S(111, 120), S(80, 112), // - S(131, 80), S(142, 107), S(151, 126), S(160, 148), S(146, 157), S(112, 147), S(75, 128), S(83, 95), // - S(151, 82), S(186, 88), S(203, 105), S(150, 143), S(142, 129), S(148, 125), S(156, 101), S(95, 107), // - S(137, 34), S(220, 54), S(179, 69), S(148, 96), S(129, 106), S(138, 77), S(138, 84), S(127, 44), // - S(140, 45), S(124, 94), S(132, 120), S(150, 76), S(156, 63), S(149, 122), S(144, 77), S(121, 70), // + S(-36, 183), S(-70, 166), S(-364, 241), S(-228, 208), S(-195, 218), S(-293, 251), S(-109, 219), S(-29, 193), // + S(77, 112), S(23, 172), S(58, 130), S(-12, 180), S(-26, 186), S(33, 161), S(62, 144), S(41, 135), // + S(141, 125), S(172, 121), S(163, 155), S(125, 147), S(94, 147), S(93, 155), S(135, 133), S(114, 111), // + S(124, 104), S(140, 125), S(161, 136), S(140, 175), S(168, 163), S(105, 147), S(113, 120), S(81, 113), // + S(139, 81), S(148, 109), S(156, 128), S(163, 150), S(151, 156), S(116, 147), S(77, 129), S(84, 96), // + S(154, 86), S(190, 91), S(207, 107), S(155, 144), S(146, 127), S(151, 126), S(161, 101), S(99, 108), // + S(139, 35), S(223, 55), S(186, 68), S(152, 95), S(134, 106), S(141, 78), S(142, 85), S(132, 45), // + S(142, 46), S(128, 96), S(136, 118), S(155, 75), S(161, 63), S(153, 123), S(147, 78), S(126, 71), // }; inline const std::array ROOK_PSQT = { - S(404, 242), S(439, 250), S(397, 275), S(412, 256), S(406, 257), S(350, 270), S(367, 271), S(365, 274), // - S(301, 296), S(361, 287), S(452, 261), S(388, 284), S(389, 286), S(346, 293), S(265, 322), S(265, 320), // - S(278, 286), S(408, 251), S(442, 243), S(421, 244), S(381, 254), S(333, 278), S(332, 280), S(252, 313), // - S(255, 274), S(335, 273), S(377, 255), S(350, 256), S(347, 264), S(306, 283), S(284, 285), S(223, 299), // - S(215, 228), S(289, 237), S(273, 253), S(261, 245), S(252, 254), S(239, 281), S(208, 272), S(180, 271), // - S(186, 200), S(251, 197), S(254, 220), S(236, 215), S(240, 210), S(213, 246), S(202, 226), S(159, 240), // - S(103, 215), S(221, 157), S(236, 182), S(241, 187), S(231, 189), S(219, 202), S(196, 186), S(168, 202), // - S(150, 204), S(163, 226), S(235, 188), S(258, 173), S(239, 192), S(227, 207), S(212, 199), S(193, 222), // + S(406, 241), S(441, 249), S(398, 274), S(405, 258), S(401, 257), S(348, 269), S(363, 271), S(359, 274), // + S(300, 296), S(364, 285), S(450, 261), S(382, 285), S(384, 287), S(343, 293), S(260, 323), S(257, 322), // + S(282, 283), S(413, 249), S(440, 243), S(421, 241), S(381, 253), S(332, 276), S(327, 280), S(249, 313), // + S(258, 273), S(334, 273), S(373, 257), S(351, 253), S(344, 263), S(300, 283), S(280, 284), S(219, 298), // + S(214, 230), S(285, 240), S(266, 257), S(260, 245), S(251, 252), S(235, 280), S(203, 270), S(178, 269), // + S(181, 202), S(245, 201), S(248, 223), S(235, 214), S(239, 207), S(209, 245), S(199, 223), S(158, 238), // + S(93, 218), S(209, 161), S(231, 183), S(239, 185), S(230, 187), S(216, 201), S(193, 185), S(166, 200), // + S(142, 206), S(159, 228), S(230, 189), S(259, 171), S(238, 190), S(225, 206), S(210, 198), S(190, 221), // }; inline const std::array QUEEN_PSQT = { - S(466, 400), S(544, 336), S(530, 371), S(447, 477), S(460, 440), S(451, 433), S(488, 364), S(388, 440), // - S(490, 429), S(432, 533), S(433, 548), S(292, 610), S(296, 604), S(363, 560), S(392, 476), S(415, 452), // - S(419, 491), S(511, 480), S(440, 549), S(408, 567), S(359, 571), S(375, 525), S(448, 429), S(425, 400), // - S(493, 391), S(490, 460), S(452, 502), S(426, 555), S(416, 557), S(417, 491), S(470, 398), S(468, 366), // - S(476, 393), S(488, 411), S(465, 460), S(434, 507), S(437, 503), S(433, 465), S(453, 393), S(464, 344), // - S(466, 314), S(501, 346), S(502, 413), S(465, 396), S(461, 389), S(468, 410), S(472, 354), S(458, 326), // - S(450, 189), S(495, 149), S(492, 240), S(503, 285), S(485, 315), S(485, 284), S(455, 333), S(455, 319), // - S(407, 227), S(456, 31), S(456, 62), S(483, 154), S(490, 229), S(492, 179), S(481, 212), S(432, 262), // + S(463, 410), S(543, 344), S(529, 378), S(444, 484), S(458, 447), S(447, 442), S(484, 373), S(385, 449), // + S(485, 442), S(427, 545), S(432, 554), S(285, 619), S(291, 612), S(359, 569), S(387, 486), S(405, 465), // + S(421, 499), S(517, 483), S(438, 557), S(406, 573), S(357, 579), S(374, 531), S(443, 438), S(423, 408), // + S(499, 398), S(493, 467), S(454, 507), S(427, 558), S(417, 560), S(416, 495), S(470, 402), S(465, 370), // + S(481, 401), S(490, 421), S(464, 469), S(435, 514), S(438, 506), S(434, 468), S(451, 398), S(464, 347), // + S(467, 319), S(500, 352), S(500, 423), S(465, 403), S(461, 395), S(468, 415), S(474, 356), S(459, 330), // + S(448, 199), S(489, 156), S(493, 243), S(503, 292), S(485, 320), S(486, 285), S(455, 336), S(456, 321), // + S(403, 241), S(453, 44), S(455, 69), S(484, 158), S(490, 235), S(492, 185), S(481, 216), S(434, 264), // }; inline const std::array KING_PSQT = { - S(-478, -214), S(-21, 90), S(123, 31), S(-98, 21), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(134, -108), S(239, 6), S(188, 37), S(134, -23), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(55, 30), S(261, 18), S(227, 28), S(116, 8), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-207, 59), S(170, 6), S(55, 30), S(38, 28), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-227, 45), S(99, -6), S(86, 1), S(-20, 40), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-113, 34), S(168, -24), S(103, -0), S(58, 14), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(4, -11), S(158, -31), S(98, -20), S(28, 5), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-150, -11), S(-8, -8), S(-98, 3), S(-100, -26), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-570, -149), S(-102, 158), S(52, 66), S(-143, 25), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(54, -38), S(200, 65), S(164, 64), S(129, -24), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-18, 93), S(234, 69), S(220, 50), S(112, 5), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-273, 107), S(149, 43), S(57, 41), S(49, 21), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-282, 73), S(88, 9), S(88, 1), S(5, 28), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-140, 40), S(171, -29), S(112, -12), S(85, 1), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(6, -23), S(189, -55), S(128, -36), S(58, -6), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-178, -13), S(-9, -19), S(-111, 1), S(-111, -22), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // }; inline const std::array, 4> SHELTER_STORM = {{ - {{ S(-67, 30), S(-2, -28), S(50, -41), S(27, -30), S(30, -33), S(50, -40), S(-8, -18), }}, - {{ S(-51, 25), S(31, -6), S(57, -47), S(19, -31), S(20, -27), S(55, -42), S(33, 2), }}, - {{ S(-20, 25), S(6, 19), S(28, -38), S(16, -86), S(22, -84), S(35, -35), S(3, 23), }}, - {{ S(-30, 13), S(20, 18), S(27, -1), S(24, 6), S(25, 9), S(19, 7), S(31, 33), }}, + {{ S(-36, -3), S(8, -17), S(0, -16), S(2, -1), S(6, 1), S(-5, -6), S(3, -6), }}, + {{ S(-5, 0), S(11, -19), S(31, -14), S(25, 13), S(32, 11), S(33, -12), S(14, -17), }}, + {{ S(-7, 1), S(13, -24), S(-2, -0), S(-12, 16), S(-6, 20), S(2, 3), S(8, -20), }}, + {{ S(1, 8), S(15, -1), S(34, -3), S(6, -11), S(4, -6), S(25, 4), S(28, 9), }}, }}; -// Epoch duration: 8.68854s - // clang-format on +// Epoch duration: 5.44659s +// clang-format on } // namespace Clockwork From b8519d8d9cbad289096f1c72cdea246e226dee81 Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Thu, 15 Jan 2026 07:17:47 +0100 Subject: [PATCH 5/6] deranged try Bench: 14058851 --- src/eval_constants.hpp | 189 +++++++++++++++++++++-------------------- src/evaltune_main.cpp | 6 +- src/evaluation.cpp | 15 +++- 3 files changed, 117 insertions(+), 93 deletions(-) diff --git a/src/eval_constants.hpp b/src/eval_constants.hpp index 5ea21673..81bc1f48 100644 --- a/src/eval_constants.hpp +++ b/src/eval_constants.hpp @@ -5,169 +5,178 @@ namespace Clockwork { // clang-format off -inline const PParam PAWN_MAT = S(174, 156); -inline const PParam KNIGHT_MAT = S(510, 311); -inline const PParam BISHOP_MAT = S(458, 270); -inline const PParam ROOK_MAT = S(542, 410); -inline const PParam QUEEN_MAT = S(1077, 560); -inline const PParam TEMPO_VAL = S(63, 14); +inline const PParam PAWN_MAT = S(162, 160); +inline const PParam KNIGHT_MAT = S(514, 311); +inline const PParam BISHOP_MAT = S(450, 266); +inline const PParam ROOK_MAT = S(547, 407); +inline const PParam QUEEN_MAT = S(1076, 555); +inline const PParam TEMPO_VAL = S(64, 13); inline const PParam BISHOP_PAIR_VAL = S(77, 163); inline const PParam ROOK_OPEN_VAL = S(114, -26); -inline const PParam ROOK_SEMIOPEN_VAL = S(44, 18); +inline const PParam ROOK_SEMIOPEN_VAL = S(42, 18); -inline const PParam DOUBLED_PAWN_VAL = S(-38, -72); +inline const PParam DOUBLED_PAWN_VAL = S(-19, -85); -inline const PParam POTENTIAL_CHECKER_VAL = S(-69, -10); -inline const PParam OUTPOST_KNIGHT_VAL = S(51, 40); +inline const PParam POTENTIAL_CHECKER_VAL = S(-66, -11); +inline const PParam OUTPOST_KNIGHT_VAL = S(50, 40); inline const PParam OUTPOST_BISHOP_VAL = S(60, 26); -inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(49, 4); -inline const PParam PAWN_PUSH_THREAT_BISHOP = S(58, -25); +inline const PParam PAWN_PUSH_THREAT_KNIGHT = S(48, 4); +inline const PParam PAWN_PUSH_THREAT_BISHOP = S(56, -24); inline const PParam PAWN_PUSH_THREAT_ROOK = S(37, 35); -inline const PParam PAWN_PUSH_THREAT_QUEEN = S(70, -52); +inline const PParam PAWN_PUSH_THREAT_QUEEN = S(68, -49); inline const std::array PAWN_PHALANX = { - S(23, 10), S(59, 32), S(74, 69), S(183, 152), S(483, 221), S(677, 677), + S(20, 11), S(55, 35), S(71, 69), S(170, 158), S(478, 229), S(654, 680), }; inline const std::array DEFENDED_PAWN = { - S(72, 36), S(61, 33), S(75, 64), S(179, 115), S(598, -14), + S(65, 41), S(58, 34), S(74, 64), S(177, 115), S(590, -11), }; inline const std::array PASSED_PAWN = { - S(-83, -95), S(-81, -75), S(-55, 5), S(29, 73), S(105, 195), S(304, 275), + S(-80, -98), S(-79, -78), S(-55, 2), S(23, 74), S(112, 207), S(303, 278), }; inline const std::array DEFENDED_PASSED_PUSH = { - S(42, -36), S(36, -6), S(29, 18), S(26, 64), S(95, 131), S(209, 213), + S(40, -35), S(35, -6), S(29, 18), S(28, 63), S(94, 131), S(202, 217), }; inline const std::array BLOCKED_PASSED_PAWN = { - S(10, -33), S(-2, 10), S(-3, -19), S(-7, -40), S(-13, -90), S(-266, -110), + S(11, -34), S(1, 6), S(-1, -22), S(-4, -42), S(-14, -90), S(-270, -106), }; inline const std::array FRIENDLY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(18, 108), S(-9, 88), S(-11, 35), S(-7, 8), S(3, 9), S(46, 5), S(8, -3), + S(0, 0), S(16, 110), S(-9, 89), S(-8, 35), S(-5, 8), S(4, 7), S(48, 2), S(8, -5), }; inline const std::array ENEMY_KING_PASSED_PAWN_DISTANCE = { - S(0, 0), S(-294, -10), S(-33, 24), S(-10, 49), S(37, 60), S(40, 79), S(48, 85), S(20, 81), + S(0, 0), S(-292, -11), S(-26, 21), S(-7, 49), S(35, 62), S(37, 81), S(45, 86), S(20, 80), }; inline const std::array KNIGHT_MOBILITY = { - S(11, -59), S(110, 94), S(167, 164), S(204, 193), S(251, 203), S(280, 236), S(316, 228), S(353, 230), S(399, 169), + S(15, -67), S(113, 87), S(168, 158), S(203, 189), S(252, 198), S(280, 230), S(317, 222), S(354, 223), S(401, 162), }; inline const std::array BISHOP_MOBILITY = { - S(-14, -122), S(55, 36), S(117, 79), S(144, 127), S(173, 156), S(191, 176), S(199, 193), S(218, 197), S(229, 209), S(249, 198), S(272, 187), S(331, 144), S(337, 142), S(406, 97), + S(-10, -123), S(57, 39), S(119, 80), S(147, 128), S(177, 157), S(195, 176), S(204, 192), S(223, 197), S(234, 208), S(254, 197), S(277, 186), S(336, 143), S(342, 140), S(409, 98), }; inline const std::array ROOK_MOBILITY = { - S(279, 101), S(203, 261), S(231, 280), S(249, 284), S(262, 294), S(268, 306), S(276, 313), S(286, 312), S(294, 318), S(305, 319), S(318, 318), S(327, 317), S(334, 317), S(353, 296), S(461, 201), + S(279, 96), S(198, 260), S(227, 277), S(247, 281), S(261, 290), S(266, 302), S(274, 310), S(285, 309), S(292, 314), S(303, 316), S(316, 315), S(327, 313), S(334, 313), S(353, 292), S(461, 197), }; inline const std::array QUEEN_MOBILITY = { - S(458, 111), S(522, 233), S(571, 268), S(599, 362), S(611, 422), S(627, 454), S(630, 497), S(639, 501), S(642, 526), S(648, 535), S(652, 549), S(657, 552), S(669, 541), S(674, 543), S(678, 540), S(682, 535), S(687, 528), S(686, 527), S(698, 507), S(717, 488), S(732, 468), S(748, 435), S(776, 415), S(895, 303), S(947, 250), S(942, 242), S(858, 290), S(962, 217), + S(463, 104), S(526, 231), S(577, 264), S(605, 360), S(616, 419), S(633, 451), S(636, 494), S(645, 500), S(648, 523), S(654, 533), S(658, 547), S(663, 550), S(675, 538), S(681, 540), S(684, 537), S(689, 532), S(694, 525), S(694, 524), S(706, 503), S(726, 485), S(741, 465), S(758, 431), S(786, 411), S(906, 298), S(956, 246), S(950, 238), S(873, 283), S(975, 211), }; inline const std::array KING_MOBILITY = { - S(657, -328), S(242, -191), S(120, -88), S(81, -37), S(31, -21), S(-24, 5), S(-72, 42), S(-124, 68), S(-160, 55), + S(548, -257), S(147, -120), S(58, -45), S(39, -10), S(14, -9), S(-17, 6), S(-40, 29), S(-67, 43), S(-83, 20), }; inline const std::array KNIGHT_KING_RING = { - S(233, 231), S(352, 184), S(456, 122), + S(238, 231), S(355, 186), S(453, 126), }; inline const std::array BISHOP_KING_RING = { - S(471, 377), S(289, 238), S(163, 72), + S(483, 375), S(297, 236), S(163, 70), }; inline const std::array ROOK_KING_RING = { - S(316, 320), S(439, 315), S(484, 321), S(591, 369), S(751, 328), + S(317, 319), S(439, 316), S(482, 323), S(596, 367), S(761, 324), }; inline const std::array QUEEN_KING_RING = { - S(876, 748), S(590, 611), S(333, 463), S(143, 258), S(85, -7), S(18, -292), + S(883, 742), S(596, 607), S(335, 461), S(142, 257), S(84, -9), S(23, -299), }; inline const std::array PT_INNER_RING_ATTACKS = { - S(-119, 60), S(27, -18), S(-223, -130), S(60, 36), S(-242, -153), + S(-85, 41), S(27, -18), S(-227, -130), S(66, 34), S(-243, -154), }; inline const std::array PT_OUTER_RING_ATTACKS = { - S(-28, 20), S(-21, 20), S(-21, 16), S(-15, 9), S(-21, -13), + S(-26, 19), S(-20, 19), S(-19, 15), S(-16, 9), S(-21, -13), }; -inline const PParam PAWN_THREAT_KNIGHT = S(245, 60); +inline const PParam PAWN_THREAT_KNIGHT = S(244, 61); inline const PParam PAWN_THREAT_BISHOP = S(218, 116); -inline const PParam PAWN_THREAT_ROOK = S(203, 99); -inline const PParam PAWN_THREAT_QUEEN = S(187, -44); +inline const PParam PAWN_THREAT_ROOK = S(204, 99); +inline const PParam PAWN_THREAT_QUEEN = S(186, -43); inline const PParam KNIGHT_THREAT_BISHOP = S(118, 73); inline const PParam KNIGHT_THREAT_ROOK = S(256, 15); -inline const PParam KNIGHT_THREAT_QUEEN = S(156, -19); +inline const PParam KNIGHT_THREAT_QUEEN = S(156, -20); -inline const PParam BISHOP_THREAT_KNIGHT = S(115, 38); +inline const PParam BISHOP_THREAT_KNIGHT = S(116, 38); inline const PParam BISHOP_THREAT_ROOK = S(238, 72); -inline const PParam BISHOP_THREAT_QUEEN = S(199, 52); +inline const PParam BISHOP_THREAT_QUEEN = S(200, 51); inline const std::array BISHOP_PAWNS = { - S(3, -20), S(-3, -8), S(-3, -18), S(-9, -25), S(-14, -32), S(-21, -35), S(-24, -46), S(-29, -47), S(-37, -52), + S(3, -20), S(-3, -8), S(-4, -18), S(-10, -24), S(-16, -31), S(-22, -34), S(-25, -45), S(-30, -46), S(-38, -50), }; inline const std::array PAWN_PSQT = { - S(306, 277), S(197, 345), S(313, 306), S(292, 249), S(340, 180), S(249, 251), S(200, 278), S(311, 231), // - S(159, 173), S(217, 215), S(193, 167), S(164, 125), S(146, 98), S(114, 136), S(95, 175), S(66, 184), // - S(108, 140), S(105, 164), S(103, 128), S(91, 103), S(80, 89), S(46, 114), S(29, 145), S(15, 161), // - S(95, 95), S(108, 131), S(95, 109), S(82, 94), S(55, 85), S(36, 107), S(-2, 145), S(-14, 129), // - S(89, 67), S(155, 70), S(87, 122), S(77, 118), S(47, 111), S(10, 114), S(-6, 127), S(-21, 113), // - S(91, 75), S(210, 79), S(154, 118), S(105, 146), S(75, 131), S(50, 110), S(30, 133), S(-0, 128), // + S(290, 301), S(160, 371), S(267, 324), S(302, 224), S(355, 161), S(268, 239), S(214, 270), S(329, 220), // + S(113, 187), S(160, 237), S(174, 183), S(161, 102), S(148, 77), S(124, 116), S(107, 158), S(73, 172), // + S(85, 157), S(90, 172), S(97, 141), S(100, 93), S(92, 80), S(62, 107), S(47, 138), S(28, 159), // + S(64, 114), S(82, 144), S(79, 127), S(81, 86), S(61, 79), S(50, 101), S(13, 141), S(-2, 127), // + S(54, 90), S(105, 103), S(83, 153), S(81, 108), S(57, 102), S(28, 106), S(15, 117), S(-5, 109), // + S(89, 88), S(179, 91), S(101, 130), S(110, 127), S(84, 115), S(69, 100), S(50, 125), S(13, 124), // }; inline const std::array KNIGHT_PSQT = { - S(-284, -49), S(-219, 185), S(-456, 437), S(89, 149), S(16, 155), S(-116, 135), S(-374, 196), S(-343, 33), // - S(111, 121), S(162, 120), S(243, 81), S(215, 118), S(210, 130), S(143, 124), S(125, 132), S(96, 106), // - S(180, 91), S(197, 135), S(249, 152), S(210, 168), S(181, 178), S(125, 185), S(133, 126), S(105, 121), // - S(240, 132), S(222, 151), S(226, 176), S(199, 208), S(217, 198), S(187, 183), S(188, 139), S(185, 115), // - S(230, 118), S(267, 108), S(242, 152), S(226, 175), S(213, 172), S(213, 161), S(213, 110), S(175, 112), // - S(176, 92), S(204, 90), S(187, 126), S(207, 150), S(209, 144), S(157, 134), S(157, 99), S(123, 82), // - S(185, 84), S(200, 72), S(181, 87), S(179, 108), S(166, 114), S(145, 70), S(151, 81), S(110, 18), // - S(127, 63), S(163, 121), S(187, 74), S(205, 61), S(189, 81), S(139, 63), S(129, 98), S(78, 37), // + S(-292, -44), S(-218, 182), S(-455, 433), S(92, 145), S(18, 152), S(-114, 132), S(-377, 194), S(-352, 39), // + S(112, 118), S(161, 119), S(245, 78), S(223, 112), S(215, 125), S(145, 121), S(124, 130), S(96, 104), // + S(184, 86), S(201, 130), S(254, 147), S(214, 164), S(186, 174), S(126, 183), S(132, 125), S(109, 117), // + S(238, 131), S(223, 149), S(230, 172), S(200, 205), S(219, 195), S(187, 181), S(188, 138), S(183, 114), // + S(228, 118), S(267, 107), S(240, 151), S(226, 173), S(211, 171), S(212, 160), S(211, 111), S(174, 111), // + S(171, 92), S(204, 89), S(185, 124), S(205, 150), S(207, 144), S(154, 133), S(155, 99), S(121, 81), // + S(184, 82), S(207, 66), S(178, 87), S(176, 109), S(165, 113), S(143, 70), S(148, 81), S(106, 20), // + S(123, 63), S(161, 121), S(185, 73), S(206, 59), S(186, 81), S(137, 63), S(130, 95), S(74, 39), // }; inline const std::array BISHOP_PSQT = { - S(-36, 183), S(-70, 166), S(-364, 241), S(-228, 208), S(-195, 218), S(-293, 251), S(-109, 219), S(-29, 193), // - S(77, 112), S(23, 172), S(58, 130), S(-12, 180), S(-26, 186), S(33, 161), S(62, 144), S(41, 135), // - S(141, 125), S(172, 121), S(163, 155), S(125, 147), S(94, 147), S(93, 155), S(135, 133), S(114, 111), // - S(124, 104), S(140, 125), S(161, 136), S(140, 175), S(168, 163), S(105, 147), S(113, 120), S(81, 113), // - S(139, 81), S(148, 109), S(156, 128), S(163, 150), S(151, 156), S(116, 147), S(77, 129), S(84, 96), // - S(154, 86), S(190, 91), S(207, 107), S(155, 144), S(146, 127), S(151, 126), S(161, 101), S(99, 108), // - S(139, 35), S(223, 55), S(186, 68), S(152, 95), S(134, 106), S(141, 78), S(142, 85), S(132, 45), // - S(142, 46), S(128, 96), S(136, 118), S(155, 75), S(161, 63), S(153, 123), S(147, 78), S(126, 71), // + S(-35, 182), S(-67, 164), S(-366, 241), S(-228, 208), S(-194, 217), S(-291, 248), S(-108, 217), S(-28, 192), // + S(85, 107), S(27, 170), S(60, 128), S(-10, 180), S(-21, 182), S(34, 160), S(63, 142), S(44, 131), // + S(137, 126), S(175, 119), S(165, 153), S(129, 144), S(95, 145), S(95, 153), S(135, 132), S(114, 111), // + S(125, 104), S(143, 124), S(166, 133), S(142, 173), S(172, 160), S(104, 146), S(116, 119), S(81, 113), // + S(142, 79), S(152, 106), S(158, 127), S(167, 147), S(153, 155), S(119, 145), S(79, 128), S(87, 94), // + S(160, 81), S(196, 87), S(211, 104), S(157, 143), S(150, 126), S(153, 124), S(163, 100), S(101, 106), // + S(144, 31), S(228, 52), S(186, 67), S(155, 94), S(136, 105), S(144, 76), S(144, 84), S(134, 44), // + S(146, 43), S(129, 93), S(141, 116), S(159, 74), S(164, 61), S(156, 121), S(151, 76), S(127, 70), // }; inline const std::array ROOK_PSQT = { - S(406, 241), S(441, 249), S(398, 274), S(405, 258), S(401, 257), S(348, 269), S(363, 271), S(359, 274), // - S(300, 296), S(364, 285), S(450, 261), S(382, 285), S(384, 287), S(343, 293), S(260, 323), S(257, 322), // - S(282, 283), S(413, 249), S(440, 243), S(421, 241), S(381, 253), S(332, 276), S(327, 280), S(249, 313), // - S(258, 273), S(334, 273), S(373, 257), S(351, 253), S(344, 263), S(300, 283), S(280, 284), S(219, 298), // - S(214, 230), S(285, 240), S(266, 257), S(260, 245), S(251, 252), S(235, 280), S(203, 270), S(178, 269), // - S(181, 202), S(245, 201), S(248, 223), S(235, 214), S(239, 207), S(209, 245), S(199, 223), S(158, 238), // - S(93, 218), S(209, 161), S(231, 183), S(239, 185), S(230, 187), S(216, 201), S(193, 185), S(166, 200), // - S(142, 206), S(159, 228), S(230, 189), S(259, 171), S(238, 190), S(225, 206), S(210, 198), S(190, 221), // + S(420, 240), S(457, 247), S(411, 274), S(420, 256), S(414, 257), S(357, 271), S(375, 272), S(370, 275), // + S(316, 294), S(380, 284), S(467, 259), S(399, 284), S(398, 287), S(353, 295), S(271, 324), S(269, 324), // + S(291, 285), S(424, 250), S(453, 243), S(428, 244), S(386, 257), S(338, 279), S(332, 284), S(254, 317), // + S(265, 275), S(343, 275), S(386, 256), S(355, 257), S(351, 266), S(307, 286), S(284, 288), S(222, 303), // + S(225, 230), S(297, 240), S(280, 255), S(266, 248), S(257, 255), S(242, 283), S(209, 274), S(183, 273), // + S(194, 201), S(258, 199), S(260, 222), S(241, 217), S(246, 211), S(216, 248), S(204, 228), S(162, 243), // + S(109, 216), S(227, 158), S(241, 184), S(246, 188), S(236, 191), S(222, 205), S(199, 189), S(170, 205), // + S(156, 206), S(167, 229), S(238, 191), S(262, 175), S(243, 194), S(230, 210), S(214, 203), S(194, 226), // }; inline const std::array QUEEN_PSQT = { - S(463, 410), S(543, 344), S(529, 378), S(444, 484), S(458, 447), S(447, 442), S(484, 373), S(385, 449), // - S(485, 442), S(427, 545), S(432, 554), S(285, 619), S(291, 612), S(359, 569), S(387, 486), S(405, 465), // - S(421, 499), S(517, 483), S(438, 557), S(406, 573), S(357, 579), S(374, 531), S(443, 438), S(423, 408), // - S(499, 398), S(493, 467), S(454, 507), S(427, 558), S(417, 560), S(416, 495), S(470, 402), S(465, 370), // - S(481, 401), S(490, 421), S(464, 469), S(435, 514), S(438, 506), S(434, 468), S(451, 398), S(464, 347), // - S(467, 319), S(500, 352), S(500, 423), S(465, 403), S(461, 395), S(468, 415), S(474, 356), S(459, 330), // - S(448, 199), S(489, 156), S(493, 243), S(503, 292), S(485, 320), S(486, 285), S(455, 336), S(456, 321), // - S(403, 241), S(453, 44), S(455, 69), S(484, 158), S(490, 235), S(492, 185), S(481, 216), S(434, 264), // + S(470, 403), S(552, 336), S(534, 372), S(449, 479), S(461, 442), S(452, 436), S(489, 368), S(389, 445), // + S(493, 434), S(438, 535), S(437, 549), S(293, 613), S(298, 606), S(362, 565), S(390, 483), S(411, 459), // + S(422, 496), S(519, 482), S(442, 552), S(412, 567), S(360, 575), S(376, 528), S(444, 436), S(424, 405), // + S(498, 398), S(493, 466), S(458, 504), S(428, 558), S(419, 559), S(416, 494), S(468, 401), S(463, 370), // + S(481, 399), S(491, 418), S(466, 467), S(436, 512), S(437, 506), S(433, 468), S(450, 397), S(463, 345), // + S(469, 319), S(503, 351), S(502, 420), S(465, 401), S(461, 394), S(468, 414), S(472, 356), S(457, 329), // + S(451, 193), S(495, 156), S(494, 243), S(502, 292), S(483, 321), S(485, 286), S(453, 337), S(454, 322), // + S(406, 232), S(453, 40), S(456, 68), S(483, 158), S(488, 235), S(491, 184), S(481, 215), S(431, 265), // }; inline const std::array KING_PSQT = { - S(-570, -149), S(-102, 158), S(52, 66), S(-143, 25), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(54, -38), S(200, 65), S(164, 64), S(129, -24), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-18, 93), S(234, 69), S(220, 50), S(112, 5), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-273, 107), S(149, 43), S(57, 41), S(49, 21), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-282, 73), S(88, 9), S(88, 1), S(5, 28), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-140, 40), S(171, -29), S(112, -12), S(85, 1), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(6, -23), S(189, -55), S(128, -36), S(58, -6), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // - S(-178, -13), S(-9, -19), S(-111, 1), S(-111, -22), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-422, -244), S(12, 87), S(161, 8), S(-89, -4), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(163, -108), S(228, 38), S(187, 48), S(111, -17), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(77, 36), S(249, 54), S(229, 43), S(89, 16), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-189, 58), S(153, 35), S(58, 38), S(16, 33), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-214, 32), S(81, 9), S(83, -1), S(-38, 41), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-97, 17), S(154, -17), S(104, -7), S(44, 13), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(8, -20), S(131, -18), S(80, -17), S(1, 7), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // + S(-126, -35), S(-11, -9), S(-89, -12), S(-95, -48), S(0, 0), S(0, 0), S(0, 0), S(0, 0), // +}; + +inline const std::array, 4> KING_SHELTER = {{ + {{ S(-57, 29), S(4, -32), S(55, -45), S(30, -26), S(34, -26), S(53, -45), S(9, -41), }}, + {{ S(-60, 31), S(54, -20), S(68, -44), S(14, 3), S(17, -10), S(71, -54), S(52, -30), }}, + {{ S(-54, 25), S(49, -15), S(-12, -28), S(-10, -4), S(-9, -12), S(-16, -36), S(48, -19), }}, + {{ S(-46, 11), S(21, 29), S(11, 5), S(8, 9), S(15, 3), S(20, -2), S(21, 4), }}, +}}; +inline const std::array BLOCKED_SHELTER_STORM = { + S(0, 0), S(0, 0), S(-11, -85), S(40, -23), S(18, -13), S(-9, -8), S(16, 19), }; - inline const std::array, 4> SHELTER_STORM = {{ - {{ S(-36, -3), S(8, -17), S(0, -16), S(2, -1), S(6, 1), S(-5, -6), S(3, -6), }}, - {{ S(-5, 0), S(11, -19), S(31, -14), S(25, 13), S(32, 11), S(33, -12), S(14, -17), }}, - {{ S(-7, 1), S(13, -24), S(-2, -0), S(-12, 16), S(-6, 20), S(2, 3), S(8, -20), }}, - {{ S(1, 8), S(15, -1), S(34, -3), S(6, -11), S(4, -6), S(25, 4), S(28, 9), }}, + {{ S(-26, -5), S(7, -8), S(15, -12), S(5, 1), S(13, 9), S(6, -6), S(6, -8), }}, + {{ S(-35, 6), S(-14, -9), S(10, -7), S(-6, 27), S(4, 19), S(11, -10), S(-13, -14), }}, + {{ S(3, -9), S(29, -37), S(15, -11), S(2, 5), S(8, 9), S(17, -11), S(24, -37), }}, + {{ S(-5, 17), S(14, 12), S(35, 3), S(8, -5), S(6, -4), S(34, 7), S(27, 6), }}, }}; -// Epoch duration: 5.44659s +// Epoch duration: 5.04286s // clang-format on } // namespace Clockwork diff --git a/src/evaltune_main.cpp b/src/evaltune_main.cpp index af17b5ef..7390f93d 100644 --- a/src/evaltune_main.cpp +++ b/src/evaltune_main.cpp @@ -386,7 +386,7 @@ int main() { printPsqtArray("KING_PSQT", KING_PSQT); std::cout << std::endl; - auto print2DArray = [](const std::string& name, const auto& arr) { + auto print_2d_array = [](const std::string& name, const auto& arr) { std::cout << "inline const std::array, " << arr.size() << "> " << name << " = {{" << std::endl; for (const auto& subarr : arr) { @@ -399,7 +399,9 @@ int main() { std::cout << "}};" << std::endl; }; - print2DArray("SHELTER_STORM", SHELTER_STORM); + print_2d_array("KING_SHELTER", KING_SHELTER); + print_table("BLOCKED_SHELTER_STORM", BLOCKED_SHELTER_STORM); + print_2d_array("SHELTER_STORM", SHELTER_STORM); #endif const auto end = time::Clock::now(); diff --git a/src/evaluation.cpp b/src/evaluation.cpp index b4c76d2e..9cd1a5b6 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -111,6 +111,7 @@ PScore king_shelter(const Position& pos) { Square king_square = pos.king_sq(color); Bitboard b = ~Bitboard::forward_ranks(opp, king_square); // Squares ahead or on king's rank + Bitboard our_pawns = pos.bitboard_for(color, PieceType::Pawn) & b & ~pos.attacked_by(opp, PieceType::Pawn); Bitboard their_pawns = pos.bitboard_for(opp, PieceType::Pawn) & b; PScore score = PSCORE_ZERO; @@ -121,11 +122,23 @@ PScore king_shelter(const Position& pos) { i32 file = shelter_center + offset; Bitboard file_bb = Bitboard::file_mask(file); + // Our pawns + b = our_pawns & file_bb; + i32 our_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; + + // Opponent pawns b = their_pawns & file_bb; i32 their_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; i32 edge_idx = std::min(file, 7 - file); - score += SHELTER_STORM[static_cast(edge_idx)][static_cast(their_rank)]; + + score += KING_SHELTER[static_cast(edge_idx)][static_cast(our_rank)]; + if (our_rank && (our_rank == their_rank - 1)) { + score += BLOCKED_SHELTER_STORM[static_cast(their_rank)]; + } + else { + score += SHELTER_STORM[static_cast(edge_idx)][static_cast(their_rank)]; + } } return score; From 7a3afe32eba574a03c8aa9c4a49c46c4110aac67 Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Thu, 15 Jan 2026 20:42:08 +0100 Subject: [PATCH 6/6] Format Bench: 14058851 --- src/bitboard.hpp | 4 ++-- src/evaluation.cpp | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/bitboard.hpp b/src/bitboard.hpp index c2552cba..18cc005b 100644 --- a/src/bitboard.hpp +++ b/src/bitboard.hpp @@ -115,9 +115,9 @@ struct Bitboard { return color == Color::White ? msb() : lsb(); } - [[nodiscard]] static Bitboard forward_ranks(Color c, Square sq){ + [[nodiscard]] static Bitboard forward_ranks(Color c, Square sq) { return c == Color::White ? ~rank_mask(0) << (8 * sq.relative_rank(c)) - : ~rank_mask(7) >> (8 * sq.relative_rank(c)); + : ~rank_mask(7) >> (8 * sq.relative_rank(c)); } [[nodiscard]] Bitboard shift_relative(Color perspective, Direction dir) const { diff --git a/src/evaluation.cpp b/src/evaluation.cpp index 9cd1a5b6..b8f0acbf 100644 --- a/src/evaluation.cpp +++ b/src/evaluation.cpp @@ -110,24 +110,25 @@ PScore king_shelter(const Position& pos) { Square king_square = pos.king_sq(color); - Bitboard b = ~Bitboard::forward_ranks(opp, king_square); // Squares ahead or on king's rank - Bitboard our_pawns = pos.bitboard_for(color, PieceType::Pawn) & b & ~pos.attacked_by(opp, PieceType::Pawn); + Bitboard b = ~Bitboard::forward_ranks(opp, king_square); // Squares ahead or on king's rank + Bitboard our_pawns = + pos.bitboard_for(color, PieceType::Pawn) & b & ~pos.attacked_by(opp, PieceType::Pawn); Bitboard their_pawns = pos.bitboard_for(opp, PieceType::Pawn) & b; PScore score = PSCORE_ZERO; - i32 shelter_center = std::clamp(king_square.file(), 1,6); + i32 shelter_center = std::clamp(king_square.file(), 1, 6); for (i32 offset = -1; offset <= 1; offset++) { - i32 file = shelter_center + offset; + i32 file = shelter_center + offset; Bitboard file_bb = Bitboard::file_mask(file); // Our pawns - b = our_pawns & file_bb; + b = our_pawns & file_bb; i32 our_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; - + // Opponent pawns - b = their_pawns & file_bb; + b = their_pawns & file_bb; i32 their_rank = b.any() ? b.frontmost_square(opp).relative_rank(color) : 0; i32 edge_idx = std::min(file, 7 - file); @@ -135,8 +136,7 @@ PScore king_shelter(const Position& pos) { score += KING_SHELTER[static_cast(edge_idx)][static_cast(our_rank)]; if (our_rank && (our_rank == their_rank - 1)) { score += BLOCKED_SHELTER_STORM[static_cast(their_rank)]; - } - else { + } else { score += SHELTER_STORM[static_cast(edge_idx)][static_cast(their_rank)]; } }