Files
sim-numerics/results_diags_library.txt
vvsandClaude Opus 5 1b6c626f67 Valeri's decisions (1) competitors from the library, (2) variant a. (1) Chandrupatla is scipy.optimize.elementwise.find_root, Brent is brentq, no more per-problem best_of. Our Chandrupatla stopped on a bracket twice as wide as every other method (the factor the protocol corrects for ITP); fixed (+0.5*xtol) in baselines.py and in the two copies found by grep (stage16_blend, stage19_modern) and the traced mirror, and pinned: ours == library on every problem. Regenerating sweep_full.json changed exactly three rows - chandrupatla APS 2785->2787, CHA 2423->2441, brent CHA 4099->4115 - and nothing else (diff_sweeps.py: 0 unexpected).
(2) The proposed method is again the scheduled projection (2806/3220/6026), its budget multiplier DECLARED as the one free constant: the canonical total is the same for every multiplier 1.25-4, the wide-bracket one is not. The earned projection is the constant-free variant (3568/3020/6588). What the old tables hid: problem by problem the proposed rule beats Chandrupatla on the canonical set 87/24/42, exact sign test p = 9e-5, while trailing him by 0.7% in total; on the wide-bracket set he is genuinely stronger (26 to 9, p = 0.006). Gap decomposition recomputed with the library: 244 (was 262), 160 of it on the flat families (two thirds), fun1 58 (a quarter, not a third as the abstract said).

Also corrected on the way: the 'subsumed by Chandrupatla' pin claimed he is better on the worst single problem - true only with the looser tolerance (84 against the credit rule's 83 once fixed); §8.3 still called zero slack degenerate, which Table 1a refutes; §5.2's Brent figure is our pure-Python implementation and now says so. verify_article.py 286/286, 802 tests pass twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 10:53:00 +01:00

254 lines
15 KiB
Plaintext

=== diag_model_order
fun3.1 64 45 45 0.41 0.17 0.17
fun3.2 56 47 29 0.59 0.13 0.19
fun3.3 66 60 31 0.57 0.10 0.14
fun3.4 73 69 33 0.63 0.13 0.16
fun3.5 85 84 28 0.56 0.06 0.14
fun4.1 54 45 27 0.45 0.10 0.10
fun4.2 56 47 28 0.47 0.10 0.10
fun4.3 70 56 38 0.49 0.06 0.08
fun4.4 73 68 34 0.61 0.13 0.15
fun4.5 86 81 35 0.60 0.16 0.17
fun5.1 57 45 31 0.44 0.03 0.03
fun5.2 54 45 28 0.58 0.10 0.11
fun5.3 55 46 27 0.63 0.01 0.02
fun5.4 57 48 30 0.64 0.04 0.05
fun5.5 59 49 32 0.63 0.04 0.06
fun6.1 52 45 36 0.63 0.04 0.04
fun6.2 54 45 39 0.55 0.01 0.01
fun6.3 50 46 35 0.80 0.03 0.03
fun6.4 52 48 35 0.81 0.03 0.03
fun6.5 55 49 38 0.79 0.03 0.03
fun8.1 13 10 7 7.59 10.28 10.41
fun8.4 16 14 12 5.68 7.72 11.15
fun8.5 18 15 13 4.98 7.24 9.41
fun9.2 12 9 7 5.02 0.66 0.66
fun9.3 14 11 10 0.94 3.08 3.05
fun9.4 15 13 7 7.54 9.23 3.31
fun9.5 19 14 5 7.39 3.79 5.02
problems where we lose to Chandrupatla: 33, states 822
Q1 triples bracketing zero with exactly ONE negative Lagrange weight: 428/433 -> IDENTITY FAILS
model defined and landing strictly inside the proven bracket: ours 86%, iqiR 77%, iqiB 77%
Q2/Q3 mean halvings per ONE evaluation from the same state (bracket | error), valid states only
approach (error >= 1/2 bracket) ours 1.32 | 3.39 (n=40) iqiR 0.57 | 2.28 (n=6) iqiB 0.53 | 2.14 (n=6)
endgame ours 1.24 | 0.90 (n=669) iqiR 0.83 | 1.27 (n=628) iqiB 0.88 | 1.31 (n=631)
PAIRED on states where both are valid: mean (IQI - ours) bracket halvings
iqiR: -0.34 per evaluation (n=628)
iqiB: -0.23 per evaluation (n=631)
=== diag_model_order_checks
C1 Chandrupatla on the problems where we lose, by family
family probs ours CH gap CH bisect share
fun1 3 141 83 58 74%
fun2 3 99 94 5 84%
fun3 5 344 305 39 92%
fun4 5 339 297 42 96%
fun5 5 282 233 49 100%
fun6 5 263 233 30 100%
fun8 3 47 39 8 50%
fun9 4 60 47 13 40%
total gap on the losing problems: 244
C2 the 5 states breaking 'exactly one negative weight'
fun6.1 f = [1.000e-175, -1.460e-160, -1.153e-150] w = [1.000e+00, 0.000e+00, -0.000e+00] zero weights: 2 min|f| 1.0e-175
fun6.1 f = [4.634e-163, 1.000e-175, -1.460e-160] w = [-0.000e+00, 1.000e+00, 0.000e+00] zero weights: 2 min|f| 1.0e-175
fun6.3 f = [-2.588e-172, 2.588e-153, 2.588e-153] w = [1.000e+00, 0.000e+00, -0.000e+00] zero weights: 2 min|f| 2.6e-172
fun6.3 f = [6.667e-160, -2.588e-172, 2.588e-153] w = [0.000e+00, 1.000e+00, -0.000e+00] zero weights: 2 min|f| 2.6e-172
fun6.3 f = [5.745e-156, 6.667e-160, -2.588e-172] w = [-0.000e+00, 0.000e+00, 1.000e+00] zero weights: 2 min|f| 2.6e-172
=== diag_rescore_aps
APS problems: 154
method strict solved/total honest solved/total disagreements
ours (shape) 153/154 2527 154/154 2337 1
ours (dissimilar) 153/154 3123 154/154 2934 1
ours (published proj) 153/154 2806 154/154 2634 1
chandrupatla 153/154 2787 154/154 2595 1
toms748 153/154 2820 154/154 2636 1
brent 153/154 2889 154/154 2707 1
itp 153/154 3957 154/154 3767 1
bisection 153/154 7530 154/154 7338 1
problems where the two criteria disagree (a root found, scored a failure):
ours (shape) aps.13.00 x=+0.008638489218 root=+0 f(x)=+0.000e+00 after 10 evals
ours (dissimilar) aps.13.00 x=+0.0248491106 root=+0 f(x)=+0.000e+00 after 11 evals
ours (published proj) aps.13.00 x=-0.01020453457 root=+0 f(x)=+0.000e+00 after 28 evals
chandrupatla aps.13.00 x=-0.008282706313 root=+0 f(x)=+0.000e+00 after 8 evals
toms748 aps.13.00 x=-0.0002236853352 root=+0 f(x)=+0.000e+00 after 16 evals
brent aps.13.00 x=+0.01542133486 root=+0 f(x)=+0.000e+00 after 18 evals
itp aps.13.00 x=+0.03079215104 root=+0 f(x)=+0.000e+00 after 10 evals
bisection aps.13.00 x=+0.015625 root=+0 f(x)=+0.000e+00 after 8 evals
problems no method solved under the strict rule:
aps.13.00 solved by 0 of 8 methods
aps.01.00 solved by 8 of 8 methods
aps.02.00 solved by 8 of 8 methods
aps.02.01 solved by 8 of 8 methods
aps.02.02 solved by 8 of 8 methods
aps.02.03 solved by 8 of 8 methods
diagnosis of aps.13.00: bracket [-1, 4] declared root 0
f(a)=-3.678794e-01 f(b)=+3.757652e+00 f(root)=+0.000000e+00
f(root+1e-12) = +0.000000e+00 f(root-1e-12) = +0.000000e+00
f(root+1e-09) = +0.000000e+00 f(root-1e-09) = +0.000000e+00
f(root+1e-06) = +0.000000e+00 f(root-1e-06) = +0.000000e+00
f(root+0.001) = +0.000000e+00 f(root-0.001) = +0.000000e+00
ours returns x=+0.0248491106033 after 11 evals, f(x)=+0.000e+00, |x-root|=0.0248
|f(x)| below smallest normal? True
=== diag_rescore_cha
method strict: solved/total honest: solved/total fun7 strict fun7 honest
ours (shape) 40/45 3108 45/45 2159 0/5 5/5
ours (dissimilar) 40/45 2683 45/45 1740 0/5 5/5
ours (published proj) 40/45 3220 45/45 2357 0/5 5/5
chandrupatla 40/45 2441 45/45 1505 0/5 5/5
toms748 40/45 4000 45/45 3088 0/5 5/5
brent 38/45 4115 43/45 3238 0/5 5/5
itp 40/45 2857 45/45 1907 0/5 5/5
bisection 40/45 3090 45/45 2136 0/5 5/5
ranking under the HONEST criterion (fewest unsolved, then evaluations):
chandrupatla 45/45 1505
ours (dissimilar) 45/45 1740
itp 45/45 1907
bisection 45/45 2136
ours (shape) 45/45 2159
ours (published proj) 45/45 2357
toms748 45/45 3088
brent 43/45 3238
ranking under the STRICT criterion, for comparison:
chandrupatla 40/45 2441
ours (dissimilar) 40/45 2683
itp 40/45 2857
bisection 40/45 3090
ours (shape) 40/45 3108
ours (published proj) 40/45 3220
toms748 40/45 4000
brent 38/45 4115
=== diag_cha_gap
fun7.3 200 200 +0 43.3 9.1% 18.2% OURS FAIL
fun7.4 200 200 +0 45.6 0.0% 0.0% OURS FAIL
fun7.5 200 200 +0 46.6 0.0% 0.0% OURS FAIL
fun8.1 13 10 +3 40.9 0.0% 15.4%
fun8.2 11 11 +0 41.4 0.0% 18.2%
fun8.3 12 13 -1 43.0 0.0% 16.7%
fun8.4 16 14 +2 44.6 0.0% 18.8%
fun8.5 18 15 +3 46.2 0.0% 22.2%
fun9.1 8 8 +0 39.9 0.0% 0.0%
fun9.2 12 9 +3 41.4 8.3% 8.3%
fun9.3 14 11 +3 43.0 14.3% 14.3%
fun9.4 15 13 +2 44.6 13.3% 6.7%
fun9.5 19 14 +5 46.2 5.3% 5.3%
totals: ours 2683, Chandrupatla 2441, gap +242
per family (ours / theirs / gap):
fun1 n=5 160 / 103 gap +57
fun5 n=5 282 / 233 gap +49
fun4 n=5 339 / 297 gap +42
fun3 n=5 344 / 305 gap +39
fun6 n=5 263 / 233 gap +30
fun9 n=5 68 / 55 gap +13
fun8 n=5 70 / 63 gap +7
fun2 n=5 157 / 152 gap +5
fun7 n=5 1000 / 1000 gap +0
the five problems that cost us most:
fun1.4 ours 59 CH 24 gap +35
fun3.1 ours 64 CH 45 gap +19
fun1.5 ours 63 CH 44 gap +19
fun4.3 ours 70 CH 56 gap +14
fun5.1 ours 57 CH 45 gap +12
the five where we are ahead:
fun1.1 ours 7 CH 8 gap -1
fun8.3 ours 12 CH 13 gap -1
fun1.2 ours 12 CH 12 gap +0
fun2.1 ours 9 CH 9 gap +0
fun2.5 ours 49 CH 49 gap +0
=== diag_fun1_endgame
problem bracket root m ours n ord CH n ord
fun1.1 [ 2, 3] 2.0946 1.00 7 4.28 8 1.57
|f| at root+1e-5 = 1.116e-04, root+1e-2 = 1.122e-01, ours x=+2.094551482 ok=True
fun1.2 [ 1, 10] 2.0946 1.00 12 1.87 12 1.81
|f| at root+1e-5 = 1.116e-04, root+1e-2 = 1.122e-01, ours x=+2.094551482 ok=True
fun1.3 [ 1, 100] 2.0946 1.00 19 2.46 15 1.67
|f| at root+1e-5 = 1.116e-04, root+1e-2 = 1.122e-01, ours x=+2.094551482 ok=True
fun1.4 [ -1e+04, 1e+04] 2.0946 1.00 59 3.63 24 2.02
|f| at root+1e-5 = 1.116e-04, root+1e-2 = 1.122e-01, ours x=+2.094551482 ok=True
fun1.5 [ -1e+10, 1e+10] 2.0946 1.00 63 1.85 44 2.20
|f| at root+1e-5 = 1.116e-04, root+1e-2 = 1.122e-01, ours x=+2.094551482 ok=True
=== diag_who_caps_us
problem width bisect CH none step project safe credit
fun1.1 1 42 8 7 7 7 7 19
fun1.2 9 46 12 12 12 12 12 45
fun1.3 99 49 15 30 19 30 19 50
fun1.4 2e+04 57 24 46 59 46 59 58
fun1.5 2e+10 77 44 57 63 57 63 76
fun3.1 5 45 45 61 64 61 64 46
fun4.3 2e+04 57 56 73 70 73 70 58
fun5.1 5 45 45 68 57 68 57 46
legend: ✗ = the run did not reach the root (an unguarded method may not)
if guard='none' marches where 'safe'/'project' crawl, the GUARANTEE is the cap;
if 'none' crawls too, the STEP RULE is the cap.
=== diag_sign_flips
problem method evals probes that shrank share halvings/eval
fun1.3 ours 19 15 78.9% 2.498
fun1.3 chandrupatla 15 13 86.7% 3.166
fun1.4 ours 59 54 91.5% 0.930
fun1.4 chandrupatla 24 21 87.5% 2.298
fun1.5 ours 63 60 95.2% 1.179
fun1.5 chandrupatla 44 41 93.2% 1.706
fun3.1 ours 64 61 95.3% 0.672
fun3.1 chandrupatla 45 43 95.6% 0.956
fun5.1 ours 57 47 82.5% 0.741
fun5.1 chandrupatla 45 43 95.6% 0.956
=== diag_fun7_root
fun7.1 declared root +0
ours returned x=+0.0248491106 after 11 evals f(x)=+0.000e+00 |x-root|=0.0248 f IS ZERO THERE
chandrupatla returned x=-0.008282706313 after 8 evals f(x)=-0.000e+00 |x-root|=0.00828 f IS ZERO THERE
f is identically zero at least up to root + 0.0316
fun7.2 declared root +0
ours returned x=-0.02750094689 after 11 evals f(x)=-0.000e+00 |x-root|=0.0275 f IS ZERO THERE
chandrupatla returned x=-0.00805799861 after 8 evals f(x)=-0.000e+00 |x-root|=0.00806 f IS ZERO THERE
f is identically zero at least up to root + 0.0316
fun7.3 declared root +0
ours returned x=+0.005929390833 after 11 evals f(x)=+0.000e+00 |x-root|=0.00593 f IS ZERO THERE
chandrupatla returned x=-0.02563062503 after 11 evals f(x)=-0.000e+00 |x-root|=0.0256 f IS ZERO THERE
f is identically zero at least up to root + 0.0316
fun7.4 declared root +0
ours returned x=+0.01889661575 after 11 evals f(x)=+0.000e+00 |x-root|=0.0189 f IS ZERO THERE
chandrupatla returned x=-0.001938145806 after 18 evals f(x)=-0.000e+00 |x-root|=0.00194 f IS ZERO THERE
f is identically zero at least up to root + 0.0316
fun7.5 declared root +0
ours returned x=+0.008107544271 after 13 evals f(x)=+0.000e+00 |x-root|=0.00811 f IS ZERO THERE
chandrupatla returned x=+0.02036778628 after 19 evals f(x)=+0.000e+00 |x-root|=0.0204 f IS ZERO THERE
f is identically zero at least up to root + 0.0316
=== diag_band_by_family
guard=project: family no-gate band delta
fun1 99 263 +164
fun2 141 252 +111
fun3 338 310 -28
fun4 573 296 -277
fun5 456 239 -217
fun6 456 235 -221
fun7 1000 1000 +0
fun8 52 222 +170
fun9 105 249 +144
guard=credit: family no-gate band delta
fun1 258 239 -19
fun2 292 271 -21
fun3 274 237 -37
fun4 294 234 -60
fun5 238 238 +0
fun6 238 235 -3
fun7 1000 1000 +0
fun8 220 218 -2
fun9 206 227 +21
DIAGS_DONE