Current formula enable LMR when
i + MultiPV >= LMRPVMoves
It means that, for instance, if MultiPV == 1 then LMR
will be started to be considered at move i = LMRPVMoves - 1,
while if MultiPV == 3 then it will start before,
at move i = LMRPVMoves - 3.
With this patch the formula becomes
i >= MultiPV + LMRPVMoves - 2
So that LMR will always start after LMRPVMoves - 1 moves
from the last PV move.
No functional change when MultiPV == 1
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
// Decide search depth for this move
bool moveIsCapture = pos.move_is_capture(move);
bool dangerous;
// Decide search depth for this move
bool moveIsCapture = pos.move_is_capture(move);
bool dangerous;
- ext = extension(pos, move, true, pos.move_is_capture(move), pos.move_is_check(move), false, false, &dangerous);
+ ext = extension(pos, move, true, moveIsCapture, pos.move_is_check(move), false, false, &dangerous);
newDepth = (Iteration - 2) * OnePly + ext + InitialDepth;
// Make the move, and search it
newDepth = (Iteration - 2) * OnePly + ext + InitialDepth;
// Make the move, and search it
- if (newDepth >= 3*OnePly
- && i + MultiPV >= LMRPVMoves
+ if ( newDepth >= 3*OnePly
+ && i >= MultiPV + LMRPVMoves - 2 // Remove -2 and decrease LMRPVMoves instead ?
&& !dangerous
&& !moveIsCapture
&& !move_is_promotion(move)
&& !dangerous
&& !moveIsCapture
&& !move_is_promotion(move)
{
ss[0].reduction = OnePly;
value = -search(pos, ss, -alpha, newDepth-OnePly, 1, true, 0);
{
ss[0].reduction = OnePly;
value = -search(pos, ss, -alpha, newDepth-OnePly, 1, true, 0);
value = alpha + 1; // Just to trigger next condition
value = alpha + 1; // Just to trigger next condition
{
value = -search(pos, ss, -alpha, newDepth, 1, true, 0);
if (value > alpha)
{
value = -search(pos, ss, -alpha, newDepth, 1, true, 0);
if (value > alpha)