PREREG before code and run: both directions. (1) defect decision combined with the flat regime (analogy / remembered analogy) for canonical headroom; (2) contra: halve when the local secant's sign contradicts the bracket's - the fun9 cause (a near-cancelling left end, |f| doubling 17 steps in a row); traces: 3/5 fun9, 7/154 canonical, 0 flat. Composite prestep 'a+b+c', one per category; factorial grid on the proposed rule +/- G2; decided on the smoke; goal = below Chandrupatla on both; ablation of every component of the best cell.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# PREREG — оба направления: «дефект» с плоским режимом и противоречие знака на fun9
|
||||
|
||||
Составлено до кода и до прогона, ветка `signfix-and-gates`. Валерий: «проверь оба направления».
|
||||
|
||||
## Основание
|
||||
|
||||
**Направление 1 — запас на канонических.** Лучший принятый вход по аналогии (с Г2) — канонические
|
||||
2780, широкие 2625; с запомненной аналогией широкие 2548, но канонические 2787 (не принят: +7 от
|
||||
пяти лишних ложных входов). Решение в месте «дефект» (|φ − ξ| > min(ξ, 1 − ξ) → делить) одно даёт
|
||||
канонические **2523** (широкие 3210). Если выигрыши складываются, запас в 264 покрывает лишние входы.
|
||||
|
||||
**Направление 2 — fun9** (`diag_fun9_slope_sign.py`): у левого конца [2·10⁻⁴, …] два члена почти
|
||||
гасятся, f(a) ≈ −1 против 5·10¹¹ справа; метод читает корень у левого конца, а f ныряет до −3.7·10⁴.
|
||||
17 шагов подряд |f| удваивается: **локальный наклон по знаку противоречит скобке** (f должна расти
|
||||
от отрицательного конца к положительному). По трассам: противоречие в 3 из 5 задач fun9 (19
|
||||
состояний), в 7 из 154 канонических (29 из 1608 состояний), в 1 задаче fun1, **ни разу** на
|
||||
плоских и остальных.
|
||||
|
||||
## Правила (новых констант нет)
|
||||
|
||||
- `defect` — как есть (`_decide_refuse`).
|
||||
- `contra` (новое): если знак локальной секанты (f_x − f_prev)/(x − x_prev) противоположен знаку
|
||||
секанты скобки (F_B − F_A)/(B − A), этот шаг — середина. Сравниваются два знака; порога нет.
|
||||
Одношаговое решение (не режим).
|
||||
- `flatanalog`, `flatanalogmem` — как приняты/проверены.
|
||||
- Составной `prestep` через «+»: по одному из категорий {решение: defect}, {противоречие: contra},
|
||||
{плоский режим: flatanalog | flatanalogmem}. Порядок: решение → память и режим плоских (память
|
||||
пополняется в **каждом** состоянии, даже если шаг уже отдан середине) → противоречие.
|
||||
Одиночные режимы ведут себя в точности как раньше (тесты-пины).
|
||||
|
||||
## Проверка
|
||||
|
||||
Решение по **смоуку** (все 199 задач), сервер — подтвердить, если цель достигнута. Ячейки:
|
||||
предложенный метод (проекция) и он же с Г2, для `prestep` ∈
|
||||
|
||||
none, defect, contra, flatanalog, flatanalogmem,
|
||||
defect+contra, defect+flatanalog, defect+flatanalogmem, contra+flatanalog, contra+flatanalogmem,
|
||||
defect+contra+flatanalog, defect+contra+flatanalogmem
|
||||
|
||||
| # | ПРОЙДЕНО, если |
|
||||
|---|---|
|
||||
| **C1** | ячейка: широкие ниже, чем без решений (3220; с Г2 — 3169) |
|
||||
| **C2** | ячейка: канонические не выше, чем без решений (2806; с Г2 — 2782) |
|
||||
| **C3** | гарантия: 0 нарушений, решено ≥ 193 |
|
||||
| **ЦЕЛЬ** | канонические < **2787** и широкие < **2441** (Чандрупатла) |
|
||||
| **C4 (абляция)** | для ячейки, достигшей цели (или лучшей по сумме): снятие каждой составляющей по одной — её вклад Δ сообщается; составляющая с Δ ≥ 0 на обоих наборах **не заслужена** и из предложения убирается |
|
||||
|
||||
**Правило остановки:** ячейка принимается при C1, C2, C3. Цель сообщается отдельно; если ни одна
|
||||
ячейка её не достигла — сообщается, на сколько и на каком наборе не хватило.
|
||||
По каждому направлению отдельно: принят ли `contra` (есть ли ячейка с ним, лучше той же без него на
|
||||
широких и не хуже на канонических) и складывается ли `defect` с плоским режимом.
|
||||
@@ -0,0 +1,55 @@
|
||||
"""Why the proposed rule loses on fun9 (exp(x) - 2 - 0.01/x^2 + 2e-6/x^3, brackets from
|
||||
[2e-4, 1] to [2e-4, 81]) - and whether the cause is a distinguishing sign.
|
||||
|
||||
On fun9.4 the two negative powers nearly cancel at the left end: f(2e-4) = -1 against
|
||||
5e11 at the right end, so the rule reads the root as near the left end, while f dives to
|
||||
-3.7e4 before it turns up to the root at 0.703. 17 model steps in a row DOUBLE |f|: the
|
||||
local slope has the sign opposite to the one the bracket demands (f must rise from its
|
||||
negative end to its positive end).
|
||||
|
||||
The sign considered: the local secant of the last two points, (fx - fp)/(x - xp), against
|
||||
the bracket's, (FB - FA)/(B - A). Opposite signs = the local picture contradicts the
|
||||
bracket. Per state (trace hook, proposed rule, no regime) and per problem, per group.
|
||||
Nothing in the method changes.
|
||||
|
||||
python -u diag_fun9_slope_sign.py
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
|
||||
from simroot.pure import pure_root
|
||||
from sweep_full import MAXFEV, XTOL, load_problems
|
||||
|
||||
FLAT = ("fun3", "fun4", "fun5", "fun6")
|
||||
|
||||
|
||||
def main():
|
||||
per = defaultdict(lambda: [0, 0, 0, 0]) # problems, with any contradiction, states, contradicting
|
||||
for s, pid, f, a, b, _root in load_problems():
|
||||
st = {"trace": []}
|
||||
pure_root(f, a, b, XTOL, MAXFEV, similarity="ratio", scale="derived3",
|
||||
guard="project", stats=st)
|
||||
fam = pid.split(".")[0]
|
||||
g = "APS" if s == "APS" else ("CHA-flat" if fam in FLAT else f"CHA-{fam}")
|
||||
bad = 0
|
||||
for t in st["trace"]:
|
||||
if t["x"] == t["xp"]:
|
||||
continue
|
||||
loc = (t["fx"] - t["fp"]) / (t["x"] - t["xp"])
|
||||
brk = (t["FB"] - t["FA"]) / (t["B"] - t["A"])
|
||||
per[g][2] += 1
|
||||
if loc != 0.0 and (loc > 0.0) != (brk > 0.0):
|
||||
bad += 1
|
||||
per[g][0] += 1
|
||||
per[g][1] += bad > 0
|
||||
per[g][3] += bad
|
||||
print(f"{'group':<10} {'problems':>8} {'any contradiction':>18} {'states':>7} {'contradicting':>14}")
|
||||
for g in sorted(per):
|
||||
n, anyc, sts, c = per[g]
|
||||
print(f"{g:<10} {n:8d} {anyc:18d} {sts:7d} {c:14d}")
|
||||
print("diag done")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user