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

88 lines
7.0 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 — похожесть в двух ещё незанятых местах: СОСТАВ ТОЧЕК и НАПРАВЛЕНИЕ
Составлено до реализации. Основание — `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;
замороженные копии; числа показываются немедленно.