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

61 lines
5.6 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 — плоский режим: залипающее деление в точке, выведенной из порядка
Составлено до кода и до прогона, ветка `signfix-and-gates`. Валерий: «если мы можем определить место
плоских функций, мы можем там тоже делить на 2»; «а если делить не на 2, а на 2.5?»; «делай».
## Основание (замерено, без нового прогона метода)
- Потолок по готовому `sweep_full.json`: предложенный метод, у которого 20 плоских задач широких
скобок (fun3–6) решены чистым делением пополам, дал бы на широких скобках **2441** — ровно
Чандрупатла. Весь разрыв 3220 − 2441 сидит в плоских задачах.
- Три флага (`flat`, `flat2`, `flatcreep`) давали под проекцией не больше −22: флаг заменял делением
ОДИН шаг, после чего модель снова недолетала. Место узнавалось и тут же забывалось.
- Деление в отношении 1 : k от конца с меньшим |f| (`split_k.py`, сервер): на плоских k = 2.5 — 749
против 1044 у деления пополам, потолок 2146; с противоположного конца хуже деления (1394). Выигрыш
даёт суждение «какой конец больше похож на корень». Зависимость от k немонотонна (749 / 816 / 708
при 2.5 / 3 / 4), выбирать k нельзя — отношение нужно вывести.
## Правило (новых констант нет)
Вход — тот же признак, что у `flat`: последний шаг был шагом модели, знак f не сменился и
r = f/f_prev ≥ ¼. С этого момента и **до конца прогона** каждый шаг — деление скобки (режим залипает).
**Порядок m — из самого несбывшегося обещания.** У касательного шага на подходе порядка m остаток
r = (1 − 1/m)^m; это обращается в m ≥ 2 однозначно (функция монотонна, r = ¼ ↔ m = 2). При
r ≥ 1/e решения нет — m = ∞. m замеряется один раз, при входе.
**Точка деления из m.** Для |f| ∝ |x − r|^m концы скобки удалены от корня как
dA : dB = |FA|^(1/m) : |FB|^(1/m), отсюда точка x = A + t(B − A), t = |FA|^(1/m) / (|FA|^(1/m) + |FB|^(1/m)).
Она ближе к концу с меньшим |f|; m = ∞ даёт t = ½, т.е. деление пополам — правило само сходит в
деление там, где порядок не прочитан. Выход точки из скобки или совпадение с прежней — середина
(действующий запасной путь метода).
Режимы:
- `prestep="flatstick"` — залипание + точка из m (проверяемое правило);
- `prestep="flatstickmid"` — залипание + середина (**абляция** точки из m: разность двух режимов
и есть вклад выведенного отношения).
Предохранитель (проекция и остальные) применяется к шагу как всегда — гарантия им и держится.
## Проверка
Сразу полная сетка на сервере. Пары «без / `flatstick` / `flatstickmid`» для предложенного метода и
для него же с Г2 (повтор рисунка шагов), все 7 предохранителей; девять функций без чтений.
| # | ПРОЙДЕНО, если |
|---|---|
| **W1** | широкие скобки ниже, чем без флага (3220; с Г2 — 3169) |
| **W2** | канонические задачи не выше, чем без флага (2806; с Г2 — 2782) |
| **W3** | гарантия: 0 нарушений в семействе, решено ≥ 193 |
| **W4** | плоские fun3–6 дешевле |
| **W5** | сообщается: по задачам против Чандрупатлы на канонических; оба набора против 5228 |
| **W6** | `flatstick` дешевле `flatstickmid` на плоских — иначе выведенное отношение не заслужено |
**Правило остановки:** `flatstick` принимается, только если W1, W2, W3 выполнены одновременно.
Утверждение «точка из порядка работает» — только при W6 сверх того.
**Ожидаемый риск, записан заранее:** ложный флаг на канонических задачах (21.6% шагов у `flat`)
теперь залипает до конца прогона; на простом корне правило при m ≥ 2 делит в точке корня
из |f| — линейная сходимость вместо модели. Если W2 провалится, это и будет причиной; выход из
режима тогда — следующий вопрос, не подгонка этого.