Knob sweep — how sensitive is the grid to the thresholds?
The adaptive loop’s behaviour on the one-parameter diffusion benchmark depends on a handful of tolerance values. This page is a self-contained sensitivity study: it walks each of those thresholds across a range and records how the terminal refinement level and the per-level verdict counts respond. The goal is to show that the loop’s output is sensitive to the specific tolerance values rather than fixed — small changes move the grid — and to locate which knobs matter and which do not.
As a fixed yardstick, each cell is also scored against a reference verdict-count target: a per-level tuple (n_points, n_subintervals, n_wrong, n_uncertified) that a well-tuned run is expected to produce. The study reports how many of the four target rows each cell reproduces exactly. No single cell reproduces all four.
Model
Same one-parameter 2D diffusion setup as the one-parameter sweep — only the algorithm thresholds vary.
Sweep design
Six threshold axes are walked, all anchored to a single baseline (t_\pi=0.21, t_\lambda=10^{-3}, cluster tolerance 10^{-4}, n_{\text{eigs}}=8, max levels =4):
- Lift the artificial L=4 level cap to 8.
- t_\lambda \in \{0.03, 0.085, 0.15\} (the a-priori relative-gap threshold).
- t_\pi \in \{0.30, 0.43, 0.57\} (the a-posteriori pruning threshold).
- n_{\text{eigs}} \in \{4, 6\} (bands tracked per point).
- Combined relaxations of (t_\pi, t_\lambda) toward looser values, with and without n_{\text{eigs}}=6.
- Fine-tune around the best-scoring (0.43, 0.085, 6) cell.
The reference verdict-count target, per refinement level, is:
| L | reference target |
|---|---|
| 0 | (3, 2, 2, 2) |
| 1 | (5, 4, 3, 2) |
| 2 | (7, 4, 0, 1) |
| 3 | (8, 2, 0, 0) |
Each sweep cell’s L0..L3_exact_matches column counts how many of those four rows it reproduces verbatim. The table below ranks the cells by how close they come.
Summary figure

4 in the lower panel would mean perfect reproduction of the reference target; none reach it.Full sweep table
| label | t_pi | t_lambda | cluster_tol | n_eigs | max_levels | terminal_level | ran_out | L0..L3_exact_matches | L0 | L1 | L2 | L3 | L4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
baseline |
0.21 |
0.001 |
0.0001 |
8 |
4 |
3 |
False |
1 |
(3,2,2,2) |
(5,4,3,3) |
(8,6,5,1) |
(9,2,6,0) |
| | `max_levels=8 only` | `0.21` | `0.001` | `0.0001` | `8` | `8` | `3` | `False` | `1` | `(3,2,2,2)` | `(5,4,3,3)` | `(8,6,5,1)` | `(9,2,6,0)` | |
t_lambda=0.03 |
0.21 |
0.03 |
0.0001 |
8 |
8 |
3 |
False |
1 |
(3,2,2,2) |
(5,4,3,3) |
(8,6,5,1) |
(9,2,6,0) |
| | `t_lambda=0.085` | `0.21` | `0.085` | `0.0001` | `8` | `8` | `3` | `False` | `1` | `(3,2,2,2)` | `(5,4,3,3)` | `(8,6,5,1)` | `(9,2,6,0)` | |
t_lambda=0.15 |
0.21 |
0.15 |
0.0001 |
8 |
8 |
2 |
False |
0 |
(3,2,1,2) |
(5,4,1,1) |
(6,2,2,0) |
| |
|
t_pi=0.3 |
0.3 |
0.001 |
0.0001 |
8 |
8 |
3 |
False |
1 |
(3,2,2,2) |
(5,4,3,3) |
(8,6,5,1) |
(9,2,6,0) |
| | `t_pi=0.43` | `0.43` | `0.001` | `0.0001` | `8` | `8` | `3` | `False` | `1` | `(3,2,2,2)` | `(5,4,3,3)` | `(8,6,5,2)` | `(10,4,6,0)` | |
t_pi=0.57 |
0.57 |
0.001 |
0.0001 |
8 |
8 |
4 |
False |
1 |
(3,2,2,2) |
(5,4,3,4) |
(9,8,6,4) |
(13,8,9,1) |
(14,2,10,0) |
n_eigs=4 |
0.21 |
0.001 |
0.0001 |
4 |
8 |
1 |
False |
0 |
(3,2,2,1) |
(4,2,2,0) |
| |
| | `n_eigs=6` | `0.21` | `0.001` | `0.0001` | `6` | `8` | `1` | `False` | `0` | `(3,2,2,1)` | `(4,2,2,0)` | |
| |
t_pi=0.43, t_lambda=0.085 |
0.43 |
0.085 |
0.0001 |
8 |
8 |
3 |
False |
1 |
(3,2,2,2) |
(5,4,3,3) |
(8,6,5,2) |
(10,4,6,0) |
| | `t_pi=0.57, t_lambda=0.085` | `0.57` | `0.085` | `0.0001` | `8` | `8` | `3` | `False` | `1` | `(3,2,2,2)` | `(5,4,3,4)` | `(9,8,6,4)` | `(13,8,9,0)` | |
t_pi=0.43, t_lambda=0.085, n_eigs=6 |
0.43 |
0.085 |
0.0001 |
6 |
8 |
2 |
False |
0 |
(3,2,1,2) |
(5,4,2,1) |
(6,2,2,0) |
| |
|
tight t_pi=0.21, t_lambda=0.085, n_eigs=6 |
0.21 |
0.085 |
0.0001 |
6 |
8 |
1 |
False |
0 |
(3,2,2,1) |
(4,2,2,0) |
| |
| | `tight t_pi=0.3, t_lambda=0.085, n_eigs=6` | `0.3` | `0.085` | `0.0001` | `6` | `8` | `2` | `False` | `0` | `(3,2,1,1)` | `(4,2,1,1)` | `(5,2,1,0)` | |
| | `tight t_pi=0.35, t_lambda=0.085, n_eigs=6` | `0.35` | `0.085` | `0.0001` | `6` | `8` | `2` | `False` | `0` | `(3,2,1,1)` | `(4,2,1,1)` | `(5,2,1,0)` | |
The takeaway is twofold: the terminal level and verdict counts shift visibly as t_\pi and n_{\text{eigs}} move (the grid is genuinely sensitive to them), while t_\lambda barely registers in this regime. That the threshold choice is load-bearing is the same lesson the tolerance-perturbation page draws from the downstream ROM error.