- // Doubled pawn penalty by opposed flag and file
- const Score DoubledPawnPenalty[2][8] = {
- { S(13, 43), S(20, 48), S(23, 48), S(23, 48),
- S(23, 48), S(23, 48), S(20, 48), S(13, 43) },
- { S(13, 43), S(20, 48), S(23, 48), S(23, 48),
- S(23, 48), S(23, 48), S(20, 48), S(13, 43) }};
-
- // Isolated pawn penalty by opposed flag and file
- const Score IsolatedPawnPenalty[2][8] = {
- { S(37, 45), S(54, 52), S(60, 52), S(60, 52),
- S(60, 52), S(60, 52), S(54, 52), S(37, 45) },
- { S(25, 30), S(36, 35), S(40, 35), S(40, 35),
- S(40, 35), S(40, 35), S(36, 35), S(25, 30) }};
-
- // Backward pawn penalty by opposed flag and file
- const Score BackwardPawnPenalty[2][8] = {
- { S(30, 42), S(43, 46), S(49, 46), S(49, 46),
- S(49, 46), S(49, 46), S(43, 46), S(30, 42) },
- { S(20, 28), S(29, 31), S(33, 31), S(33, 31),
- S(33, 31), S(33, 31), S(29, 31), S(20, 28) }};
-
- // Pawn chain membership bonus by file
- const Score ChainBonus[8] = {
- S(11,-1), S(13,-1), S(13,-1), S(14,-1),
- S(14,-1), S(13,-1), S(13,-1), S(11,-1)
+ // Weakness of our pawn shelter in front of the king by [distance from edge][rank].
+ // RANK_1 = 0 is used for files where we have no pawns, or where our pawn is behind our king.
+ const Value ShelterWeakness[][RANK_NB] = {
+ { V(100), V(20), V(10), V(46), V(82), V( 86), V( 98) },
+ { V(116), V( 4), V(28), V(87), V(94), V(108), V(104) },
+ { V(109), V( 1), V(59), V(87), V(62), V( 91), V(116) },
+ { V( 75), V(12), V(43), V(59), V(90), V( 84), V(112) }