Skip to content

Commit

Permalink
Move Loop Consistency in Probcut
Browse files Browse the repository at this point in the history
In probcut move loop, everything is enclosed within a large if statement. I've
changed it to guard clauses to stay consistent with other move loops.

closes #5463

No functional change
  • Loading branch information
yl25946 authored and vondele committed Jul 9, 2024
1 parent b209f14 commit 362a77a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 31 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ Kojirion
Krystian Kuzniarek (kuzkry)
Leonardo Ljubičić (ICCF World Champion)
Leonid Pechenik (lp--)
Li Ying (yl25946)
Liam Keegan (lkeegan)
Linmiao Xu (linrock)
Linus Arver (listx)
Expand Down
69 changes: 38 additions & 31 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -864,47 +864,54 @@ Value Search::Worker::search(
Piece captured;

while ((move = mp.next_move()) != Move::none())
if (move != excludedMove && pos.legal(move))
{
assert(pos.capture_stage(move));
{
assert(move.is_ok());

movedPiece = pos.moved_piece(move);
captured = pos.piece_on(move.to_sq());
if (move == excludedMove)
continue;

// Check for legality
if (!pos.legal(move))
continue;

// Prefetch the TT entry for the resulting position
prefetch(tt.first_entry(pos.key_after(move)));
assert(pos.capture_stage(move));

ss->currentMove = move;
ss->continuationHistory =
&this
->continuationHistory[ss->inCheck][true][pos.moved_piece(move)][move.to_sq()];
movedPiece = pos.moved_piece(move);
captured = pos.piece_on(move.to_sq());

thisThread->nodes.fetch_add(1, std::memory_order_relaxed);
pos.do_move(move, st);

// Perform a preliminary qsearch to verify that the move holds
value = -qsearch<NonPV>(pos, ss + 1, -probCutBeta, -probCutBeta + 1);
// Prefetch the TT entry for the resulting position
prefetch(tt.first_entry(pos.key_after(move)));

// If the qsearch held, perform the regular search
if (value >= probCutBeta)
value = -search<NonPV>(pos, ss + 1, -probCutBeta, -probCutBeta + 1, depth - 4,
!cutNode);
ss->currentMove = move;
ss->continuationHistory =
&this->continuationHistory[ss->inCheck][true][pos.moved_piece(move)][move.to_sq()];

pos.undo_move(move);
thisThread->nodes.fetch_add(1, std::memory_order_relaxed);
pos.do_move(move, st);

if (value >= probCutBeta)
{
thisThread->captureHistory[movedPiece][move.to_sq()][type_of(captured)]
<< stat_bonus(depth - 2);

// Save ProbCut data into transposition table
ttWriter.write(posKey, value_to_tt(value, ss->ply), ss->ttPv, BOUND_LOWER,
depth - 3, move, unadjustedStaticEval, tt.generation());
return std::abs(value) < VALUE_TB_WIN_IN_MAX_PLY ? value - (probCutBeta - beta)
: value;
}
// Perform a preliminary qsearch to verify that the move holds
value = -qsearch<NonPV>(pos, ss + 1, -probCutBeta, -probCutBeta + 1);

// If the qsearch held, perform the regular search
if (value >= probCutBeta)
value =
-search<NonPV>(pos, ss + 1, -probCutBeta, -probCutBeta + 1, depth - 4, !cutNode);

pos.undo_move(move);

if (value >= probCutBeta)
{
thisThread->captureHistory[movedPiece][move.to_sq()][type_of(captured)]
<< stat_bonus(depth - 2);

// Save ProbCut data into transposition table
ttWriter.write(posKey, value_to_tt(value, ss->ply), ss->ttPv, BOUND_LOWER,
depth - 3, move, unadjustedStaticEval, tt.generation());
return std::abs(value) < VALUE_TB_WIN_IN_MAX_PLY ? value - (probCutBeta - beta)
: value;
}
}

Eval::NNUE::hint_common_parent_position(pos, networks[numaAccessToken], refreshTable);
}
Expand Down

0 comments on commit 362a77a

Please sign in to comment.