stage = PROBCUT;
- // In ProbCut we generate captures with SEE higher than the given threshold
+ // In ProbCut we generate captures with SEE higher than or equal to the given threshold
ttMove = ttm
&& pos.pseudo_legal(ttm)
&& pos.capture(ttm)
- && pos.see(ttm) > threshold ? ttm : MOVE_NONE;
+ && pos.see_ge(ttm, threshold)? ttm : MOVE_NONE;
stage += (ttMove == MOVE_NONE);
}
const HistoryStats& history = pos.this_thread()->history;
const FromToStats& fromTo = pos.this_thread()->fromTo;
- const CounterMoveStats* cm = (ss-1)->counterMoves;
- const CounterMoveStats* fm = (ss-2)->counterMoves;
- const CounterMoveStats* f2 = (ss-4)->counterMoves;
+ const CounterMoveStats* cmh = (ss-1)->counterMoves;
+ const CounterMoveStats* fmh = (ss-2)->counterMoves;
+ const CounterMoveStats* fmh2 = (ss-4)->counterMoves;
Color c = pos.side_to_move();
for (auto& m : *this)
- m.value = history[pos.moved_piece(m)][to_sq(m)]
- + (cm ? (*cm)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
- + (fm ? (*fm)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
- + (f2 ? (*f2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
+ m.value = history[pos.moved_piece(m)][to_sq(m)]
+ + (cmh ? (*cmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
+ + (fmh ? (*fmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
+ + (fmh2 ? (*fmh2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
+ fromTo.get(c, m);
}
move = pick_best(cur++, endMoves);
if (move != ttMove)
{
- if (pos.see_sign(move) >= VALUE_ZERO)
+ if (pos.see_ge(move, VALUE_ZERO))
return move;
// Losing capture, move it to the beginning of the array
case EVASIONS_INIT:
cur = moves;
endMoves = generate<EVASIONS>(pos, cur);
- if (endMoves - cur - (ttMove != MOVE_NONE) > 1)
- score<EVASIONS>();
+ score<EVASIONS>();
++stage;
case ALL_EVASIONS:
{
move = pick_best(cur++, endMoves);
if ( move != ttMove
- && pos.see(move) > threshold)
+ && pos.see_ge(move, threshold))
return move;
}
break;