mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-21 09:37:16 +08:00
Bonus for restricting opponent's piece moves
STC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 51883 W: 11297 L: 10915 D: 29671 http://tests.stockfishchess.org/tests/view/5bf1e2ee0ebc595e0ae3cacd LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 15859 W: 2752 L: 2565 D: 10542 http://tests.stockfishchess.org/tests/view/5bf337980ebc5902bcecbf62 Notes: (1) The bonus value has not been carefully tested, so it may be possible to find slightly better values. (2) Plan is to now try adding similar restriction for pawns. I wanted to include that as part of this pull request, but I was advised to do it as two separate pull requests. STC is currently running here, but may not add enough value to pass green. Bench: 3679086
This commit is contained in:
committed by
Stéphane Nicolet
parent
cf5d683408
commit
3925750945
@@ -162,6 +162,7 @@ namespace {
|
|||||||
constexpr Score MinorBehindPawn = S( 16, 0);
|
constexpr Score MinorBehindPawn = S( 16, 0);
|
||||||
constexpr Score Overload = S( 12, 6);
|
constexpr Score Overload = S( 12, 6);
|
||||||
constexpr Score PawnlessFlank = S( 18, 94);
|
constexpr Score PawnlessFlank = S( 18, 94);
|
||||||
|
constexpr Score RestrictedPiece = S( 7, 6);
|
||||||
constexpr Score RookOnPawn = S( 10, 28);
|
constexpr Score RookOnPawn = S( 10, 28);
|
||||||
constexpr Score SliderOnQueen = S( 49, 21);
|
constexpr Score SliderOnQueen = S( 49, 21);
|
||||||
constexpr Score ThreatByKing = S( 21, 84);
|
constexpr Score ThreatByKing = S( 21, 84);
|
||||||
@@ -508,7 +509,7 @@ namespace {
|
|||||||
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
|
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
|
||||||
constexpr Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB);
|
constexpr Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB);
|
||||||
|
|
||||||
Bitboard b, weak, defended, nonPawnEnemies, stronglyProtected, safe;
|
Bitboard b, weak, defended, nonPawnEnemies, stronglyProtected, safe, restricted;
|
||||||
Score score = SCORE_ZERO;
|
Score score = SCORE_ZERO;
|
||||||
|
|
||||||
// Non-pawn enemies
|
// Non-pawn enemies
|
||||||
@@ -558,6 +559,13 @@ namespace {
|
|||||||
score += Overload * popcount(b);
|
score += Overload * popcount(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bonus for restricting their piece moves
|
||||||
|
restricted = attackedBy[Them][ALL_PIECES]
|
||||||
|
& ~attackedBy[Them][PAWN]
|
||||||
|
& ~attackedBy2[Them]
|
||||||
|
& attackedBy[Us][ALL_PIECES];
|
||||||
|
score += RestrictedPiece * popcount(restricted);
|
||||||
|
|
||||||
// Bonus for enemy unopposed weak pawns
|
// Bonus for enemy unopposed weak pawns
|
||||||
if (pos.pieces(Us, ROOK, QUEEN))
|
if (pos.pieces(Us, ROOK, QUEEN))
|
||||||
score += WeakUnopposedPawn * pe->weak_unopposed(Them);
|
score += WeakUnopposedPawn * pe->weak_unopposed(Them);
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ Value Entry::evaluate_shelter(const Position& pos, Square ksq) {
|
|||||||
|
|
||||||
int d = std::min(f, ~f);
|
int d = std::min(f, ~f);
|
||||||
safety += ShelterStrength[d][ourRank];
|
safety += ShelterStrength[d][ourRank];
|
||||||
safety -= (ourRank && (ourRank == theirRank - 1)) ? 66 * (theirRank == RANK_3)
|
safety -= (ourRank && (ourRank == theirRank - 1)) ? 66 * (theirRank == RANK_3)
|
||||||
: UnblockedStorm[d][theirRank];
|
: UnblockedStorm[d][theirRank];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,10 +85,10 @@ namespace {
|
|||||||
return d > 17 ? 0 : 29 * d * d + 138 * d - 134;
|
return d > 17 ? 0 : 29 * d * d + 138 * d - 134;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a small random component to draw evaluations to keep search dynamic
|
// Add a small random component to draw evaluations to keep search dynamic
|
||||||
// and to avoid 3fold-blindness.
|
// and to avoid 3fold-blindness.
|
||||||
Value value_draw(Depth depth, Thread* thisThread) {
|
Value value_draw(Depth depth, Thread* thisThread) {
|
||||||
return depth < 4 ? VALUE_DRAW
|
return depth < 4 ? VALUE_DRAW
|
||||||
: VALUE_DRAW + Value(2 * (thisThread->nodes.load(std::memory_order_relaxed) % 2) - 1);
|
: VALUE_DRAW + Value(2 * (thisThread->nodes.load(std::memory_order_relaxed) % 2) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -599,7 +599,7 @@ namespace {
|
|||||||
if ( Threads.stop.load(std::memory_order_relaxed)
|
if ( Threads.stop.load(std::memory_order_relaxed)
|
||||||
|| pos.is_draw(ss->ply)
|
|| pos.is_draw(ss->ply)
|
||||||
|| ss->ply >= MAX_PLY)
|
|| ss->ply >= MAX_PLY)
|
||||||
return (ss->ply >= MAX_PLY && !inCheck) ? evaluate(pos)
|
return (ss->ply >= MAX_PLY && !inCheck) ? evaluate(pos)
|
||||||
: value_draw(depth, pos.this_thread());
|
: value_draw(depth, pos.this_thread());
|
||||||
|
|
||||||
// Step 3. Mate distance pruning. Even if we mate at the next move our score
|
// Step 3. Mate distance pruning. Even if we mate at the next move our score
|
||||||
|
|||||||
Reference in New Issue
Block a user