mirror of
https://github.com/sockspls/badfish
synced 2025-05-02 09:39:36 +00:00
Simplify some kingring penalties expressions
The new "weak" expression helps simplify the safe check calculations for rooks or minors, (but the end result for all the safe checks is the exactly the same as in current master) The only functional change is for the "outer king ring" (for example, squares f3 g3 h3 when white king is on g1). In current master, there was a 191 penalty if any of these was not defended at all. With this pr, there is this 191 penalty if any of these is not defended at all or is only defended by a white queen. Tested as a simplification STC http://tests.stockfishchess.org/tests/view/59fb03d80ebc590ccbb89fee LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 66167 W: 12015 L: 11971 D: 42181 (against master (Update Copyright year inMakefile)) LTC http://tests.stockfishchess.org/tests/view/5a0106ae0ebc590ccbb8a55f LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 15790 W: 2095 L: 1968 D: 11727 (against master (Handle BxN trade as good capture when history scor)) same as #1296 but rebased on latest master bench: 5109559
This commit is contained in:
parent
3f44f5303b
commit
53239d7d3d
1 changed files with 8 additions and 20 deletions
|
@ -421,7 +421,7 @@ namespace {
|
|||
: AllSquares ^ Rank1BB ^ Rank2BB ^ Rank3BB);
|
||||
|
||||
const Square ksq = pos.square<KING>(Us);
|
||||
Bitboard kingOnlyDefended, undefended, b, b1, b2, safe, other;
|
||||
Bitboard weak, b, b1, b2, safe, other;
|
||||
int kingDanger;
|
||||
|
||||
// King shelter and enemy pawns storm
|
||||
|
@ -430,16 +430,10 @@ namespace {
|
|||
// Main king safety evaluation
|
||||
if (kingAttackersCount[Them] > (1 - pos.count<QUEEN>(Them)))
|
||||
{
|
||||
// Find the attacked squares which are defended only by our king...
|
||||
kingOnlyDefended = attackedBy[Them][ALL_PIECES]
|
||||
& attackedBy[Us][KING]
|
||||
& ~attackedBy2[Us];
|
||||
|
||||
// ... and those which are not defended at all in the larger king ring
|
||||
undefended = attackedBy[Them][ALL_PIECES]
|
||||
& ~attackedBy[Us][ALL_PIECES]
|
||||
& kingRing[Us]
|
||||
& ~pos.pieces(Them);
|
||||
// Attacked squares defended at most once by our queen or king
|
||||
weak = attackedBy[Them][ALL_PIECES]
|
||||
& ~attackedBy2[Us]
|
||||
& (attackedBy[Us][KING] | attackedBy[Us][QUEEN] | ~attackedBy[Us][ALL_PIECES]);
|
||||
|
||||
// Initialize the 'kingDanger' variable, which will be transformed
|
||||
// later into a king danger score. The initial value is based on the
|
||||
|
@ -448,7 +442,7 @@ namespace {
|
|||
// the quality of the pawn shelter (current 'score' value).
|
||||
kingDanger = kingAttackersCount[Them] * kingAttackersWeight[Them]
|
||||
+ 102 * kingAdjacentZoneAttacksCount[Them]
|
||||
+ 191 * popcount(kingOnlyDefended | undefended)
|
||||
+ 191 * popcount(kingRing[Us] & weak)
|
||||
+ 143 * !!pos.pinned_pieces(Us)
|
||||
- 848 * !pos.count<QUEEN>(Them)
|
||||
- 9 * mg_value(score) / 8
|
||||
|
@ -456,21 +450,15 @@ namespace {
|
|||
|
||||
// Analyse the safe enemy's checks which are possible on next move
|
||||
safe = ~pos.pieces(Them);
|
||||
safe &= ~attackedBy[Us][ALL_PIECES] | (kingOnlyDefended & attackedBy2[Them]);
|
||||
safe &= ~attackedBy[Us][ALL_PIECES] | (weak & attackedBy2[Them]);
|
||||
|
||||
b1 = pos.attacks_from< ROOK>(ksq);
|
||||
b2 = pos.attacks_from<BISHOP>(ksq);
|
||||
|
||||
// Enemy queen safe checks
|
||||
if ((b1 | b2) & attackedBy[Them][QUEEN] & safe)
|
||||
if ((b1 | b2) & attackedBy[Them][QUEEN] & safe & ~attackedBy[Us][QUEEN])
|
||||
kingDanger += QueenCheck;
|
||||
|
||||
// For minors and rooks, also consider the square safe if attacked twice,
|
||||
// and only defended by our queen.
|
||||
safe |= attackedBy2[Them]
|
||||
& ~(attackedBy2[Us] | pos.pieces(Them))
|
||||
& attackedBy[Us][QUEEN];
|
||||
|
||||
// Some other potential checks are also analysed, even from squares
|
||||
// currently occupied by the opponent own pieces, as long as the square
|
||||
// is not attacked by our pawns, and is not occupied by a blocked pawn.
|
||||
|
|
Loading…
Add table
Reference in a new issue