mirror of
https://github.com/sockspls/badfish
synced 2025-05-02 17:49:35 +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
|
// Bonus for file distance of the two outermost pawns
|
||||||
const Score PawnsFileSpan = S(0, 15);
|
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]
|
// Weakness of our pawn shelter in front of the king indexed by [rank]
|
||||||
const Value ShelterWeakness[RANK_NB] =
|
const Value ShelterWeakness[RANK_NB] =
|
||||||
{ V(100), V(0), V(27), V(73), V(92), V(101), V(101) };
|
{ 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 Right = (Us == WHITE ? DELTA_NE : DELTA_SW);
|
||||||
const Square Left = (Us == WHITE ? DELTA_NW : DELTA_SE);
|
const Square Left = (Us == WHITE ? DELTA_NW : DELTA_SE);
|
||||||
|
|
||||||
Bitboard b;
|
Bitboard b, p;
|
||||||
Square s;
|
Square s;
|
||||||
File f;
|
File f;
|
||||||
bool passed, isolated, doubled, opposed, connected, backward, candidate;
|
bool passed, isolated, doubled, opposed, connected, backward, candidate, unsupported;
|
||||||
Score value = SCORE_ZERO;
|
Score value = SCORE_ZERO;
|
||||||
const Square* pl = pos.list<PAWN>(Us);
|
const Square* pl = pos.list<PAWN>(Us);
|
||||||
|
|
||||||
|
@ -113,16 +116,20 @@ namespace {
|
||||||
// This file cannot be semi-open
|
// This file cannot be semi-open
|
||||||
e->semiopenFiles[Us] &= ~(1 << f);
|
e->semiopenFiles[Us] &= ~(1 << f);
|
||||||
|
|
||||||
// Our rank plus previous one
|
// Previous rank
|
||||||
b = rank_bb(s) | rank_bb(s - pawn_push(Us));
|
p = rank_bb(s - pawn_push(Us));
|
||||||
|
|
||||||
// Flag the pawn as passed, isolated, doubled or
|
// Our rank plus previous one
|
||||||
// connected (but not the backward one).
|
b = rank_bb(s) | p;
|
||||||
connected = ourPawns & adjacent_files_bb(f) & b;
|
|
||||||
isolated = !(ourPawns & adjacent_files_bb(f));
|
// Flag the pawn as passed, isolated, doubled,
|
||||||
doubled = ourPawns & forward_bb(Us, s);
|
// unsupported or connected (but not the backward one).
|
||||||
opposed = theirPawns & forward_bb(Us, s);
|
connected = ourPawns & adjacent_files_bb(f) & b;
|
||||||
passed = !(theirPawns & passed_pawn_mask(Us, s));
|
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.
|
// Test for backward pawn.
|
||||||
// If the pawn is passed, isolated, or connected it cannot be
|
// If the pawn is passed, isolated, or connected it cannot be
|
||||||
|
@ -166,6 +173,9 @@ namespace {
|
||||||
if (isolated)
|
if (isolated)
|
||||||
value -= Isolated[opposed][f];
|
value -= Isolated[opposed][f];
|
||||||
|
|
||||||
|
if (unsupported && !isolated)
|
||||||
|
value -= UnsupportedPawnPenalty;
|
||||||
|
|
||||||
if (doubled)
|
if (doubled)
|
||||||
value -= Doubled[f];
|
value -= Doubled[f];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue