two more places for similarity: points='shape' (WHICH triple the model uses, argmin |phi-xi| over declared candidates — select, never weight) and direction='dissimilar' (the far end read by |f| rather than by distance); defaults bit-identical, P1-P5 pinned (7 green), inertness counters make an inert mode a failed EXPERIMENT rather than a pass; each grid writes to its own file

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
vvs
2026-09-20 23:39:41 +01:00
co-authored by Claude Opus 5
parent e4769be9a3
commit 04ee5c89b9
6 changed files with 320 additions and 8 deletions
+87
View File
@@ -0,0 +1,87 @@
# 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;
замороженные копии; числа показываются немедленно.