Files
sim-numerics/PREREG_out_of_sample_2026-09-21.md
T

61 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PREREG — проверка двух сильнейших вариантов: абляция и новый корпус
Составлено до прогона, ветка `signfix-and-gates`. Валерий: «результат сильный и уже достоин
статьи»; «давай проверим оба сильнейших варианта».
## Зачем
Все решения сегодня принимались на тех же 199 задачах (APS 154 + Chandrupatla 45). Предрегистрация
защищает каждый шаг, но не цепочку: итоговые ячейки отобраны по этим наборам. Нужны (1) абляция
каждой составляющей и (2) задачи, на которых ничего не разрабатывалось.
## Варианты (проекция, tent, трёхточечный масштаб)
- **A** = Г2 + `contra+flatanalogmempt+exp+half` (APS 2559, CHA 2047)
- **B** = `defect+flatanalogmempt+exp`, без Г2 (APS 2531, CHA 1972)
- справочно: предложенный метод без добавок; соперники — библиотечные Чандрупатла
(`elementwise.find_root`), Брент (`brentq`), TOMS748.
## Часть 1 — новый корпус (`corpus_new.py`, зерно 20260921, закоммичен до прогона)
206 задач, не использованных в разработке: C0 — набор SciPy `original` (6); C1–C5 по 40,
параметры из заранее заданных распределений: C1 гладкий простой корень, C2 трансцендентный простой
(atan/tanh/expm1/sinh), C3 кратный/плоский корень |x−r|^p, p ~ U(2, 20), C4 экспоненциальный склон,
C5 почти сокращающиеся члены (как у fun9, параметры случайные). Корень известен по построению.
Учёт тот же: XTOL 10⁻¹², MAXFEV 200, решено при |x − r| ≤ 10⁻⁶, неудача = 200.
Для каждого варианта V ∈ {A, B}:
| # | ПРОЙДЕНО, если |
|---|---|
| **O1** | сумма вызовов V на корпусе меньше, чем у Чандрупатлы |
| **O2** | по задачам против Чандрупатлы побед больше, чем поражений, знаковый тест p < 0.05 |
| **O3** | гарантия: 0 нарушений (≤ 2⌈log₂(w/xtol)⌉ + 4 на решённых); решено не меньше, чем у Чандрупатлы |
| **O4** | сумма V меньше, чем у предложенного метода без добавок (добавки переносятся) |
**Вывод «переносится на новые задачи»** — только при O1, O2, O3 одновременно. Сообщается всё, по
каждому классу отдельно, против всех трёх соперников. **Никаких изменений метода после этого
прогона в рамках этой проверки**; корпус и критерии не меняются.
Классы C3–C5 близки к тому, на чём мы искали (плоские, экспонента, сокращение); C0–C2 — нейтральны
и выгодны модели Чандрупатлы. Вывод сообщается и отдельно по C0–C2.
## Часть 2 — абляция (APS, CHA и новый корпус)
Снимается по одной составляющей, Δ = (без неё) − (с ней), плюс = составляющая заслужена:
- A: Г2; `contra`; `half`; `exp`; точка (`flatanalogmempt` → `flatanalogmem`); весь плоский режим
(снять `flatanalogmempt` и `exp`).
- B: `defect`; `exp`; точка; весь плоский режим.
Составляющая с Δ ≤ 0 на всех трёх наборах **не заслужена** и из предложения убирается.
## Дополнение (после двух прогонов, до сервера) — воспроизводимость
Задача C0.05 = SciPy `original.05.00` — **случайная ступенчатая функция** (`random()` без зерна,
значения в общем кэше модуля, разделяемом всеми прогонами процесса). Два локальных прогона без
зерна разошлись только на ней (на 2–9 вызовов у каждого метода, включая соперников) и дали
**одинаковые вердикты** (A: O1–O3 ✓; B: O2 ✗). Поправка: перед каждым прогоном кэш очищается, зерно
20260921 — все методы встречают одну и ту же функцию, прогон воспроизводим. Задача остаётся в корпусе;
критерии и остальной корпус не меняются.