- components/schema.py + database.py: typed loader for real retail parts (wire, capacitors, switches, sensors, projectile materials) - physics/inductance.py: multilayer solenoid inductance (Wheeler) with ferromagnetic-slug coupling via smooth overlap model and analytic dL/dx - physics/force.py: F = 0.5*I^2*dL/dx with a saturation clamp - physics/circuit.py: coupled [Q,I,x,v] discharge ODE - Validated against textbook RLC analytical solutions (under/over/critically damped) and energy conservation, not just spot-checked by eye - PLAN.md updated with animation (per-run field visualization) and GPU-accelerated batch sweep as explicit later stages Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6.7 KiB
План: Gauss-ускоритель — симулятор и оптимизатор
Многоступенчатый электромагнитный ускоритель ферромагнитного цилиндра (coilgun). Каждая ступень: разгонная катушка (Cu/Al провод на пластиковой трубке) + батарея конденсаторов через тиристор/MOSFET, и датчик прохода снаряда перед катушкой (компенсация задержки включения ключа). Датчик — два конкурирующих варианта: индукционная катушка (сигнал ~ скорости снаряда, слаб на медленных ступенях) и оптопара/датчик Холла (не зависит от скорости) — оптимизатор сравнивает оба.
Цель поиска — КПД (кинетическая энергия снаряда на выходе / энергия во всех конденсаторах). Скорость и стоимость — вторичные метрики. Число ступеней N, геометрия/материал снаряда, все компоненты — часть пространства поиска, а не фиксированные входы. Компоненты — реальные, розничные (Проконтакт/procontact74.ru, ChipDip, Cable.ru и др.).
Требование: миллионы прогонов (Monte Carlo/LHS sweep + эволюционный поиск), все результаты — успешные и неудачные, с честной причиной отказа — пишутся в SQLite. Никаких приукрашенных цифр — если модель показывает низкий КПД или нереализуемость, это тоже результат.
Полный план архитектуры: см. историю обсуждения / physics, sim, optim,
storage, report модули ниже.
Чек-лист этапов
- Этап 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).report/animate.py— анимация одного прогона: положение снаряда в трубе по времени + визуализация поля/тока каждой катушки (свечение/интенсивность цвета ~ ток), сохранение в GIF/MP4 (matplotlibFuncAnimation). Нужна по запросу пользователя — "графика где будет показана симуляция пролёта цилиндра по трубе и электромагнитные поля в каждый момент времени".
- Этап 8 — Сквозная проверка: резюмируемый прогон на реальной базе компонентов, проверка честной записи в SQLite, финальный отчёт (КПД, скорость, стоимость, сравнение датчиков) с разделом ограничений.
- Этап 9 — GPU-ускорение массового sweep (сервер с GTX 1070): после того как CPU/
scipy.solve_ivp-модель провалидирована тестами (Этап 2-4) — батч-версия интегратора с ФИКСИРОВАННЫМ шагом (RK4/полу-неявная схема), считающая сразу N траекторий параллельно как один тензор (cupy, если доступна CUDA, иначе векторизованныйnumpy/numba), для прогона по-настоящему миллионов конфигураций на сервере. Важно: сначала корректность на CPU, потом скорость на GPU — численные результаты GPU-пути должны сверяться с CPU-эталоном на контрольной выборке, чтобы ускорение не подменило точность честными числами "для галочки".