🚫 Infographic · Main Search Pruning

Explain Chess Engine
Futility Pruning

At shallow depth, a quiet move rarely improves a bad position enough — skip searching moves that static eval says are hopeless.

📅 June 30, 2026⏱ 9 min read🏷️ Margins · Low Depth
Futility pruning applies in the main search (not qsearch) when depth is low and the position is already bad. If staticEval + margin(d) < α, a quiet move (non-capture, non-check) is unlikely to save the node — skip it. Captures and checks are never futility-pruned (they can change eval drastically).

Idea

Eval + Margin vs Alpha

staticEval + margin still below α → futile quiet move

Red band = best plausible gain from one quiet move at this depth. Green line = α. No overlap → prune.

Depth margins

Margin Grows With Depth

d ≤ 2~100–150 cp margin
d = 3~200 cp margin
d ≥ 4Usually disabled
if (depth <= FUTILITY_MAX && !inCheck && !isCapture(move)) { if (staticEval + futilityMargin[depth] <= alpha) continue; // skip quiet move }

Guards (always apply)

Eval + search together

Evaluation FunctionSearch Algorithm

Related: Delta Pruning · Razoring · All Blogs