mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 01:03:09 +00:00
Introduce penalty for weak (=unsupported) pawns.
We add a penalty for each pawn which is not protected by another pawn of the same color. Passed both short TC LLR: 2.96 (-2.94,2.94) [-1.50,4.50] Total: 12107 W: 2411 L: 2272 D: 7424 And long TC LLR: 2.96 (-2.94,2.94) [0.00,6.00] Total: 9204 W: 1605 L: 1458 D: 6141 bench: 7682173
This commit is contained in:
parent
9e72e35942
commit
e7362dae78
1 changed files with 21 additions and 11 deletions
|
@ -60,6 +60,9 @@ namespace {
|
|||
// Bonus for file distance of the two outermost pawns
|
||||
const Score PawnsFileSpan = S(0, 15);
|
||||
|
||||
// Unsupported pawn penalty
|
||||
const Score UnsupportedPawnPenalty = S(20, 10);
|
||||
|
||||
// Weakness of our pawn shelter in front of the king indexed by [rank]
|
||||
const Value ShelterWeakness[RANK_NB] =
|
||||
{ V(100), V(0), V(27), V(73), V(92), V(101), V(101) };
|
||||
|
@ -86,10 +89,10 @@ namespace {
|
|||
const Square Right = (Us == WHITE ? DELTA_NE : DELTA_SW);
|
||||
const Square Left = (Us == WHITE ? DELTA_NW : DELTA_SE);
|
||||
|
||||
Bitboard b;
|
||||
Bitboard b, p;
|
||||
Square s;
|
||||
File f;
|
||||
bool passed, isolated, doubled, opposed, connected, backward, candidate;
|
||||
bool passed, isolated, doubled, opposed, connected, backward, candidate, unsupported;
|
||||
Score value = SCORE_ZERO;
|
||||
const Square* pl = pos.list<PAWN>(Us);
|
||||
|
||||
|
@ -113,16 +116,20 @@ namespace {
|
|||
// This file cannot be semi-open
|
||||
e->semiopenFiles[Us] &= ~(1 << f);
|
||||
|
||||
// Our rank plus previous one
|
||||
b = rank_bb(s) | rank_bb(s - pawn_push(Us));
|
||||
// Previous rank
|
||||
p = rank_bb(s - pawn_push(Us));
|
||||
|
||||
// Flag the pawn as passed, isolated, doubled or
|
||||
// connected (but not the backward one).
|
||||
connected = ourPawns & adjacent_files_bb(f) & b;
|
||||
isolated = !(ourPawns & adjacent_files_bb(f));
|
||||
doubled = ourPawns & forward_bb(Us, s);
|
||||
opposed = theirPawns & forward_bb(Us, s);
|
||||
passed = !(theirPawns & passed_pawn_mask(Us, s));
|
||||
// Our rank plus previous one
|
||||
b = rank_bb(s) | p;
|
||||
|
||||
// Flag the pawn as passed, isolated, doubled,
|
||||
// unsupported or connected (but not the backward one).
|
||||
connected = ourPawns & adjacent_files_bb(f) & b;
|
||||
unsupported = !(ourPawns & adjacent_files_bb(f) & p);
|
||||
isolated = !(ourPawns & adjacent_files_bb(f));
|
||||
doubled = ourPawns & forward_bb(Us, s);
|
||||
opposed = theirPawns & forward_bb(Us, s);
|
||||
passed = !(theirPawns & passed_pawn_mask(Us, s));
|
||||
|
||||
// Test for backward pawn.
|
||||
// If the pawn is passed, isolated, or connected it cannot be
|
||||
|
@ -166,6 +173,9 @@ namespace {
|
|||
if (isolated)
|
||||
value -= Isolated[opposed][f];
|
||||
|
||||
if (unsupported && !isolated)
|
||||
value -= UnsupportedPawnPenalty;
|
||||
|
||||
if (doubled)
|
||||
value -= Doubled[f];
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue