The +65 elo is from 6000 self-play games, so on rating lists my hope somewhere close to +50 elo.
I have thought about making a detailed web-page and/or post about the inner-workings of SlowChess, but when I test against Stockfish and see how much SF11 dominates, it always makes me wonder how much real value there would be, so I never end up following through. Maybe if I ever get within 250 elo of SF...
I don't mind sharing info, since it's easy to share here's the current eval table tunable values.
Some of the terms might spark some ideas even without description/implementation details, and there is the right-click on piece for evaluation in own gui.
At this point most eval terms are standard Fruit-style mid,end Score Blend (SB), which I now appreciate ease of use compared to the hodgepodge of game stage I had before.
Code: Select all
Group("MaterialV", &MaterialV);
V("BISHOP_PAIR", SB(29, 46));
V("MORE_PIECE_BONUS", SB(36, 88));
V("TWO_MINORS_VS_ROOK", SB(48, 71));
V("ROOK_V_KNIGHT_END", SB(0, 59));
V("ROOK_V_BISHOP_END", SB(0, 44));
V("KNIGHT_BASE_OFFSET", SB(-11, 17));
V("BISHOP_BASE_OFFSET", SB(14, 19));
V("ROOK_BASE_OFFSET", SB(-32, 10));
V("QUEEN_BASE_OFFSET", SB(0, 45));
V("PAWN_BASE_OFFSET", SB(-5, 4));
EndGroup();
Group("KnightV", &KnightV);
V("KNIGHT_MOB_MIN", SB(-20, -16));
V("KNIGHT_MOB_MAX", SB(7, 24));
V("KNIGHT_MOB_CURVE_FACTOR", SB(49, 56));
V("KNIGHT_CENTER_MOVE_BONUS", SB(8, 18));
V("KNIGHT_AWOL", SB(-4, -4));
V("KNIGHT_NO_RETREAT", SB(-13, -14));
V("KNIGHT_OUTPOST", SB(26, 16));
V("KNIGHT_OUTPOST_UNSUPPORTED", SB(4, 0));
V("KNIGHT_OUTPOST_MOVE", SB(22, 14));
V("KNIGHT_OUTPOST_FOURTH", SB(19, 13));
EndGroup();
Group("BishopV", &BishopV);
V("BISHOP_MOB_MIN", SB(-25, -29));
V("BISHOP_MOB_MAX", SB(11, 22));
V("BISHOP_MOB_CURVE_FACTOR", SB(41, 42));
V("BISHOP_COLOR_PAWNS", SB(-4, -4));
V("BISHOP_COLOR_BLOCKED_PAWN", SB(-2, -2));
V("BISHOP_COLOR_BLOCKED_CENTER_PAWN", SB(0, -2));
V("BISHOP_FORWARD_BLOCKED_PAWN", SB(-5, -6));
V("BISHOP_FIANCHETTO", SB(13, 11));
V("BISHOP_OUTPOST", SB(20, 15));
V("BISHOP_OUTPOST_MOVE", SB(5, 7));
V("BISHOP_ONLY_REACHES_ONE_SIDE", SB(-3, -6));
V("BISHOP_NO_PAWN_TARGETS", SB(0, -22));
V("BISHOP_ROOK_ALIGNED", SB(7, 9));
V("BISHOP_CENTER_CONTROL_0", SB(-4, 0));
V("BISHOP_CENTER_CONTROL_1", SB(4, 7));
V("BISHOP_CENTER_CONTROL_2", SB(11, 11));
V("BISHOP_TRAPPED_OVER_5", SB(-26, -16));
EndGroup();
Group("RookV", &RookV);
V("ROOK_MOB_MIN", SB(-23, -35));
V("ROOK_MOB_MAX", SB(16, 48));
V("ROOK_MOB_CURVE_FACTOR", SB(28, 30));
V("ROOK_OUTPOST_BONUS", SB(10, 6));
V("ROOK_CAN_MOVE_TO_OPEN_FILE", SB(8, 9));
V("ROOK_THREATENED_BY_KNIGHT_MOVE", SB(-6, -10));
V("ROOK_TRAPPED_BY_KING", SB(-24, -5));
V("ROOK_TRAPPED_BY_KING_PARTIAL", SB(-11, 0));
V("ROOK_FILE_OPEN", SB(19, 20));
V("ROOK_FILE_OPEN_OPP_OUTPOST", SB(13, 12));
V("ROOK_FILE_HALF_OPEN_WEAK", SB(3, 12));
V("ROOK_FILE_HALF_OPEN", SB(4, 3));
V("ROOK_FILE_HALF_OPEN_DEFENDED_PAWN", SB(-4, -1));
V("ROOK_FILE_MOBILE_PAWN", SB(-2, 3));
V("ROOK_FILE_BLOCKED_PAWN_BY_PIECE", SB(-6, 2));
V("ROOK_FILE_BLOCKED_PAWN", SB(-11, -12));
V("ROOKS_TWO_7_K8", SB(35, 80));
EndGroup();
Group("QueenV", &QueenV);
V("QUEEN_MOB_MIN", SB(-41, -56));
V("QUEEN_MOB_MAX", SB(17, 76));
V("QUEEN_MOB_CURVE_FACTOR", SB(9, 3));
V("QUEEN_OPP_ROOK_ON_FILE", SB(-10, -1));
V("QUEEN_OPP_SIDE", SB(-2, 21));
V("QUEEN_NO_RETREAT", SB(-20, -3));
EndGroup();
Group("TacticalV", &TacticalV);
V("PIECE_HANGING_TO_PAWN", SB(70, 40));
V("ROOK_HANGING_TO_MINOR", SB(57, 25));
V("QUEEN_HANGING_TO_LESSER_PIECE", SB(59, 51));
V("KNIGHT_ON_BISHOP", SB(35, 19));
V("UNDEFENDED_PIECE_HANGING", SB(43, 34));
V("UNDEFENDED_PAWN_HANGING", SB(14, 21));
V("WEAKLY_DEFENDED_PAWN", SB(2, 8));
V("WEAKLY_DEFENDED_PIECE", SB(14, 23));
V("PIECE_CAN_BE_THREATENED_BY_PAWN", SB(19, 18));
V("PINNED_PIECE_THREATENED", SB(76, 106));
V("KING_ON_PAWN", SB(0, 14));
V("QUEEN_THREATENED_BY_KNIGHT_MOVE", SB(23, 8));
V("QUEEN_THREATENED_BY_BISHOP_ROOK_MOVE", SB(27, 9));
V("QUEEN_BEHIND_PIN", SB(42, 14));
V("BISHOP_ON_KNIGHT", SB(24, 14));
V("PINNED_PAWN_PUSH_THREAT", SB(15, 23));
EndGroup();
Group("CoordV", &CoordV);
V("MINOR_BEHIND_PAWN", SB(7, 3));
V("PAWN_BLOCKED_BY_PIECE", SB(-4, -5));
V("PAWN_BLOCKED_BY_PIECE_CENTER", SB(-9, -8));
V("OUR_SIDE_SAFE_MOVE", SB(16, 0));
EndGroup();
Group("KingV", &KingV);
V("WEAK_SQ_COVER", 3);
V("WEAK_SQ_DOUBLE_COVER", 2);
V("EXTENDED_WEAK_SQ_COVER", 2);
V("BASE_COVER_BY_PIECE", 3);
V("SQ_COVER_BY_PIECE", 9);
V("SAFE_BISHOP_CHECK_ADJUST", -3);
V("SAFE_CHECK_SCORE", { 0, 10, 15, 20, 25, 29 });
V("TOUCH_CHECK_ADJUST", 4);
V("UNSAFE_CHECK", 2);
V("MULTIPLE_UNSAFE_CHECKS", 3);
V("DISCOVERED_CHECK", 21);
V("PROMO_CHECK", 19);
V("KS_COUNT_ZONE", 4);
V("KS_COUNT_EXTENDED_ZONE", 2);
V("DEF_KING_ZONE", 150, 5);
V("DEF_KING_ZONE_COVERED", 115, 5);
V("DEF_EXTENDED_KING_ZONE", 125, 5);
V("DEF_COVER_MUL", 18);
V("DEF_MOBILITY_MUL", 13);
V("DEF_BASE", 2626, 10);
V("DEF_MIN", 660, 5);
V("ATTACK_BASE", 17);
V("ATTACK_SUB", 241, 2);
V("ATTACK_DIV", 57);
V("COVER_SUB", 22);
V("KS_OPEN_FILE", -6);
V("KS_COVER_PAWN_ENPRISE", -13);
V("KS_OPEN_FILE_COUNT", -2);
V("CASTLE_VAL_MID", 19);
V("TRAPPED_BACKRANK_BY_PAWN", -23);
V("TRAPPED_BACKRANK_BLOCKED", -22);
V("WEAK_BACK_RANK", -6);
EndGroup();
Group("EndGameV", &EndGameV);
V("PAWN_DIST_MULT", -5);
V("KING_STUCK_ON_EDGE", -5);
V("OUTSIDE_PASSED_PAWN_ONE_PIECE", 12);
V("OUTSIDE_PASSED_PAWN_ONE_KNIGHT", 54);
V("OUTSIDE_PASSED_PAWN_KPK", { -22, 0, 19, 37, 35 });
V("KING_OUTSIDE_PAWNS_ENDGAME", { 1, -5, -17, -37, -52, -58 });
V("KING_MOBILITY", { -29, -3, 6, 9, 9, 9, 9, 6, 0 });
V("KING_OUTSIDE_PAWNS_PENALTY_KPK", { 2, -3, -4, 53, 105, 167 });
EndGroup();
Group("ScaleV", &ScaleV);
V("SCALE_LOW_SPREAD_BASE", 27);
V("SCALE_PAWN_SPREAD", 5);
V("SCALE_PAWN_BOTH_SIDES", 6);
V("SCALE_PAWN_COUNT", 7);
V("SCALE_KING_DIST", 4);
V("SCALE_PIECE_MAT", 34);
EndGroup();
Group("PawnV", &PawnV);
V("PAWN_SUPPORTED", SB(3, 3));
V("PAWN_SUPPORTED_TWICE", SB(15, 7));
V("PAWN_BACKWARD", SB(-4, -6));
V("PAWN_ISOLATED", SB(-2, -9));
V("PAWN_UNCONNECTED_OPEN_FILE", SB(-10, 1));
V("PAWN_UNCONNECTED_CLOSED_FILE", SB(-7, 0));
V("PAWN_WEAK_OPEN_FILE", SB(-7, -8));
V("PAWN_DOUBLED", { SB(-6,-12), SB(-1,0) });
V("PAWN_CONNECTED_RANK", { SB(0,0), SB(-4,-1), SB(2,4), SB(2,1), SB(7,3), SB(16,24), SB(86,49), SB(0,0) });
V("PAWN_CONNECTED_FILE", { SB(-3,-2), SB(0,3), SB(3,3), SB(1,6) });
V("PAWN_CONNECTED_OPEN_RANK", { SB(3,2), SB(4,6), SB(11,15), SB(23,17) });
EndGroup();
Group("PassedV", &PassedV);
V("PP_PASSED_RANK", { SB(-1,-2), SB(-7,8), SB(-2,10), SB(-4,20), SB(11,36), SB(56,71), SB(103,135), SB(0,0) });
V("PP_PASSED_FILE", { SB(3,1), SB(-7,-3), SB(-14,-7), SB(-9,-10) });
V("PP_KING_DIST", { SB(43,133), SB(69,119), SB(57,79), SB(45,40), SB(16,13), SB(5,1), SB(-12,-4), SB(-14,2) });
V("PP_O_KING_DIST", { SB(-75,-89), SB(-40,-74), SB(-11,-62), SB(-3,-3), SB(-2,33), SB(10,48), SB(42,60), SB(71,49) });
V("PP_PROMO_DIST", { SB(140,112), SB(109,92), SB(48,52), SB(14,26), SB(8,8), SB(8,3) });
V("PP_COVERED_ADVANCE", { SB(34,77), SB(29,36), SB(16,15), SB(10,8) });
V("PP_COVERED_ADVANCE_PATH", { SB(58,98), SB(20,60), SB(20,32), SB(17,17) });
V("PP_FREE_PUSH", { SB(161,133), SB(18,51), SB(9,21), SB(6,2) });
V("PP_FREE_ADVANCE_PATH", { SB(133,221), SB(52,126), SB(-5,45), SB(-42,18) });
V("PP_CONNECTED", { SB(63,39), SB(17,15), SB(4,9), SB(1,3) });
V("PP_HANGING", { SB(-28,-40), SB(-26,-15) });
V("PP_V_ROOK_MULT", SB(100, 110), 5);
V("PP_CANDIDATE_NEAR_MULT", SB(115, 85), 5);
V("PP_CANDIDATE_FAR_MULT", SB(30, 30), 5);
EndGroup();