1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Halve PSQT row data

Use symmetry along vertical middle axis of the board
to reduce the number of parameters.

For instance psqt value of SQ_A5 == SQ_A4 and value of
SQ_F8 == SQ_F1.

This is always true, at least until now nobody came in
with an asymmetric psqt table that worked.

Original patch by Lucas.

No functional change.
This commit is contained in:
Marco Costalba 2015-05-03 08:06:10 +02:00
parent 578b21bbee
commit 7231b18af1

View file

@ -23,70 +23,71 @@ namespace PSQT {
#define S(mg, eg) make_score(mg, eg)
/// BaseTable[PieceType][Square] contains Piece-Square scores. For each piece
/// type on a given square a (middlegame, endgame) score pair is assigned. Table
/// is defined just for the white side; it is symmetric for the black side.
const Score BaseTable[][SQUARE_NB] = {
// Bonus[PieceType][Square / 2] contains Piece-Square scores. For each piece
// type on a given square a (middlegame, endgame) score pair is assigned. Table
// is defined for files A..D and white side: it is symmetric for black side and
// second half of the files.
const Score Bonus[][int(SQUARE_NB) / 2] = {
{ },
{ // Pawn
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(-22, 4), S( 3,-6), S( 7, 8), S( 3,-1), S( 3,-1), S( 7, 8), S( 3,-6), S(-22, 4),
S(-25,-3), S( -7,-4), S(18, 4), S(24, 5), S(24, 5), S(18, 4), S( -7,-4), S(-25,-3),
S(-27, 1), S(-15, 2), S(15,-8), S(30,-2), S(30,-2), S(15,-8), S(-15, 2), S(-27, 1),
S(-14, 7), S( 0,12), S(-2, 4), S(18,-3), S(18,-3), S(-2, 4), S( 0,12), S(-14, 7),
S(-12, 8), S(-13,-5), S(-6, 1), S(-4, 7), S(-4, 7), S(-6, 1), S(-13,-5), S(-12, 8),
S(-17, 1), S( 10,-9), S(-4, 1), S(-6,16), S(-6,16), S(-4, 1), S( 10,-9), S(-17, 1),
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(-22, 4), S( 3,-6), S( 7, 8), S( 3,-1),
S(-25,-3), S( -7,-4), S(18, 4), S(24, 5),
S(-27, 1), S(-15, 2), S(15,-8), S(30,-2),
S(-14, 7), S( 0,12), S(-2, 4), S(18,-3),
S(-12, 8), S(-13,-5), S(-6, 1), S(-4, 7),
S(-17, 1), S( 10,-9), S(-4, 1), S(-6,16),
S( 0, 0), S( 0, 0), S( 0, 0), S( 0, 0)
},
{ // Knight
S(-144,-98), S(-109,-83), S(-85,-51), S(-73,-16), S(-73,-16), S(-85,-51), S(-109,-83), S(-144,-98),
S( -88,-68), S( -43,-53), S(-19,-21), S( -7, 14), S( -7, 14), S(-19,-21), S( -43,-53), S( -88,-68),
S( -69,-53), S( -24,-38), S( 0, -6), S( 12, 29), S( 12, 29), S( 0, -6), S( -24,-38), S( -69,-53),
S( -28,-42), S( 17,-27), S( 41, 5), S( 53, 40), S( 53, 40), S( 41, 5), S( 17,-27), S( -28,-42),
S( -30,-42), S( 15,-27), S( 39, 5), S( 51, 40), S( 51, 40), S( 39, 5), S( 15,-27), S( -30,-42),
S( -10,-53), S( 35,-38), S( 59, -6), S( 71, 29), S( 71, 29), S( 59, -6), S( 35,-38), S( -10,-53),
S( -64,-68), S( -19,-53), S( 5,-21), S( 17, 14), S( 17, 14), S( 5,-21), S( -19,-53), S( -64,-68),
S(-200,-98), S( -65,-83), S(-41,-51), S(-29,-16), S(-29,-16), S(-41,-51), S( -65,-83), S(-200,-98)
S(-144,-98), S(-109,-83), S(-85,-51), S(-73,-16),
S( -88,-68), S( -43,-53), S(-19,-21), S( -7, 14),
S( -69,-53), S( -24,-38), S( 0, -6), S( 12, 29),
S( -28,-42), S( 17,-27), S( 41, 5), S( 53, 40),
S( -30,-42), S( 15,-27), S( 39, 5), S( 51, 40),
S( -10,-53), S( 35,-38), S( 59, -6), S( 71, 29),
S( -64,-68), S( -19,-53), S( 5,-21), S( 17, 14),
S(-200,-98), S( -65,-83), S(-41,-51), S(-29,-16)
},
{ // Bishop
S(-54,-65), S(-27,-42), S(-34,-44), S(-43,-26), S(-43,-26), S(-34,-44), S(-27,-42), S(-54,-65),
S(-29,-43), S( 8,-20), S( 1,-22), S( -8, -4), S( -8, -4), S( 1,-22), S( 8,-20), S(-29,-43),
S(-20,-33), S( 17,-10), S( 10,-12), S( 1, 6), S( 1, 6), S( 10,-12), S( 17,-10), S(-20,-33),
S(-19,-35), S( 18,-12), S( 11,-14), S( 2, 4), S( 2, 4), S( 11,-14), S( 18,-12), S(-19,-35),
S(-22,-35), S( 15,-12), S( 8,-14), S( -1, 4), S( -1, 4), S( 8,-14), S( 15,-12), S(-22,-35),
S(-28,-33), S( 9,-10), S( 2,-12), S( -7, 6), S( -7, 6), S( 2,-12), S( 9,-10), S(-28,-33),
S(-32,-43), S( 5,-20), S( -2,-22), S(-11, -4), S(-11, -4), S( -2,-22), S( 5,-20), S(-32,-43),
S(-49,-65), S(-22,-42), S(-29,-44), S(-38,-26), S(-38,-26), S(-29,-44), S(-22,-42), S(-49,-65)
S(-54,-65), S(-27,-42), S(-34,-44), S(-43,-26),
S(-29,-43), S( 8,-20), S( 1,-22), S( -8, -4),
S(-20,-33), S( 17,-10), S( 10,-12), S( 1, 6),
S(-19,-35), S( 18,-12), S( 11,-14), S( 2, 4),
S(-22,-35), S( 15,-12), S( 8,-14), S( -1, 4),
S(-28,-33), S( 9,-10), S( 2,-12), S( -7, 6),
S(-32,-43), S( 5,-20), S( -2,-22), S(-11, -4),
S(-49,-65), S(-22,-42), S(-29,-44), S(-38,-26)
},
{ // Rook
S(-22, 3), S(-17, 3), S(-12, 3), S(-8, 3), S(-8, 3), S(-12, 3), S(-17, 3), S(-22, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3), S( 2, 3), S( -2, 3), S( -7, 3), S(-22, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3), S( 2, 3), S( -2, 3), S( -7, 3), S(-22, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3), S( 2, 3), S( -2, 3), S( -7, 3), S(-22, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3), S( 2, 3), S( -2, 3), S( -7, 3), S(-22, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3), S( 2, 3), S( -2, 3), S( -7, 3), S(-22, 3),
S(-11, 3), S( 4, 3), S( 9, 3), S(13, 3), S(13, 3), S( 9, 3), S( 4, 3), S(-11, 3),
S(-22, 3), S(-17, 3), S(-12, 3), S(-8, 3), S(-8, 3), S(-12, 3), S(-17, 3), S(-22, 3)
S(-22, 3), S(-17, 3), S(-12, 3), S(-8, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3),
S(-22, 3), S( -7, 3), S( -2, 3), S( 2, 3),
S(-11, 3), S( 4, 3), S( 9, 3), S(13, 3),
S(-22, 3), S(-17, 3), S(-12, 3), S(-8, 3)
},
{ // Queen
S(-2,-80), S(-2,-54), S(-2,-42), S(-2,-30), S(-2,-30), S(-2,-42), S(-2,-54), S(-2,-80),
S(-2,-54), S( 8,-30), S( 8,-18), S( 8, -6), S( 8, -6), S( 8,-18), S( 8,-30), S(-2,-54),
S(-2,-42), S( 8,-18), S( 8, -6), S( 8, 6), S( 8, 6), S( 8, -6), S( 8,-18), S(-2,-42),
S(-2,-30), S( 8, -6), S( 8, 6), S( 8, 18), S( 8, 18), S( 8, 6), S( 8, -6), S(-2,-30),
S(-2,-30), S( 8, -6), S( 8, 6), S( 8, 18), S( 8, 18), S( 8, 6), S( 8, -6), S(-2,-30),
S(-2,-42), S( 8,-18), S( 8, -6), S( 8, 6), S( 8, 6), S( 8, -6), S( 8,-18), S(-2,-42),
S(-2,-54), S( 8,-30), S( 8,-18), S( 8, -6), S( 8, -6), S( 8,-18), S( 8,-30), S(-2,-54),
S(-2,-80), S(-2,-54), S(-2,-42), S(-2,-30), S(-2,-30), S(-2,-42), S(-2,-54), S(-2,-80)
S(-2,-80), S(-2,-54), S(-2,-42), S(-2,-30),
S(-2,-54), S( 8,-30), S( 8,-18), S( 8, -6),
S(-2,-42), S( 8,-18), S( 8, -6), S( 8, 6),
S(-2,-30), S( 8, -6), S( 8, 6), S( 8, 18),
S(-2,-30), S( 8, -6), S( 8, 6), S( 8, 18),
S(-2,-42), S( 8,-18), S( 8, -6), S( 8, 6),
S(-2,-54), S( 8,-30), S( 8,-18), S( 8, -6),
S(-2,-80), S(-2,-54), S(-2,-42), S(-2,-30)
},
{ // King
S(298, 27), S(332, 81), S(273,108), S(225,116), S(225,116), S(273,108), S(332, 81), S(298, 27),
S(287, 74), S(321,128), S(262,155), S(214,163), S(214,163), S(262,155), S(321,128), S(287, 74),
S(224,111), S(258,165), S(199,192), S(151,200), S(151,200), S(199,192), S(258,165), S(224,111),
S(196,135), S(230,189), S(171,216), S(123,224), S(123,224), S(171,216), S(230,189), S(196,135),
S(173,135), S(207,189), S(148,216), S(100,224), S(100,224), S(148,216), S(207,189), S(173,135),
S(146,111), S(180,165), S(121,192), S( 73,200), S( 73,200), S(121,192), S(180,165), S(146,111),
S(119, 74), S(153,128), S( 94,155), S( 46,163), S( 46,163), S( 94,155), S(153,128), S(119, 74),
S( 98, 27), S(132, 81), S( 73,108), S( 25,116), S( 25,116), S( 73,108), S(132, 81), S( 98, 27)
S(298, 27), S(332, 81), S(273,108), S(225,116),
S(287, 74), S(321,128), S(262,155), S(214,163),
S(224,111), S(258,165), S(199,192), S(151,200),
S(196,135), S(230,189), S(171,216), S(123,224),
S(173,135), S(207,189), S(148,216), S(100,224),
S(146,111), S(180,165), S(121,192), S( 73,200),
S(119, 74), S(153,128), S( 94,155), S( 46,163),
S( 98, 27), S(132, 81), S( 73,108), S( 25,116)
}
};
@ -95,7 +96,7 @@ const Score BaseTable[][SQUARE_NB] = {
Score psq[COLOR_NB][PIECE_TYPE_NB][SQUARE_NB];
// init() initializes piece square tables: the white halves of the tables are
// copied from BaseTable[] adding the piece value, then the black halves of the
// copied from Bonus[] adding the piece value, then the black halves of the
// tables are initialized by flipping and changing the sign of the white scores.
void init() {
@ -107,7 +108,11 @@ void init() {
Score v = make_score(PieceValue[MG][pt], PieceValue[EG][pt]);
for (Square s = SQ_A1; s <= SQ_H8; ++s)
psq[BLACK][pt][~s] = -(psq[WHITE][pt][ s] = (v + BaseTable[pt][s]));
{
// Flip to the left half of the board and subtract 4 for each rank
int ss = (file_of(s) < FILE_E ? s : s ^ 7) - 4 * rank_of(s);
psq[BLACK][pt][~s] = -(psq[WHITE][pt][s] = v + Bonus[pt][ss]);
}
}
}