# PREREG — похожесть в двух ещё незанятых местах: СОСТАВ ТОЧЕК и НАПРАВЛЕНИЕ Составлено до реализации. Основание — `FINDINGS_slope_gate.md`: решает **валюта и место** чтения похожести. Одна и та же идея «отказывайся до шага» дала 4449 вызовов на APS при отказе по прогрессу скобки и 2848 при отказе по форме модели — разница 1601 вызов. Карта мест решения показала два незанятых: | место | чем решается сейчас | |---|---| | **состав точек для модели** | **давностью**: `x_prev2 ← x_prev ← x ← x_new`, всегда три последних | | **направление** (какой конец «дальний») | **расстоянием**: `far = B if \|B−x\| ≥ \|A−x\| else A` | --- ## 1. Режим A — состав точек по ФОРМЕ (`points="shape"`) Оценка наклона строится на тройке точек. Сейчас тройка берётся по давности, даже если она плохо обусловлена. Brent, TOMS 748 и Chandrupatla все **управляют составом точек** — это часть их конструкции, а у нас этого места нет вовсе. **Признак — та же валюта, что уже сработала: форма конфигурации, безразмерно.** Для тройки `(x, u, v)` считаются два отношения в духе Chandrupatla: ξ = (x − u)/(v − u) — отношение ПОЗИЦИЙ φ = (f(x) − f(u))/(f(v) − f(u)) — отношение ЗНАЧЕНИЙ Для линейной `f` выполняется `φ = ξ` точно, поэтому `|φ − ξ|` — безразмерная мера непохожести конфигурации на линейную. Правило: **argmin |φ − ξ|** по объявленному списку кандидатов. **Список кандидатов объявляется здесь и не расширяется по результату:** T1 = (x, x_prev, x_prev2) — нынешнее правило давности T2 = (x, x_prev, far) — свежая точка плюс дальний конец скобки T3 = (x, A, B) — оба конца доказанной скобки Вырожденные (совпадающие абсциссы или значения) выбрасываются. Порога нет: это **argmin по имеющимся вариантам**, а не сравнение с числом. Правило корпуса «select, never weight» соблюдено — тройка **выбирается**, оценки не взвешиваются. ## 2. Режим B — направление по НЕПОХОЖЕСТИ (`direction="dissimilar"`) Сейчас «дальний» конец — геометрически более удалённый. Похожесть даёт другой ответ: дальним считать конец, чьё `|f|` **больше**, то есть менее похожее на ноль. Ни константы, ни порога — сравнение двух имеющихся величин. **Режимы независимы и мерятся отдельно** (правило «менять одно за раз»); комбинация A+B мерится третьим прогоном только если оба по отдельности не ухудшили APS. ## 3. Цели Точка отсчёта — уже достигнутое гейтом на наклоне (`slope.ratio.derived3.project`): APS **2848**, CHA **3074**, два набора **5922**, 193/199, `over2x = 0`. | величина | цель | |---|---| | APS-154 | **≤ 2848** (не хуже текущего; идеально — вернуть 2806) | | CHA-45 | **≤ 2857** (недобранная цель ITP; сейчас 2903 по-наборно) | | два набора | **< 5922** | | решено | ≥ 193/199 | | гарантия `2⌈log₂(w/xtol)⌉+3` | `over2x = 0` | ## 4. Предсказания и фальсификаторы | # | Предсказание | ФАЛЬСИФИКАТОР → вывод | |---|---|---| | **A1** | режим A не ухудшает APS (≤2848) и улучшает CHA (<2903) | ухудшает APS → состав точек не то место, режим отвергается | | **A2** | выбор тройки **не инертен**: отличается от давностной в ≥5 % шагов | <1 % → режим ничего не меняет, замер НЕ является свидетельством ни за, ни против | | **B1** | режим B не ухудшает APS (≤2848) | ухудшает → направление по непохожести отвергается | | **B2** | выбор конца отличается от геометрического в ≥5 % шагов | <1 % → инертен, замер пуст | | **C** | гарантия цела в обоих режимах | нарушена → немедленное закрытие режима | **Правило остановки:** APS ухудшился или гарантия нарушена ⇒ режим не принимается. Инертность (A2/B2) ⇒ результат не толкуется как подтверждение: это отсутствие эксперимента, а не его исход. ## 5. Гейты реализации (тесты ДО рейтинга) | # | Условие | Проверка | |---|---|---| | **P1** | `points="recent"` и `direction="distance"` дают побитово прежний результат | равенство кортежей на наборе задач и сторожей | | **P2** | в обоих признаках нет констант | греп по коду (без комментариев): только `0.0`, `0.5`, `1.0` | | **P3** | счётчики `stats['triple_changed']`, `stats['dir_changed']` считают неинертность | тест на обоих | | **P4** | вырожденные тройки отбрасываются, а не дают деление на ноль | тест на совпадающих абсциссах и значениях | | **P5** | ни один режим не добавляет вызовов `f` | число вызовов ≤ число шагов + 2 | **Дисциплина:** аудит после правки и до запуска; смоук ×2 локально; свипы в свои файлы (`sweep_points.json`, `sweep_direction.json`), `sweep_full.json` не трогать; числа только с Linux; замороженные копии; числа показываются немедленно.