mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Enhance some comments
This documents some code and makes some hard code easier to understand for new developers. closes https://github.com/official-stockfish/Stockfish/pull/4862 No functional change
This commit is contained in:
parent
7f97ba775e
commit
791419aab5
2 changed files with 19 additions and 14 deletions
|
@ -119,7 +119,7 @@ using PieceToHistory = Stats<int16_t, 29952, PIECE_NB, SQUARE_NB>;
|
|||
// (~63 elo)
|
||||
using ContinuationHistory = Stats<PieceToHistory, NOT_USED, PIECE_NB, SQUARE_NB>;
|
||||
|
||||
// PawnStructureHistory is addressed by the pawn structure and a move's [piece][to]
|
||||
// PawnHistory is addressed by the pawn structure and a move's [piece][to]
|
||||
using PawnHistory = Stats<int16_t, 8192, PAWN_HISTORY_SIZE, PIECE_NB, SQUARE_NB>;
|
||||
|
||||
// MovePicker class is used to pick one pseudo-legal move at a time from the
|
||||
|
|
|
@ -1030,9 +1030,10 @@ moves_loop: // When in check, search starts here
|
|||
// Singular extension search (~94 Elo). If all moves but one fail low on a
|
||||
// search of (alpha-s, beta-s), and just one fails high on (alpha, beta),
|
||||
// then that move is singular and should be extended. To verify this we do
|
||||
// a reduced search on all the other moves but the ttMove and if the result
|
||||
// is lower than ttValue minus a margin, then we will extend the ttMove. Note
|
||||
// that depth margin and singularBeta margin are known for having non-linear
|
||||
// a reduced search on the position excluding the ttMove and if the result
|
||||
// is lower than ttValue minus a margin, then we will extend the ttMove.
|
||||
|
||||
// Note: the depth margin and singularBeta margin are known for having non-linear
|
||||
// scaling. Their values are optimized to time controls of 180+1.8 and longer
|
||||
// so changing them requires tests at this type of time controls.
|
||||
// Recursive singular search is avoided.
|
||||
|
@ -1063,22 +1064,28 @@ moves_loop: // When in check, search starts here
|
|||
}
|
||||
|
||||
// Multi-cut pruning
|
||||
// Our ttMove is assumed to fail high, and now we failed high also on a
|
||||
// reduced search without the ttMove. So we assume this expected cut-node
|
||||
// is not singular, that multiple moves fail high, and we can prune the
|
||||
// whole subtree by returning a softbound.
|
||||
// Our ttMove is assumed to fail high based on the bound of the TT entry,
|
||||
// and if after excluding the ttMove with a reduced search we fail high over the original beta,
|
||||
// we assume this expected cut-node is not singular (multiple moves fail high),
|
||||
// and we can prune the whole subtree by returning a softbound.
|
||||
else if (singularBeta >= beta)
|
||||
return singularBeta;
|
||||
|
||||
// If the eval of ttMove is greater than beta, reduce it (negative extension) (~7 Elo)
|
||||
// Negative extensions
|
||||
// If other moves failed high over (ttValue - margin) without the ttMove on a reduced search,
|
||||
// but we cannot do multi-cut because (ttValue - margin) is lower than the original beta,
|
||||
// we do not know if the ttMove is singular or can do a multi-cut,
|
||||
// so we reduce the ttMove in favor of other moves based on some conditions:
|
||||
|
||||
// If the ttMove is assumed to fail high over currnet beta (~7 Elo)
|
||||
else if (ttValue >= beta)
|
||||
extension = -2 - !PvNode;
|
||||
|
||||
// If we are on a cutNode, reduce it based on depth (negative extension) (~1 Elo)
|
||||
// If we are on a cutNode but the ttMove is not assumed to fail high over current beta (~1 Elo)
|
||||
else if (cutNode)
|
||||
extension = depth < 19 ? -2 : -1;
|
||||
|
||||
// If the eval of ttMove is less than value, reduce it (negative extension) (~1 Elo)
|
||||
// If the ttMove is assumed to fail low over the value of the reduced search (~1 Elo)
|
||||
else if (ttValue <= value)
|
||||
extension = -1;
|
||||
}
|
||||
|
@ -1411,9 +1418,7 @@ Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {
|
|||
|
||||
assert(0 <= ss->ply && ss->ply < MAX_PLY);
|
||||
|
||||
// Decide whether or not to include checks: this fixes also the type of
|
||||
// TT entry depth that we are going to use. Note that in qsearch we use
|
||||
// only two types of depth in TT: DEPTH_QS_CHECKS or DEPTH_QS_NO_CHECKS.
|
||||
// Decide the replacement and cutoff priority of the qsearch TT entries
|
||||
ttDepth = ss->inCheck || depth >= DEPTH_QS_CHECKS ? DEPTH_QS_CHECKS : DEPTH_QS_NO_CHECKS;
|
||||
|
||||
// Step 3. Transposition table lookup
|
||||
|
|
Loading…
Add table
Reference in a new issue