Scaffold gausse coilgun simulator project

src-layout Python package with CLI stub (sweep/evolve/simulate/report
subcommands), pyproject.toml pinned to numpy/scipy/matplotlib, and PLAN.md
tracking the implementation roadmap.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-06 19:38:06 +05:00
commit 04233aefd7
12 changed files with 114 additions and 0 deletions

13
.gitignore vendored Normal file
View File

@@ -0,0 +1,13 @@
__pycache__/
*.py[cod]
*.egg-info/
.pytest_cache/
.venv/
venv/
build/
dist/
*.sqlite3
*.sqlite3-wal
*.sqlite3-shm
out/
.DS_Store

34
PLAN.md Normal file
View File

@@ -0,0 +1,34 @@
# План: Gauss-ускоритель — симулятор и оптимизатор
Многоступенчатый электромагнитный ускоритель ферромагнитного цилиндра (coilgun).
Каждая ступень: разгонная катушка (Cu/Al провод на пластиковой трубке) + батарея
конденсаторов через тиристор/MOSFET, и датчик прохода снаряда перед катушкой
(компенсация задержки включения ключа). Датчик — два конкурирующих варианта:
индукционная катушка (сигнал ~ скорости снаряда, слаб на медленных ступенях) и
оптопара/датчик Холла (не зависит от скорости) — оптимизатор сравнивает оба.
Цель поиска — КПД (кинетическая энергия снаряда на выходе / энергия во всех
конденсаторах). Скорость и стоимость — вторичные метрики. Число ступеней N,
геометрия/материал снаряда, все компоненты — часть пространства поиска, а не
фиксированные входы. Компоненты — реальные, розничные (Проконтакт/procontact74.ru,
ChipDip, Cable.ru и др.).
Требование: миллионы прогонов (Monte Carlo/LHS sweep + эволюционный поиск),
**все** результаты — успешные и неудачные, с честной причиной отказа — пишутся
в SQLite. Никаких приукрашенных цифр — если модель показывает низкий КПД или
нереализуемость, это тоже результат.
Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`,
`storage`, `report` модули ниже.
## Чек-лист этапов
- [x] **Этап 0 — Скелет проекта**: `pyproject.toml`, `README.md`, `.gitignore`, пакеты `src/gausse/*`, этот файл, первый коммит.
- [ ] **Этап 1 — База реальных компонентов**: провод Cu/Al (сечения, сопротивление, цена/м), конденсаторы (ёмкость/напряжение/ESR/цена, фотовспышечные электролитические как бюджетный вариант), тиристоры (КУ202 и аналоги) и MOSFET/IGBT, датчики (индукционная катушка vs оптопара/Холл), материалы снаряда (сталь/железо: μr, B_sat, плотность, цена/кг) → `components/data/*.json`.
- [ ] **Этап 2 — Физическое ядро**: `physics/constants.py`, `inductance.py` (Уилер + ферромагнитный сердечник + размагничивание), `force.py` (с насыщением), `circuit.py` (ОДУ RLC). Юнит-тесты: аналитическое RLC-решение, согласованность dL/dx.
- [ ] **Этап 3 — Датчики и одна ступень**: `physics/sensors.py` (оба типа как события solve_ivp), `sim/stage.py` (полёт → триггер → разряд → энергобаланс). Тест на сохранение энергии.
- [ ] **Этап 4 — Многоступенчатая цепочка**: `sim/coilgun.py` — сквозная координата, отбраковка нереализуемых конфигураций.
- [ ] **Этап 5 — Хранилище результатов**: `storage/schema.py` + `database.py` — SQLite (WAL), таблица `runs` со всеми прогонами (успех/провал + честная причина), однопроцессный писатель поверх многопроцессной очереди.
- [ ] **Этап 6 — Поиск и оптимизация**: `optim/search_space.py` (геном переменной длины), `objective.py` (КПД), дешёвый квазистатический предфильтр, `optim/sweep.py` (Monte Carlo/LHS, миллионы прогонов), `optim/evolutionary.py` (ГА + coordinate-descent полировка) — всё пишется в общую таблицу `runs`.
- [ ] **Этап 7 — Отчётность**: `report/plots.py`, `summary.py`, `bom.py`, раздел "ограничения модели", `cli.py` (`gausse sweep/evolve/simulate/report`).
- [ ] **Этап 8 — Сквозная проверка**: резюмируемый прогон на реальной базе компонентов, проверка честной записи в SQLite, финальный отчёт (КПД, скорость, стоимость, сравнение датчиков) с разделом ограничений.

20
README.md Normal file
View File

@@ -0,0 +1,20 @@
# gausse
Симулятор и оптимизатор многоступенчатого электромагнитного ускорителя
(coilgun) на реальных, доступных в рознице компонентах.
Полный план и чек-лист этапов — в [PLAN.md](PLAN.md).
## Установка
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
## Тесты
```bash
pytest
```

29
pyproject.toml Normal file
View File

@@ -0,0 +1,29 @@
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[project]
name = "gausse"
version = "0.1.0"
description = "Симулятор и оптимизатор многоступенчатого электромагнитного ускорителя (coilgun)"
requires-python = ">=3.11"
dependencies = [
"numpy>=1.26",
"scipy>=1.11",
"matplotlib>=3.8",
]
[project.optional-dependencies]
dev = ["pytest>=8.0"]
[project.scripts]
gausse = "gausse.cli:main"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
gausse = ["components/data/*.json"]
[tool.pytest.ini_options]
testpaths = ["tests"]

0
src/gausse/__init__.py Normal file
View File

18
src/gausse/cli.py Normal file
View File

@@ -0,0 +1,18 @@
import argparse
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(prog="gausse")
subparsers = parser.add_subparsers(dest="command", required=True)
subparsers.add_parser("sweep", help="массовый Monte Carlo/LHS перебор конфигураций")
subparsers.add_parser("evolve", help="эволюционный поиск поверх базы прогонов")
subparsers.add_parser("simulate", help="прогнать одну конфигурацию")
subparsers.add_parser("report", help="построить отчёт по сохранённым результатам")
args = parser.parse_args(argv)
parser.error(f"команда '{args.command}' ещё не реализована")
return 1
if __name__ == "__main__":
raise SystemExit(main())

View File

View File

View File

View File

View File

View File