Обновить README и PLAN до актуального состояния (физика v2, GPU, автономная эволюция)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
76
README.md
76
README.md
@@ -1,21 +1,58 @@
|
||||
# gausse
|
||||
|
||||
Симулятор и оптимизатор многоступенчатого электромагнитного ускорителя
|
||||
(coilgun) на реальных, доступных в рознице компонентах.
|
||||
(coilgun / пушка Гаусса) на реальных, доступных в рознице компонентах
|
||||
(ChipDip, procontact74.ru, cable.ru — у каждой детали в базе ссылка на
|
||||
магазин).
|
||||
|
||||
Полный план и чек-лист этапов — в [PLAN.md](PLAN.md).
|
||||
Главный принцип — **честность**: все прогоны (включая нереализуемые, с
|
||||
причиной отказа) пишутся в SQLite; физическая модель не приукрашивается ради
|
||||
красивых цифр, а каждое известное упрощение задокументировано. История
|
||||
проекта — это в том числе история найденных и исправленных завышений КПД
|
||||
(80%+ → реалистичные единицы процентов), см. [PLAN.md](PLAN.md).
|
||||
|
||||
## Установка (Docker — основной способ)
|
||||
## Что умеет
|
||||
|
||||
- **Физика** (`src/gausse/physics/`): RLC-разряд конденсаторной банки через
|
||||
катушку с ферромагнитным снарядом; насыщение железа через единое
|
||||
потокосцепление λ(x,I) (энергия сохраняется); вихревые потери в снаряде;
|
||||
скин-эффект + эффект близости обмотки (метод Доуэлла); трение о трубку и
|
||||
сопротивление воздуха; одиночный импульс (тиристор не перезапускается);
|
||||
паспортные импульсные токи ключей (ITSM/IDM/ICM из даташитов).
|
||||
- **Ступени** (`src/gausse/sim/`): у каждой катушки свой датчик
|
||||
(оптика/Холл/индукционный) на своём расстоянии; подлёт → триггер →
|
||||
задержки датчика и ключа → разряд → энергобаланс; цепочка до 10 ступеней.
|
||||
- **Поиск** (`src/gausse/optim/`): геном переменной длины (число ступеней
|
||||
эволюционирует), Monte-Carlo sweep и (μ+λ)-эволюция с Nelder-Mead
|
||||
полировкой; всё в одну SQLite-базу (WAL, писатель поверх очереди).
|
||||
- **GPU** (`src/gausse/gpu/`): батч-интегратор RK4 (numpy/cupy), весь шаг
|
||||
слит в одно cupy.fuse-ядро — на GTX 1070 ~3.8x к CPU; многоступенчатый
|
||||
GPU-sweep раунд-за-раундом; сверен с CPU-эталоном (<0.1%).
|
||||
- **Отчёты** (`src/gausse/report/`, `src/gausse/web/`): веб-дашборд с
|
||||
drill-down до каждой детали и энергобаланса ступени, графики ток/поле/
|
||||
скорость, GIF-анимация выстрела (равномерное физическое время, результат
|
||||
эксперимента в кадре), BOM с ценами и ссылками «купить».
|
||||
|
||||
## Запуск (Docker — основной способ)
|
||||
|
||||
```bash
|
||||
docker compose build
|
||||
docker compose run --rm --entrypoint pytest gausse -q # тесты
|
||||
docker compose run --rm gausse sweep --n 1000 # CLI (после реализации Этапа 6)
|
||||
docker compose run --rm --entrypoint pytest gausse -q # тесты
|
||||
docker compose up -d web # дашборд :8000
|
||||
docker compose run --rm gausse sweep --n 100000 --db /app/results/gausse.sqlite3
|
||||
docker compose run --rm gausse evolve --generations 80 --population 300 \
|
||||
--db /app/results/gausse.sqlite3
|
||||
docker compose run --rm gausse report --top 3 --animate --db /app/results/gausse.sqlite3
|
||||
```
|
||||
|
||||
Результаты (SQLite, отчёты) должны сохраняться в `./results`, примонтированный
|
||||
в контейнер как `/app/results` (см. `docker-compose.yml`), чтобы переживать
|
||||
пересборку образа.
|
||||
GPU-режим (нужны NVIDIA-драйвер и `pip install cupy-cuda12x[ctk]`, вне Docker):
|
||||
|
||||
```bash
|
||||
gausse sweep --gpu --n 1000000 --db results/gausse.sqlite3
|
||||
```
|
||||
|
||||
Результаты (SQLite + лог хода эксперимента `<db>.log`) живут в `./results`,
|
||||
примонтированном в контейнер, и переживают пересборку образа.
|
||||
|
||||
## Установка без Docker (локальная разработка)
|
||||
|
||||
@@ -25,3 +62,26 @@ source .venv/bin/activate
|
||||
pip install -e ".[dev]"
|
||||
pytest
|
||||
```
|
||||
|
||||
## Автономная работа на сервере
|
||||
|
||||
Эволюция оформлена как systemd-сервис `gausse-evolve` (вечный цикл: 80
|
||||
поколений × 300 особей, по окончании — новый цикл со свежей случайной
|
||||
популяцией; `Restart=always`, автозапуск при загрузке). Дашборд — Docker-
|
||||
сервис `web` на :8000, читает ту же базу. Счётчик «запланировано» на
|
||||
дашборде — план **текущего цикла**, а не всего поиска: поиск бесконечен.
|
||||
|
||||
## Ограничения модели (честно)
|
||||
|
||||
- Индуктивность — инженерная модель (Уилер + размагничивание сфероида +
|
||||
tanh-перекрытие), не МКЭ; точная картина поля требует FEA.
|
||||
- Вихревые потери снаряда — сосредоточенный виток на характерной частоте
|
||||
импульса; диффузия поля (скин-эффект в самом снаряде) не решается.
|
||||
- Доуэлл берёт одну характерную частоту ω=1/√(LC), без спектра импульса.
|
||||
- Воздух — лобовое сопротивление; поршневой эффект столба воздуха в трубе
|
||||
не учтён. Трение — константа 0.35 (сталь-пластик), не измерено.
|
||||
- Гистерезис снаряда посчитан и сознательно не включён в динамику (<0.1%).
|
||||
- Нагрев провода за импульс и от серии выстрелов не моделируется.
|
||||
|
||||
Версия физики пишется в каждую запись (`model_version`, сейчас
|
||||
`gausse-physics-v2`) — прогоны разных моделей не смешиваются.
|
||||
|
||||
Reference in New Issue
Block a user