7.1 KiB
PREREG — предшаговый гейт: похожесть как ОТКАЗ до шага, а не масштаб внутри шага
Составлено до реализации. Основание — измерение explain_chandrupatla.py (лог
results_explain_chandrupatla.txt, разбор в FINDINGS_logarithmic.md §3): Chandrupatla принимает
свою модель лишь в 28 % шагов, его гейт стоит ноль вызовов, а ветвь отказа снимает половину
скобки; наш сторож ремонтирует 77.5 % вызовов, и на fun8/fun9 мы опускаемся до 0.92
половинок на вызов — хуже деления пополам. Качество пробы: 2.310 против 1.422.
Гипотеза: дело не в форме функции похожести, а в месте её чтения. Похожесть, прочитанная ДО шага и решающая «доверять ли модели здесь», стоит ноль; прочитанная ВНУТРИ шага как масштаб — требует сторожа, а сторож платит вызовом.
1. Что именно добавляется (и почему это не новая константа)
Важно, что наша причина ремонтов ДРУГАЯ, чем у Chandrupatla. Наш шаг
(1 − S(|f|/σ))·(far − x) при 0 ≤ S ≤ 1 никогда не выходит за скобку — то есть перескок нам не
грозит; сторож вмешивается, когда шаг слишком короткий и прогресс мал. Значит и гейт должен
спрашивать не «не выйдет ли проба за скобку» (вопрос Chandrupatla для его модели), а:
обещает ли этот шаг прогресс не хуже, чем деление пополам?
Обе длины известны ДО вызова f: длина шага |step| и длина шага в середину |½(A+B) − x|.
Сравнение двух имеющихся длин — не константа и не подгонка; порога нет, есть неравенство.
Режим: prestep="none" (по умолчанию — опубликованное поведение побитово) и
prestep="progress" (гейт включён). Если гейт отказал, шаг заменяется на деление пополам, то есть
тот же один вызов f тратится на гарантированное снятие половины скобки.
Чего НЕ делаем: не переносим полосу 1−√(1−ξ) < φ < √ξ в наш метод. Она выведена для обратной
квадратичной интерполяции из условия «проба не выйдет за скобку»; у нашего шага этого условия нет, и
взятая напрокат область была бы скрытой константой чужого вывода.
2. Предсказания и фальсификаторы
| # | Предсказание | ФАЛЬСИФИКАТОР → вывод |
|---|---|---|
| P1 | доля ремонтов на CHA падает с 77.5 % до ≤40 % | >60 % → гейт не бьёт в механизм, объяснение §3 неверно как рецепт |
| P2 | цена на CHA падает ниже нашей текущей 2073 (та же конфигурация ratio.derived3.credit) |
не падает → отказ дешевле ремонта не оказался, гипотеза о месте чтения не подтверждена |
| P3 | цена на APS-154 не растёт (по-наборный лучший остаётся ≤ 2806) | растёт → тот же трейд, что убил пять предыдущих попыток; гейт отвергается |
| P4 | гарантия 2⌈log₂(w/xtol)⌉+3 не нарушена: over2x = 0 во всех конфигурациях |
нарушена → закрытие немедленно |
| P5 | качество пробы на CHA растёт с 1.422 к уровню ≥2.0 половинок на вызов | <1.7 → прирост есть, но не тот порядок; заявлять «как Chandrupatla» нельзя |
Правило остановки: P3 или P4 ложны ⇒ режим не принимается вовсе. P1 и P2 ложны ⇒ объяснение остаётся верным как описание Chandrupatla, но как рецепт для нашего метода — опровергнуто, и это пишется прямо.
3. Протокол (тот же, что у статьи)
154 задачи Alefeld–Potra–Shi + 45 Чандрупатлы; цена — вызовы f; провал списывается полным бюджетом;
граница 2× проверяется на каждом решённом прогоне; конфигурация фиксируется выводом ДО того, как
смотрят в рейтинг. Числа только с Linux. Свип пишется в свой файл (sweep_gate.json), чтобы
sweep_full.json, против которого сверяется статья, остался нетронутым.
Сравнение ведётся по-наборно и внутри семейства сторожей, несущих гарантию — иначе сравниваются разные конфигурации (эта ошибка уже допущена 2026-09-20 и исправлена).
4. Гейты реализации (тесты ДО рейтинга)
| # | Условие | Проверка |
|---|---|---|
| R1 | prestep="none" даёт побитово прежний результат |
тест на равенство кортежей возврата на наборе задач |
| R2 | в гейте нет ни одной выбранной константы | грепом по исходнику: только 0.0, 0.5 (середина скобки — определение деления пополам), 1.0 |
| R3 | отказ гейта не стоит вызова f |
тест: число вызовов при включённом гейте не превышает число шагов + 2 |
| R4 | счётчик stats['pre_refused'] считает отказы гейта отдельно от ремонтов сторожа |
тест на обоих счётчиках |
Дисциплина: аудит после правки и до запуска; смоук ×2 локально; тяжёлое — на сервер
setsid nohup с логом; замороженная копия скрипта; числа показываются немедленно.