I'm rewriting my (a new) chess engine from scratch and I'm about to write a basic evaluation function that would at first only consists of material and piece-square table (psqt). For now I'm not gonna do any learning I'm just gonna chooses values that seems sensibles to me, but eventually I'm gonna want to do some automated learning. I'm trying to design my psqt with this in mind.
A psqt traditionally contains 64 (squares) x 6 (pieces) x 2 (phases) -16 (unreachables squares by pawns) = 752 individuals values. This of course is a challenge to learn in an automated way.
To reduce the number of learning parameters I though I would divide the board in a series of overlapping zones and that for each zones I would choose (and later machine-learn) a bonus or a malus to apply to all squares for that zone. This in theory would allow the machine learning algorithm to have less parameters to optimize. I'm guessing this idea isn't new and everyone is doing something like this, but I could not find any reference to this here or on the Chess Programming Wiki.
For my first try I choses the following zones :
- Each row (8);
Each column (8);
The center squares;
The squares off the center;
The squares off off the center;
The corners squares;
The squares off the corners.
Is this something that is usually done to learn piece-squares tables or do you just learn each squares values independently? If you do something like this what zones do you define?