Valeri's objection measured: the principle is right (a similarity step should be large far away and small near), and our sigma = |f'|D defeats it — at x=1e4 on a 2e4 bracket the normalised residual is 0.167, so S=0.833 'similar' and the step is small five thousand step-lengths from the root. Selecting sigma = min(|f'|D, max|f| at the ends) — no new constant — improves 403 to 390 on eight hand-picked wide problems but is WORSE over the grid: APS 3288 vs 2726, CHA 3111 vs 2683, so the mode is rejected by its pre-registered rule. Its extra solves are two fun7 problems landing inside the flat zero region, i.e. the scoring artefact and not a capability. Written into Negative results as the answer to the natural objection
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# PREREG — масштаб как ВЫБОР между двумя посчитанными (`derived3_cap`)
|
||||
|
||||
Составлено до полного прогона. Основание — возражение Валерия 2026-09-21: «если бы шаг формировала
|
||||
похожесть, мы меняли бы шаг с очень большого на более мелкий по мере приближения к цели».
|
||||
|
||||
## 1. Почему возражение верно и что оно вскрыло
|
||||
|
||||
Шаг есть `(1 − S(z))·D` с `z = |f|/σ` и `σ = |slope|·D`. Проверка на `fun1.4` в точке `x = 10⁴`
|
||||
(`f ≈ 10¹²`, `f′ ≈ 3·10⁸`, ньютоновская длина ≈ 3333, `D ≈ 2·10⁴`): `z = 0.167`, то есть
|
||||
**`S = 0.833` — «похоже»** — и шаг мал, хотя до корня около 5000 его собственных длин.
|
||||
|
||||
Причина: деление остатка на `|slope|·D` **нормирует непохожесть самой скобкой**, поэтому похожесть
|
||||
читает «какую долю скобки составляет ньютоновский шаг», а не «далеко ли я». Принцип «крупный шаг
|
||||
далеко, мелкий близко» формулой не реализован — он требует `σ`, не зависящего от `D`.
|
||||
|
||||
## 2. Что проверяется
|
||||
|
||||
`σ = min(|slope|·D, max(|F_A|, |F_B|))` — **выбор между двумя уже посчитанными** масштабами:
|
||||
значением на концах скобки и наклонным. Ни новой константы, ни порога: `min` по имеющемуся.
|
||||
Ожидаемое поведение: далеко на широкой скобке минимум даёт значение на конце ⇒ `z ≈ 1` ⇒ шаг во всю
|
||||
скобку; у корня минимум даёт наклонный ⇒ ньютоновское поведение и прежний порядок.
|
||||
|
||||
**Режим:** `scale="derived3_cap"`; прежние шкалы и поведение по умолчанию не тронуты.
|
||||
|
||||
## 3. Точка отсчёта и цели
|
||||
|
||||
Сравнение — против той же конфигурации без новой шкалы (`slope`-гейт + `dissimilar`):
|
||||
APS **2726**, CHA **2785** (по-наборно 2683), два набора **5511**, 193/199, `over2x = 0`.
|
||||
Лучшее на APS у нас — **2527** (`shape`-чтение).
|
||||
|
||||
| величина | цель |
|
||||
|---|---|
|
||||
| APS-154 | **≤ 2726** (не хуже точки отсчёта); идеально ≤ 2527 |
|
||||
| CHA-45 | **< 2683** (улучшение против нашего лучшего) |
|
||||
| два набора | **< 5511** |
|
||||
| решено | ≥ 193/199 |
|
||||
| гарантия | `over2x = 0` |
|
||||
|
||||
## 4. Предсказания и фальсификаторы
|
||||
|
||||
| # | Предсказание | ФАЛЬСИФИКАТОР → вывод |
|
||||
|---|---|---|
|
||||
| **K1** | CHA улучшается (<2683) | не улучшается → выбор масштаба не бьёт в измеренную причину (недолёт линейной модели) |
|
||||
| **K2** | APS не ухудшается (≤2726) | ухудшается → тот же трейд «широкие за счёт узких», четвёртый раз; режим отвергается |
|
||||
| **K3** | гарантия цела | нарушена → немедленное закрытие |
|
||||
| **K4** | порядок сходимости у корня не падает: наблюдаемый порядок на узких задачах не ниже, чем у `derived3` | падает → выбор `min` мешает концовке, и это записывается |
|
||||
|
||||
🔴 **Оговорка о смещении:** предварительная проба на 8 **широких** задачах (403 → 390, 4 лучше / 3
|
||||
хуже / 1 вровень) выбрана мной под механизм и **свидетельством не является**. Решает полный прогон по
|
||||
всей сетке, где широкие задачи составляют меньшинство.
|
||||
|
||||
**Правило остановки:** K2 или K3 ложны ⇒ режим не принимается. K1 ложна ⇒ измеренная причина
|
||||
(недолёт линейной модели) выбором масштаба не устраняется, и это пишется прямо.
|
||||
Binary file not shown.
@@ -677,6 +677,22 @@ canonical set against $2527$ --- a difference of $1922$ evaluations for one
|
||||
choice of criterion. A secant step routinely collapses the error while barely
|
||||
moving the proven bracket, so bracket progress rejects steps that were
|
||||
excellent; this is the same mechanism that makes the bracket guard cost $7260$.
|
||||
\item \textbf{Making the scale independent of the bracket does not help either.}
|
||||
The natural objection to the derived scale is that it defeats the very principle
|
||||
of a similarity step: with $\sigma=|f'|D$ the normalised residual is
|
||||
$|f|/(|f'|D)$, which on the $2\times10^4$-wide bracket of $x^3-2x-5$ at
|
||||
$x=10^4$ equals $0.167$, so $S=0.833$ --- ``similar'' --- and the step is small
|
||||
although the root is some five thousand step-lengths away. The similarity is
|
||||
reading what fraction of the \emph{bracket} the Newton step is, not how far the
|
||||
iterate is from the root. Selecting the scale between the two quantities already
|
||||
computed, $\sigma=\min(|f'|D,\max(|f(A)|,|f(B)|))$ --- no new constant, a
|
||||
\texttt{min} over what is in hand --- does give a full-bracket step far away and
|
||||
Newton's step near the root, and on eight hand-picked wide problems it improves
|
||||
$403$ evaluations to $390$. Over the whole grid it is worse on both sets:
|
||||
$3288$ on the canonical set against $2726$, and $3111$ on the wide-bracket set
|
||||
against $2683$. Its apparent extra solves ($194$ instead of $193$) are two
|
||||
\texttt{fun7} problems where it lands inside the flat zero region close enough to
|
||||
satisfy the harness --- the artefact of \S\ref{sec:fun7}, not a capability.
|
||||
\item \textbf{A logarithmic change of variable does not buy the wide brackets.}
|
||||
Working in $u=\operatorname{sign}(x-c)\log(1+|x-c|/\varepsilon_x)$ makes the
|
||||
step multiplicative, which is the right diagnosis of the flat families --- CHA
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
sweep: 63 configurations x 199 problems (FULL)
|
||||
10/63 done, 1s elapsed
|
||||
20/63 done, 1s elapsed
|
||||
30/63 done, 1s elapsed
|
||||
40/63 done, 1s elapsed
|
||||
50/63 done, 1s elapsed
|
||||
60/63 done, 1s elapsed
|
||||
63/63 done, 2s elapsed
|
||||
wrote sweep_cap.json (2s total)
|
||||
====================================================================================
|
||||
APS: 154 problems (top 20 of 63)
|
||||
====================================================================================
|
||||
configuration solved total fev over 2x
|
||||
------------------------------------------------------------------------------------
|
||||
pure+dissim+slope.exp_abs.derived3_cap.none 153/154 3288 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.project 153/154 3288 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.step 153/154 3385 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.safe 153/154 3385 0
|
||||
pure+dissim+slope.rational.derived3_cap.step 153/154 3460 0
|
||||
pure+dissim+slope.rational.derived3_cap.safe 153/154 3460 0
|
||||
pure+dissim+slope.rational.derived3_cap.none 153/154 3497 0
|
||||
pure+dissim+slope.rational.derived3_cap.project 153/154 3497 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.bracket 153/154 3537 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.both 153/154 3619 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.credit 153/154 4125 0
|
||||
pure+dissim+slope.ratio.derived3_cap.bracket 153/154 4333 0
|
||||
pure+dissim+slope.ratio.derived3_cap.both 153/154 4903 0
|
||||
pure+dissim+slope.rational.derived3_cap.credit 153/154 5001 0
|
||||
pure+dissim+slope.ratio.derived3_cap.step 153/154 5044 0
|
||||
pure+dissim+slope.ratio.derived3_cap.safe 153/154 5044 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.step 153/154 6184 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.safe 153/154 6184 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.both 153/154 6216 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.bracket 153/154 6580 0
|
||||
|
||||
====================================================================================
|
||||
CHA: 45 problems (top 20 of 63)
|
||||
====================================================================================
|
||||
configuration solved total fev over 2x
|
||||
------------------------------------------------------------------------------------
|
||||
pure+dissim+slope.sqrt.derived3_cap.none 42/45 2969 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.project 41/45 3111 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.step 40/45 2658 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.safe 40/45 2658 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.both 40/45 2689 0
|
||||
pure+dissim+slope.rational.derived3_cap.step 40/45 2790 0
|
||||
pure+dissim+slope.rational.derived3_cap.safe 40/45 2790 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.bracket 40/45 2796 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.none 40/45 2808 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.project 40/45 2808 0
|
||||
pure+dissim+slope.ratio.derived3_cap.both 40/45 2906 0
|
||||
pure+dissim+slope.ratio.derived3_cap.step 40/45 2959 0
|
||||
pure+dissim+slope.ratio.derived3_cap.safe 40/45 2959 0
|
||||
pure+dissim+slope.rational.derived3_cap.none 40/45 2970 0
|
||||
pure+dissim+slope.rational.derived3_cap.project 40/45 2970 0
|
||||
pure+dissim+slope.ratio.derived3_cap.bracket 40/45 2978 0
|
||||
pure+dissim+slope.rational.derived3_cap.credit 40/45 2982 0
|
||||
pure+dissim+slope.exp_abs.derived3_cap.credit 40/45 2991 0
|
||||
pure+dissim+slope.cbrt.derived3_cap.both 40/45 3041 0
|
||||
pure+dissim+slope.sqrt.derived3_cap.step 40/45 3066 0
|
||||
|
||||
====================================================================================
|
||||
THE STAGE-0C LAW ACROSS THE GRID
|
||||
====================================================================================
|
||||
+17
-3
@@ -505,7 +505,7 @@ def pure_root(f, a, b, xtol, maxfev, similarity="ratio", scale="derived",
|
||||
if similarity not in PURE_SIMS:
|
||||
raise ValueError(f"unknown similarity {similarity!r}")
|
||||
if scale not in ("derived", "derived3", "derived_rho", "derived3_rho",
|
||||
"derived3_m", "start", "bracket"):
|
||||
"derived3_m", "derived3_cap", "start", "bracket"):
|
||||
raise ValueError(f"unknown scale {scale!r}")
|
||||
if space not in SPACES:
|
||||
raise ValueError(f"unknown space {space!r}")
|
||||
@@ -515,11 +515,12 @@ def pure_root(f, a, b, xtol, maxfev, similarity="ratio", scale="derived",
|
||||
raise ValueError(f"unknown points rule {points!r}")
|
||||
if direction not in DIRECTIONS:
|
||||
raise ValueError(f"unknown direction {direction!r}")
|
||||
if points == "shape" and scale not in ("derived3", "derived3_rho", "derived3_m"):
|
||||
if points == "shape" and scale not in ("derived3", "derived3_rho", "derived3_m",
|
||||
"derived3_cap"):
|
||||
# the triple only exists for the three-point scale; selecting one under a
|
||||
# two-point scale would change nothing and hide that
|
||||
raise ValueError("points='shape' requires a three-point scale (derived3*)")
|
||||
if prestep == "slope" and scale not in ("derived", "derived3"):
|
||||
if prestep == "slope" and scale not in ("derived", "derived3", "derived3_cap"):
|
||||
# there is no slope to judge under a chosen or bracket scale; judging something
|
||||
# else would hide that, so the call fails instead
|
||||
raise ValueError("prestep='slope' requires scale in {'derived', 'derived3'}")
|
||||
@@ -603,6 +604,19 @@ def pure_root(f, a, b, xtol, maxfev, similarity="ratio", scale="derived",
|
||||
else:
|
||||
slope = _slope3(x, fx, x_prev, f_prev, x_prev2, f_prev2)
|
||||
sc = abs(slope) * abs(far - x)
|
||||
elif scale == "derived3_cap":
|
||||
# Valeri, 2026-09-21: "if the similarity formed the step, the step would be
|
||||
# large far from the target and small near it". It does not, and the reason
|
||||
# is the normalisation: with sigma = |slope| * D the similarity reads "what
|
||||
# fraction of the BRACKET the Newton step is", not "how far am I". On a
|
||||
# 2e4-wide bracket of x^3-2x-5 at x = 1e4 that fraction is 0.167, so S =
|
||||
# 0.833 - "similar" - and the step is small exactly where it should be large.
|
||||
# The scale is therefore SELECTED between the two already-computed ones:
|
||||
# far away the value scale of the bracket ends is the smaller and the step
|
||||
# opens up; near the root the slope scale is the smaller and Newton (and the
|
||||
# order) returns. A min over what is in hand - no constant, no threshold.
|
||||
slope = _slope3(x, fx, x_prev, f_prev, x_prev2, f_prev2)
|
||||
sc = min(abs(slope) * abs(far - x), max(abs(FA), abs(FB)))
|
||||
if scale == "derived3_m":
|
||||
# REFUTED as an improvement - kept for reproducibility.
|
||||
# The DERIVATION holds: dropping the linearity
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+15
-3
@@ -198,6 +198,15 @@ def build_grid_log(smoke):
|
||||
for sim in sims for sc in ("derived", "derived3") for gu in guards]
|
||||
|
||||
|
||||
def build_grid_cap(smoke):
|
||||
"""Scale as a SELECTION between the two computed ones (PREREG 2026-09-21): identical to
|
||||
the slope+dissimilar configuration except scale = derived3_cap, so one thing changes."""
|
||||
sims = ["ratio", "sqrt"] if smoke else sorted(PURE_SIMS)
|
||||
guards = ("credit", "safe") if smoke else GUARD_MODES
|
||||
return [("pure", sim, "derived3_cap", gu, "x", "slope", "recent", "dissimilar")
|
||||
for sim in sims for gu in guards]
|
||||
|
||||
|
||||
def build_grid_combo(smoke):
|
||||
"""A+B together (PREREG 2026-09-21 §2: licensed only because each mode alone improved
|
||||
APS — A 2527 and B 2726 against the published 2806)."""
|
||||
@@ -264,10 +273,12 @@ def main():
|
||||
logmode = "--log" in sys.argv # the u-space grid, written to its OWN file
|
||||
gatemode = "--gate" in sys.argv # the pre-step gate grid, likewise
|
||||
slopemode = "--slope" in sys.argv # the slope-stability gate grid
|
||||
capmode = "--cap" in sys.argv # scale selected between the two computed ones
|
||||
combomode = "--combo" in sys.argv # modes A and B together
|
||||
pointsmode = "--points" in sys.argv # mode A: triple by shape
|
||||
dirmode = "--direction" in sys.argv # mode B: far end by dissimilarity
|
||||
specs = (build_grid_combo(smoke) if combomode else
|
||||
specs = (build_grid_cap(smoke) if capmode else
|
||||
build_grid_combo(smoke) if combomode else
|
||||
build_grid_points(smoke) if pointsmode else
|
||||
build_grid_direction(smoke) if dirmode else
|
||||
build_grid_slope(smoke) if slopemode else
|
||||
@@ -288,8 +299,9 @@ def main():
|
||||
|
||||
# the published sweep_full.json is what verify_article.py checks the paper
|
||||
# against, so the log grid never writes into it
|
||||
if combomode or pointsmode or dirmode:
|
||||
base = ("sweep_combo" if combomode else
|
||||
if capmode or combomode or pointsmode or dirmode:
|
||||
base = ("sweep_cap" if capmode else
|
||||
"sweep_combo" if combomode else
|
||||
"sweep_points" if pointsmode else "sweep_direction")
|
||||
out = f"{base}_smoke.json" if smoke else f"{base}.json"
|
||||
with open(out, "w", encoding="utf8") as fh:
|
||||
|
||||
Reference in New Issue
Block a user