šŸ“‰ Infographic Ā· Search Reduction

Explain Chess Engine
Late Move Reduction

Good moves sort first — moves tried late are probably weak. Search them at reduced depth; re-search full depth if they look too good.

šŸ“… June 30, 2026ā± 10 min readšŸ·ļø LMR Ā· PVS Ā· Move Ordering
Late Move Reduction (LMR) assumes move ordering works: if move #8 at this node is still quiet and unordered low, it probably loses. Search at depth āˆ’ R instead of full depth. If the reduced search fail-highs (score ≄ β), re-search at full depth — the move might be a hidden tactic. LMR is one of the biggest node savers in modern engines.

Visual

Move Index vs Search Depth

#1PV / TT movedepth D
#2Killer / good capturedepth D
#3History movedepth D
#8Late quiet movedepth Dāˆ’2
#12Late quiet movedepth Dāˆ’3
R=1–3Typical reduction
≄4thMove index threshold
Re-searchOn fail-high
PVSRequired framework
reduction = lmrTable[depth][moveIndex]; if (reduction > 0 && !isCapture && !givesCheck) score = -search(depth - 1 - reduction, -alpha - 1, -alpha); // null window else score = -search(depth - 1, -beta, -alpha); if (score > alpha && reduction > 0) score = -search(depth - 1, -beta, -alpha); // full re-search
ConditionReduce?
First few moves / PV nodeNo
Captures & checksNo (or smaller R)
In checkNo
Depth ≤ 2No
Late quiet move, depth ≄ 3Yes — R from table

Implementation tips

Ordering makes LMR safe

Killer HeuristicSearch Algorithm

Related: Null Move Pruning Ā· Aspiration Windows Ā· All Blogs