Files
sim-numerics/FINDINGS_logarithmic.md
T

8.8 KiB
Raw Blame History

Findings — логарифмическая замена переменной (линия NEXT_PAPER_logarithmic.md)

Пред-регистрация: PREREG_logarithmic_2026-09-20.md. Здесь — то, что установлено, в порядке установления. Числа только с Linux (libm).


0. Базовое состояние воспроизведено (2026-09-20, сервер)

  • pytest tests/ -q → 665 passed, 9 skipped, 364.91 s.
  • verify_article.py → «every number stated in the paper matches the sweep data» (все 72 числа).
  • 🟡 Несоответствие документации: README обещает «490 tests», фактически 674. README не правлю — он описывает опубликованный артефакт; расхождение зафиксировано здесь.
  • 🟡 На сервере не было ни одного *.json: sweep_full.json (1 349 222 байта) залит с ноутбука, иначе проверки, сверяющие статью с данными, молча пропускаются (те самые 9 skipped).

1. 🔴 Два гейта допуска НЕСОВМЕСТИМЫ в строгой формулировке — установлено ВЫВОДОМ, без прогона

Шаг метода: step = (1 − S(|f|/sc))·(far − x), sc = |slope|·|far − x|. Гейт G1 — c, s выводятся из скобки; гейт G2 — на узких скобках преобразование тождественно до округления, то есть требует |x − c| / s → 0 при сжатии скобки.

выбор единицы s (все беспараметрические) узкая скобка широкая скобка
s = |f(c)|/|f'(c)| — ньютоновская длина (пред-регистрированный кандидат) у простого корня |x−c| ~ |f|/|f'| ~ s, отношение → O(1), тождественности НЕТ марш есть
s = w₀ — исходная ширина скобки (датум задачи) |x−c|/w₀ → 0, тождественность есть |x−c|/w₀ ≤ 1 ⇒ снова почти тождественность, марша НЕТ
u = log|x−c| — без единицы вовсе режима тождественности нет и x = c не определено марш есть
s = |x−c| — самомасштабируемая мультипликативный шаг отличается от аддитивного во втором порядке O((Δ/(x−c))²) ⇒ строгой тождественности НЕТ марш есть

Вывод: ни одна доступная беспараметрическая единица не удовлетворяет G1 и строгому G2 одновременно. Это свойство постановки, а не деталь реализации.

Что из этого следует содержательно: марш требует отношения расстояний, а тождественность — абсолютной шкалы; одно преобразование не может быть одновременно масштабно-свободным и масштабно-привязанным. Заодно это объясняет, почему cbrt «работал случайно»: он берёт фиксированную долю скобки, то есть отношение, и потому марширует — но фиксирует показатель 1/3 как константу, чего метод себе позволить не может.

Развилка, вынесенная Валерию (решение не моё):

  • A — оставить G2 строгим ⇒ линия закрывается сейчас, по выводу; отрицательный результат постановки, сам вывод сохранён.
  • B — заменить G2 на его же измеримое чтение из пред-регистрации (L2: «на APS-154 суммарная цена не растёт»), реализовать самомасштабируемый режим и мерить; строгая тождественность была лишним обещанием, а не требованием протокола статьи.

Ослабление пред-регистрированного гейта после его провала — приём, которым легко обмануть себя, поэтому он делается только по явному решению, и оба варианта записаны здесь заранее.

Решение Валерия: вариант B — G2 заменён измеримым G2′, единица s = xtol зафиксирована выводом (поправка 1 пред-регистрации).


2. 🔴 Измерено: логарифмический марш НЕ платит. Линия закрывается

Режим реализован как space="log" в pure_root (по умолчанию "x", опубликованный тракт побитово не тронут — пиннится тестом); свип 126 конфигураций × 199 задач по тому же протоколу (sweep_full.evaluate, тот же XTOL/MAXFEV/ACC, провал = полный бюджет, проверка границы 2× на каждом прогоне), результат в своём файле sweep_log.json. Сравнение — по-наборно, правилом статьи, и внутри семейства сторожей, несущих гарантию.

проверка цель измерено вердикт
G2′ цена на APS-154 не растёт ≤ 2806 6940 🔴 FAIL — в 2.5 раза дороже
L3 Chandrupatla-45 ≤ 2857 2857 3115 🔴 FAIL
два набора вместе < 6026 10 414 🔴 FAIL
L1 широкие скобки дешевле ≥2× ≥2× 4516 → 3115 = 1.45× 🔴 FAIL
решено ≥193/199 193/199 🟢 PASS
гарантия 2⌈log₂(w/xtol)⌉+3 не нарушена over2x = 0 во всех конфигурациях 🟢 PASS

Лучшие конфигурации: APS — log.ratio_soft.derived.step/safe 6940 (153/154); CHA — log.ratio_soft.derived.credit 3115 (40/45). Опубликованное x-пространство: APS pure.ratio.derived3.none 2806, CHA pure.sqrt.bracket.project 4516.

Содержательный итог. Механизм сработал в предсказанную сторону: на широких скобках марш действительно дешевле (4516 → 3115), то есть мультипликативное движение — правильный диагноз регима. Но цена на каноническом наборе выросла в 2.5 раза, а это ровно тот трейд, на котором закончились все четыре прежние попытки (NEXT_PAPER_logarithmic.md §«что уже пробовали»). Теперь он измерен и для логарифмической замены: пятая попытка провалилась тем же способом, и это, а не числа, — главный вывод линии.

Что теперь ЗАПРЕЩЕНО повторять (пятый пункт к прежним четырём): глобальная замена переменной с единицей xtol — APS 6940 против 2806, CHA 3115 против цели 2857. Локальное переключение между пространствами по наблюдаемому признаку закрыто отдельно: это пункт 2-4 прежних запретов (детекторы режима), все провалены.

Открытым остаётся только одно направление, и оно не про похожесть: разрыв на CHA закрывает Chandrupatla-1997 (2423 против наших 4516) при нуле настроечных констант, то есть существующий алгоритм уже делает то, чего мы добиваемся, и объяснение его преимущества — отдельная задача (качество пробы, stage4_why.py), а не новая шкала шага.