Files
sim-numerics/PREREG_slope_gate_2026-09-21.md

72 lines
7.0 KiB
Markdown
Raw Permalink 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 — гейт на УСТОЙЧИВОСТИ НАКЛОНА (форма, а не прогресс)
Составлено до реализации. Основание — два измерения этой линии:
1. `FINDINGS_prestep_gate.md`: гейт по **прогрессу скобки** обваливает ремонты (77.5 % → 15.9 %) и
впервые берёт цель ITP на CHA (**2851 ≤ 2857**), но APS дорожает 2806 → **4449**, потому что
прогресс скобки — **неверная валюта отказа**: секущий шаг обрушивает ошибку, почти не двигая
скобку (в проекте это уже измерено: **150 против 86**).
2. `FINDINGS_logarithmic.md` §3: Chandrupatla отказывает не по прогрессу, а по **форме конфигурации**
(`ξ`, `φ` — безразмерные отношения; полоса есть окрестность линейного случая), и его отказ стоит
**ноль** вызовов.
**Гипотеза:** нужный признак отказа — не «сколько обещает шаг», а «установилась ли модель, которой
шаг доверяет». Наш шаг доверяет **локальному наклону**, значит вопрос доверия — **устойчивость
наклона**.
---
## 1. Признак, выведенный для НАШЕГО шага (и без единой константы)
Метод оценивает наклон на каждом шаге (`derived` — по двум последним точкам, `derived3` — по трём).
Две последовательные оценки `slope_prev` и `slope` дают безразмерное сравнение. Объявленный признак
отказа — **несогласие знака**:
> если `slope_prev` и `slope` оба не нули и **их знаки различны**, локальная модель не установилась
> (функция локально даже не монотонна в одном направлении) ⇒ шаг заменяется делением пополам.
Почему это беспараметрично: сравнивается **знак**, а не величина; порога нет, множителя нет,
сравнения с выбранным числом нет. Почему это форма, а не прогресс: признак читается из конфигурации
данных (две оценки наклона), а не из обещанной длины шага.
**Почему ожидается инертность на каноническом наборе** (то, чего не хватило прошлой попытке): у
простого корня гладкой функции знак наклона устойчив, значит гейт молчит и APS не дорожает. Срабатывать
он должен в плоских областях широких скобок, где оценки наклона мелкие и болтаются.
**Чего НЕ делаем:** не вводим порог на отношение величин наклонов (`|s1|/|s2| < k` — это константа
`k`); не переносим полосу `1−√(1−ξ) < φ < √ξ` (выведена для обратной квадратичной интерполяции).
**Режим:** `prestep="slope"`; `"none"` остаётся по умолчанию и побитово прежним; `"progress"` остаётся
в коде как **измеренный отрицательный результат**, помеченный в докстринге.
## 2. Предсказания и фальсификаторы
| # | Предсказание | ФАЛЬСИФИКАТОР → вывод |
|---|---|---|
| **S1** | APS-154 **не дорожает**: по-наборный лучший ≤ **2806** | >2806 → шестая попытка тем же трейдом; признак «форма» тоже не спасает, линия закрывается |
| **S2** | CHA-45 дешевеет против x-пространства: по-наборный лучший < **4516** | не дешевеет → гейт инертен всюду, гипотеза о наклоне неверна |
| **S3** | доля ремонтов сторожем падает против 77.5 % | не падает → гейт не бьёт в механизм |
| **S4** | гарантия `2⌈log₂(w/xtol)⌉+3` цела: `over2x = 0` | нарушена → закрытие немедленно |
| **S5** | качество пробы на CHA растёт против 1.422 | не растёт → отказ не улучшает пробу, только переставляет расходы |
**Правило остановки:** S1 или S4 ложны ⇒ режим не принимается. S1 верна и S2 верна ⇒ **это первый
режим линии, который берёт широкие скобки, не продавая узкие**, и тогда следующий шаг — свип по всей
сетке и проверка, попадает ли лучшая конфигурация в цель <6026 на двух наборах.
## 3. Протокол и гейты реализации
Протокол статьи: 154 APS + 45 CHA, цена — вызовы `f`, провал = полный бюджет, граница `2×` на каждом
решённом прогоне, конфигурация фиксируется выводом до рейтинга, числа только с **Linux**, свип пишется
в свой `sweep_slope.json`.
| # | Условие реализации | Проверка тестом |
|---|---|---|
| **T1** | `prestep="none"` побитово как раньше | равенство кортежей возврата на наборе задач и сторожей |
| **T2** | в гейте нет ни одной константы | греп по коду гейта (без комментариев): допустимы только `0.0` и `0.5` |
| **T3** | гейт инертен там, где знак наклона устойчив | на гладкой монотонной задаче число вызовов совпадает с `prestep="none"` |
| **T4** | гейт срабатывает там, где знак наклона меняется | на задаче с немонотонностью `stats['pre_refused'] ≥ 1` |
| **T5** | отказ не добавляет вызова | `pre_refused ≤ nfev − 2` |
**Дисциплина:** аудит после правки и до запуска; смоук ×2 локально; свип на сервере с замороженной
копией; числа немедленно.