(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>
171 lines
6.9 KiB
Python
171 lines
6.9 KiB
Python
"""Read sweep_full.json and answer the questions the paper needs answered.
|
|
|
|
Everything printed here comes from the single server run; no number is
|
|
recomputed on a different machine. (The test functions use libm, whose last
|
|
digit differs between Windows and Linux, so mixing platforms would move
|
|
evaluation counts by a unit or two - measured: scipy's toms748 scores 2819 on
|
|
Windows and 2820 on Linux for the same set.)
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sys
|
|
|
|
BASE = {"bisection", "regula_falsi", "illinois", "pegasus", "anderson_bjorck",
|
|
"ridders", "brent", "toms748", "itp", "itp_oracle"}
|
|
|
|
# The configuration the paper proposes. It is not the winner of a search over
|
|
# the grid - it is what the theory of section 2 dictates, fixed before the
|
|
# ranking is looked at:
|
|
# similarity a nonzero slope of (1 - S) at 0 -> the ratio form 1 - |z|
|
|
# scale the finest data-derived one -> the three-point difference
|
|
# safeguard the one that carries a bound without destroying the order ->
|
|
# the scheduled projection, twice the bisection budget
|
|
# Valeri's decision, 2026-09-21 (variant a): the projection is proposed with its
|
|
# multiplier DECLARED as the method's one free constant - on the canonical set the
|
|
# total is the same for every multiplier from 1.25 to 4, on the wide-bracket set it
|
|
# is not (measure_budget_factor.py). The earned projection (credit) is kept as the
|
|
# constant-free variant; it was PROPOSED here for a while, a choice recorded in code
|
|
# but never taken by Valeri.
|
|
# The grid is evidence for the theory, not the method's selection procedure.
|
|
PROPOSED = "pure.ratio.derived3.project"
|
|
CREDIT = "pure.ratio.derived3.credit" # the constant-free variant
|
|
TUNED = {"illinois", "pegasus", "anderson_bjorck", "brent", "toms748",
|
|
"itp", "itp_oracle"}
|
|
|
|
|
|
def load(path="sweep_full.json"):
|
|
with open(path, encoding="utf8") as fh:
|
|
return json.load(fh)
|
|
|
|
|
|
def rank(rows, setname):
|
|
return sorted(rows, key=lambda r: (r[setname]["n"] - r[setname]["solved"],
|
|
r[setname]["total"]))
|
|
|
|
|
|
def place(rows, setname, lbl):
|
|
for i, r in enumerate(rank(rows, setname), 1):
|
|
if r["label"] == lbl:
|
|
return i
|
|
raise KeyError(f"no configuration labelled {lbl!r} in the sweep; "
|
|
"a mistyped name must not be reported as a missing place")
|
|
|
|
|
|
def best_pure(rows, setname):
|
|
"""The best configuration OF OURS. The overall winner of a set may be a
|
|
baseline - itp_oracle tops Chandrupatla - and comparing that against
|
|
itself prints nothing of interest."""
|
|
for r in rank(rows, setname):
|
|
if r["label"].startswith("pure."):
|
|
return r["label"]
|
|
raise KeyError("no pure configuration in the sweep")
|
|
|
|
|
|
def head_to_head(rows, a, b, setname):
|
|
ra = next(r for r in rows if r["label"] == a)[setname]
|
|
rb = next(r for r in rows if r["label"] == b)[setname]
|
|
win = tie = loss = both = 0
|
|
for pid, (na, oka) in ra["per"].items():
|
|
nb, okb = rb["per"][pid]
|
|
if not (oka and okb):
|
|
continue
|
|
both += 1
|
|
if na < nb:
|
|
win += 1
|
|
elif na > nb:
|
|
loss += 1
|
|
else:
|
|
tie += 1
|
|
return win, tie, loss, both
|
|
|
|
|
|
def main():
|
|
rows = load(sys.argv[1] if len(sys.argv) > 1 else "sweep_full.json")
|
|
print(f"{len(rows)} configurations\n")
|
|
|
|
for setname in ("APS", "CHA"):
|
|
r = rank(rows, setname)
|
|
n = r[0][setname]["n"]
|
|
print("=" * 90)
|
|
print(f"{setname} ({n} problems) top 12, with the best baseline "
|
|
f"positions marked")
|
|
print("=" * 90)
|
|
print(f"{'#':>3s} {'configuration':38s}{'tuning':>8s}{'solved':>9s}"
|
|
f"{'total':>9s}{'over 2x':>9s}")
|
|
print("-" * 90)
|
|
for i, row in enumerate(r[:12], 1):
|
|
d = row[setname]
|
|
tuned = "yes" if row["label"] in TUNED else "no"
|
|
star = " <-" if row["label"] not in BASE else ""
|
|
print(f"{i:>3d} {row['label']:38s}{tuned:>8s}"
|
|
f"{d['solved']:>6d}/{d['n']:<3d}{d['total']:>9d}"
|
|
f"{d['over']:>9d}{star}")
|
|
print()
|
|
for b in ("brent", "toms748", "itp", "itp_oracle", "bisection"):
|
|
p = place(rows, setname, b)
|
|
d = next(x for x in rows if x["label"] == b)[setname]
|
|
print(f" {b:38s}place {p:>3d} total {d['total']}")
|
|
print()
|
|
|
|
print("=" * 90)
|
|
print(f"THE PROPOSED CONFIGURATION {PROPOSED}")
|
|
print(" (dictated by the theory, not selected from the ranking)")
|
|
print("=" * 90)
|
|
for setname in ("APS", "CHA"):
|
|
d = next(r for r in rows if r["label"] == PROPOSED)[setname]
|
|
print(f" {setname}: place {place(rows, setname, PROPOSED):>3d} of "
|
|
f"{len(rows)} solved {d['solved']}/{d['n']} "
|
|
f"total {d['total']} over 2x bound {d['over']}")
|
|
for opp in ("brent", "toms748", "itp", "itp_oracle", "bisection"):
|
|
w, t, l, both = head_to_head(rows, PROPOSED, opp, setname)
|
|
print(f" vs {opp:12s}: {w} wins / {t} ties / {l} losses "
|
|
f"(of {both})")
|
|
print()
|
|
|
|
print("=" * 90)
|
|
print("HEAD TO HEAD, best pure configuration of each set")
|
|
print("=" * 90)
|
|
for setname in ("APS", "CHA"):
|
|
best = best_pure(rows, setname)
|
|
for opp in ("brent", "toms748", "itp", "itp_oracle"):
|
|
w, t, l, both = head_to_head(rows, best, opp, setname)
|
|
print(f"{setname} {best} vs {opp:12s}: "
|
|
f"{w} wins / {t} ties / {l} losses (of {both})")
|
|
print()
|
|
|
|
print("=" * 90)
|
|
print("BEST CONFIGURATION THAT CARRIES THE PROVEN 2x BOUND")
|
|
print("=" * 90)
|
|
for setname in ("APS", "CHA"):
|
|
sound = [x for x in rank(rows, setname)
|
|
if x["label"].startswith("pure.")
|
|
and x["label"].rsplit(".", 1)[1] in ("bracket", "both")]
|
|
b = sound[0]
|
|
print(f"{setname}: {b['label']:38s} total {b[setname]['total']:>7d}"
|
|
f" place {place(rows, setname, b['label'])}")
|
|
|
|
print("\n" + "=" * 90)
|
|
print("WHICH SIMILARITY, WHICH SCALE (guard = step, both sets summed)")
|
|
print("=" * 90)
|
|
sims, scales = {}, {}
|
|
for row in rows:
|
|
if not row["label"].startswith("pure."):
|
|
continue
|
|
_, sim, scale, guard = row["label"].split(".")
|
|
if guard != "step":
|
|
continue
|
|
tot = row["APS"]["total"] + row["CHA"]["total"]
|
|
sims.setdefault(sim, []).append(tot)
|
|
scales.setdefault(scale, []).append(tot)
|
|
print("similarity (best over scales):")
|
|
for sim, v in sorted(sims.items(), key=lambda kv: min(kv[1])):
|
|
print(f" {sim:12s} best {min(v):>7d} worst {max(v):>7d}")
|
|
print("scale (best over similarities):")
|
|
for sc, v in sorted(scales.items(), key=lambda kv: min(kv[1])):
|
|
print(f" {sc:12s} best {min(v):>7d} worst {max(v):>7d}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|