tte->save(posKey, VALUE_NONE, ss->ttPv, BOUND_NONE, DEPTH_NONE, MOVE_NONE, eval);
}
- // Update static history for previous move
+ // Use static evaluation difference to improve quiet move ordering
if (is_ok((ss-1)->currentMove) && !(ss-1)->inCheck && !priorCapture)
{
- int bonus = ss->staticEval > -(ss-1)->staticEval + 2 * Tempo ? -stat_bonus(depth) :
- ss->staticEval < -(ss-1)->staticEval + 2 * Tempo ? stat_bonus(depth) :
- 0;
- thisThread->staticHistory[~us][from_to((ss-1)->currentMove)] << bonus;
+ int bonus = std::clamp(-depth * 4 * int((ss-1)->staticEval + ss->staticEval - 2 * Tempo), -1000, 1000);
+ thisThread->mainHistory[~us][from_to((ss-1)->currentMove)] << bonus;
}
// Step 7. Razoring (~1 Elo)
Move countermove = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory,
- &thisThread->staticHistory,
&thisThread->lowPlyHistory,
&captureHistory,
contHist,
r -= 2;
// Increase reduction at root and non-PV nodes when the best move does not change frequently
- if ((rootNode || !PvNode) && depth > 10 && thisThread->bestMoveChanges <= 2)
+ if ((rootNode || !PvNode) && thisThread->rootDepth > 10 && thisThread->bestMoveChanges <= 2)
r++;
// More reductions for late moves if position was not in previous PV
// queen and checking knight promotions, and other checks(only if depth >= DEPTH_QS_CHECKS)
// will be generated.
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory,
- &thisThread->staticHistory,
&thisThread->captureHistory,
contHist,
to_sq((ss-1)->currentMove));