Skip to content
Permalink
Browse files

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.
  • Loading branch information...
mcostalba committed May 3, 2015
1 parent 578b21b commit 7231b18af1ee62aeb523da1d1fbd5523b2cfa30b
Showing with 59 additions and 54 deletions.
  1. +59 −54 src/psqt.cpp
@@ -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]);
}
}
}

0 comments on commit 7231b18

Please sign in to comment.
You can’t perform that action at this time.