// Print final search statistics
cout << "info nodes " << TM.nodes_searched()
<< " nps " << nps()
- << " time " << current_search_time()
- << " hashfull " << TT.full() << endl;
+ << " time " << current_search_time() << endl;
// Print the best move and the ponder move to the standard output
if (pv[0] == MOVE_NONE)
if (nullValue >= value_mate_in(PLY_MAX))
nullValue = beta;
- // Do zugzwang verification search at high depths
if (depth < 6 * OnePly)
return nullValue;
+ // Do verification search at high depths
ss->skipNullMove = true;
- Value v = search<NonPV>(pos, ss, alpha, beta, depth-5*OnePly, ply);
+ Value v = search<NonPV>(pos, ss, alpha, beta, depth-R*OnePly, ply);
ss->skipNullMove = false;
if (v >= beta)
// Step 11. Decide the new search depth
ext = extension<PvNode>(pos, move, captureOrPromotion, moveIsCheck, singleEvasion, mateThreat, &dangerous);
- // Singular extension search. We extend the TT move if its value is much better than
- // its siblings. To verify this we do a reduced search on all the other moves but the
- // ttMove, if result is lower then ttValue minus a margin then we extend ttMove.
+ // Singular extension search. 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, if result is
+ // lower then ttValue minus a margin then we extend ttMove.
if ( singularExtensionNode
&& move == tte->move()
&& ext < OnePly)
Value v = search<NonPV>(pos, ss, b - 1, b, depth / 2, ply);
ss->skipNullMove = false;
ss->excludedMove = MOVE_NONE;
- if (v < ttValue - SingularExtensionMargin)
+ if (v < b)
ext = OnePly;
}
}
dbg_print_hit_rate();
cout << "info nodes " << TM.nodes_searched() << " nps " << nps()
- << " time " << t << " hashfull " << TT.full() << endl;
+ << " time " << t << endl;
}
// Should we stop the search?