This should reduce search inconsistencies, and doesn't seem to have a measurable ELO Impact:
STC with Hash=16
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 49264 W: 10076 L: 10007 D: 29181
LTC with Hash=64
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 82149 W: 14044 L: 14023 D: 54082
Plus an extra test, to make sure it doesn't regress with strong hash pressure:
STC with Hash=4
LLR: 2.95 (-2.94,2.94) [-4.00,0.00]
Total: 21498 W: 4327 L: 4246 D: 12925
Bench:
7302735
Resolves #100
&& !captureOrPromotion
&& !inCheck
&& !dangerous
- /* && move != ttMove Already implicit in the next condition */
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
// Move count based pruning
// Step 15. Reduced depth search (LMR). If the move fails high it will be
// re-searched at full depth.
if ( depth >= 3 * ONE_PLY
- && !pvMove
+ && moveCount > 1
&& !captureOrPromotion
- && move != ttMove
&& move != ss->killers[0]
&& move != ss->killers[1])
{
if ( !PvNode
&& !InCheck
&& !givesCheck
- && move != ttMove
&& futilityBase > -VALUE_KNOWN_WIN
&& !pos.advanced_pawn_push(move))
{
// Don't search moves with negative SEE values
if ( !PvNode
&& (!InCheck || evasionPrunable)
- && move != ttMove
&& type_of(move) != PROMOTION
&& pos.see_sign(move) < VALUE_ZERO)
continue;