Доки: v3/v4 в хронологии честности, GPU-эволюция, актуальные ограничения

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-08 03:51:52 +05:00
parent 83a3e72bd5
commit 6fba55f2d6
2 changed files with 33 additions and 9 deletions

24
PLAN.md
View File

@@ -102,7 +102,13 @@ L(x, I)-модель с coenergy-выводом силы — в разделе "
CPU-эталоном — расхождение exit_v **0.084%** (tests/test_batch_sweep.py, CPU-эталоном — расхождение exit_v **0.084%** (tests/test_batch_sweep.py,
test_batch_integrator.py). Стиффные конфиги, переполняющие фикс-шаг, test_batch_integrator.py). Стиффные конфиги, переполняющие фикс-шаг,
честно бракуются (blew_up), а не записываются мусором. честно бракуются (blew_up), а не записываются мусором.
- [ ] (опция) дослить cut-логику в ядро (>3.8x); GPU-батч внутрь эволюции. - [x] cut-логика дослита: весь шаг = 2 fused-ядра (одно не влезает в лимит
параметров CUDA 4096Б). Оценка 1000 геномов: 98.5с → 6.6с (15x), ~150
геномов/с на 1070, сверка с numpy-эталоном 0.001%.
- [x] GPU-батч в эволюции: `run_evolution(use_gpu=True)` оценивает всё
поколение одним батчем (`evaluate_genomes_gpu`), та же формула фитнеса;
полировка (Nelder-Mead) остаётся точной на CPU. Сервис `gausse-evolve`
переведён на venv+GPU: 120 поколений × 1000 особей, ~115/с стабильно.
## Физика: найденные завышения КПД и их исправления (хронология честности) ## Физика: найденные завышения КПД и их исправления (хронология честности)
@@ -134,6 +140,22 @@ L(x, I)-модель с coenergy-выводом силы — в разделе "
слегка отрицательным (трение съело больше слабой катушки) — это честно. слегка отрицательным (трение съело больше слабой катушки) — это честно.
Для сравнения на одной и той же эволюции: v1 давал «38%» там, где v2 даёт Для сравнения на одной и той же эволюции: v1 давал «38%» там, где v2 даёт
~8% — столько стоили неучтённые скин и трение. ~8% — столько стоили неучтённые скин и трение.
6. **gausse-physics-v3**: эволюция нашла «КПД 82%» → вскрытие генома: тонкий
снаряд (⌀4мм) в толстой катушке (⌀29мм) — модель умножала ВСЮ L на
(μ_eff1), как будто железо заполняет всё сечение. Фикс: коэффициент
заполнения A_снаряда/A_катушки (iron_fill_factor). Плюс лечение зависаний
решателя: tanh-сглаживание сухого трения (разрывный sign(v) дробил шаг
бесконечно), событие тока удержания ключа (передемпфированный хвост),
полная формула отражения вихрей (ωM)²R₂/(R₂²+(ωL₂)²), гард вырожденных
катушек (L/R<100нс). Бенч: 200 геномов 608с → 22с.
7. **gausse-physics-v4**: эволюция нашла «30%» через МЕДЛЕННУЮ катушку
(600+ витков, ~1мс, 36А — там слабы и Доуэлл, и вихревые, и трение).
Неучтённая физика: за импульс поле проникает в сталь на глубину скин-слоя
(~доли мм) — внутренность снаряда не намагничивается. Фикс:
iron_penetration_fraction = 1(1δ/a)² множит fill factor. После v4
лучший КПД эволюции — единицы процентов, что соответствует реальным
reluctance-пушкам. Урок зафиксирован: подозрительно красивый КПД =
вскрывать лучший геном и искать обойдённый канал потерь.
## Требования пользователя, закрытые после Этапа 8 ## Требования пользователя, закрытые после Этапа 8

View File

@@ -16,6 +16,8 @@
- **Физика** (`src/gausse/physics/`): RLC-разряд конденсаторной банки через - **Физика** (`src/gausse/physics/`): RLC-разряд конденсаторной банки через
катушку с ферромагнитным снарядом; насыщение железа через единое катушку с ферромагнитным снарядом; насыщение железа через единое
потокосцепление λ(x,I) (энергия сохраняется); вихревые потери в снаряде; потокосцепление λ(x,I) (энергия сохраняется); вихревые потери в снаряде;
коэффициент заполнения (тонкий снаряд не усиливает весь поток) и
диффузия поля (за импульс намагничивается только скин-кольцо);
скин-эффект + эффект близости обмотки (метод Доуэлла); трение о трубку и скин-эффект + эффект близости обмотки (метод Доуэлла); трение о трубку и
сопротивление воздуха; одиночный импульс (тиристор не перезапускается); сопротивление воздуха; одиночный импульс (тиристор не перезапускается);
паспортные импульсные токи ключей (ITSM/IDM/ICM из даташитов). паспортные импульсные токи ключей (ITSM/IDM/ICM из даташитов).
@@ -27,7 +29,8 @@
полировкой; всё в одну SQLite-базу (WAL, писатель поверх очереди). полировкой; всё в одну SQLite-базу (WAL, писатель поверх очереди).
- **GPU** (`src/gausse/gpu/`): батч-интегратор RK4 (numpy/cupy), весь шаг - **GPU** (`src/gausse/gpu/`): батч-интегратор RK4 (numpy/cupy), весь шаг
слит в одно cupy.fuse-ядро — на GTX 1070 ~3.8x к CPU; многоступенчатый слит в одно cupy.fuse-ядро — на GTX 1070 ~3.8x к CPU; многоступенчатый
GPU-sweep раунд-за-раундом; сверен с CPU-эталоном (<0.1%). GPU-sweep раунд-за-раундом И GPU-эволюция (use_gpu=True: всё поколение —
один батч, ~150 геномов/с на 1070); сверено с CPU-эталоном (<0.1%).
- **Отчёты** (`src/gausse/report/`, `src/gausse/web/`): веб-дашборд с - **Отчёты** (`src/gausse/report/`, `src/gausse/web/`): веб-дашборд с
drill-down до каждой детали и энергобаланса ступени, графики ток/поле/ drill-down до каждой детали и энергобаланса ступени, графики ток/поле/
скорость, GIF-анимация выстрела (равномерное физическое время, результат скорость, GIF-анимация выстрела (равномерное физическое время, результат
@@ -65,9 +68,9 @@ pytest
## Автономная работа на сервере ## Автономная работа на сервере
Эволюция оформлена как systemd-сервис `gausse-evolve` (вечный цикл: 80 Эволюция оформлена как systemd-сервис `gausse-evolve` (вечный цикл: 120
поколений × 300 особей, по окончании новый цикл со свежей случайной поколений × 1000 особей на GPU, по окончании новый цикл со свежей
популяцией; `Restart=always`, автозапуск при загрузке). Дашборд Docker- случайной популяцией; `Restart=always`, автозапуск при загрузке). Дашборд Docker-
сервис `web` на :8000, читает ту же базу. Счётчик «запланировано» на сервис `web` на :8000, читает ту же базу. Счётчик «запланировано» на
дашборде план **текущего цикла**, а не всего поиска: поиск бесконечен. дашборде план **текущего цикла**, а не всего поиска: поиск бесконечен.
@@ -75,13 +78,12 @@ pytest
- Индуктивность инженерная модель (Уилер + размагничивание сфероида + - Индуктивность инженерная модель (Уилер + размагничивание сфероида +
tanh-перекрытие), не МКЭ; точная картина поля требует FEA. tanh-перекрытие), не МКЭ; точная картина поля требует FEA.
- Вихревые потери снаряда сосредоточенный виток на характерной частоте - Вихревые потери снаряда сосредоточенный виток; диффузия поля в снаряд
импульса; диффузия поля (скин-эффект в самом снаряде) не решается. одночастотная оценка скин-кольца, а не решение уравнения диффузии.
- Доуэлл берёт одну характерную частоту ω=1/√(LC), без спектра импульса. - Доуэлл берёт одну характерную частоту ω=1/√(LC), без спектра импульса.
- Воздух лобовое сопротивление; поршневой эффект столба воздуха в трубе - Воздух лобовое сопротивление; поршневой эффект столба воздуха в трубе
не учтён. Трение константа 0.35 (сталь-пластик), не измерено. не учтён. Трение константа 0.35 (сталь-пластик), не измерено.
- Гистерезис снаряда посчитан и сознательно не включён в динамику (<0.1%). - Гистерезис снаряда посчитан и сознательно не включён в динамику (<0.1%).
- Нагрев провода за импульс и от серии выстрелов не моделируется. - Нагрев провода за импульс и от серии выстрелов не моделируется.
Версия физики пишется в каждую запись (`model_version`, сейчас Версия физики пишется в каждую запись (`model_version`, сейчас `gausse-physics-v4`) прогоны разных моделей не смешиваются.
`gausse-physics-v2`) прогоны разных моделей не смешиваются.