- Скрипт нужен для того, чтобы перед постройкой пушки гаусса оценить параметры катушки, пули и конденсатора, а также подобрать оптимальные параметры.
- Скрипт умеет оптимизировать начальные параметры и находить такие при которых скорость выстрела выше
- Здесь представлен переработанный и "причёсанный" скрипт, взятый с сайта http://foar.ru
- Что такое пушка гаусса расписано в вики
Всё что нужно для работы скрипта можно скачать по следующим ссылкам:
- Программа FEMM - программа скачивается в разделе Download. Требуемая версия - 4.2.
- Скрипт для FEMM ("Сохранить как..." на ссылке)
- Файл настроек ("Сохранить как..." на ссылке)
- Устанавливаем программу FEMM
- Записываем скрипт (coilgun.lua) и файл настроек (primer.txt) в один каталог
Для начала надо отредактировать файл настроек под ваши параметры гаусса. Для этого открываем его в любом текстовом редакторе (например, блокноте). Файл выглядит следующим образом:
-- Конденсатор
conf.c = 900 -- мкФ, ёмкость конденсатора
conf.u = 450 -- Вольт, напряжение конденсатора
conf.r_cc = 0 -- Ом, ESR конденсатора (0 - использовать расчётное значение, иначе - значение в оммах)
-- Катушка
conf.d_pr = 0.65 -- мм, диаметр провода без изоляции
conf.l_kat = 20 -- мм, длина катушки
...
- После коррекции значений сохраняем файл обратно на диск.
- Затем запускаем FEMM и выбираем в нём пункт меню "Open Lua Script":
- И указываем имя файла настроек без расширения и нажимаем "Enter"
После чего начнётся процесс расчёта выстрела. В зависимости от мощности компьютера и значений, введённых в файле настроек, он может длится довольно долгое время. Так что наберитесь терпения. Если вы во время расчёта вдруг поняли, что ввели неправильные значения, то нажмите "Esc" на клавиатуре и процесс расчёта прервётся. Можно будет подредактирвоать файл настроек и начать всё заново.
Как только процесс расчёта закончится, программа выдаст сообщение о том, в какой файл были записаны результаты.
Если результат симуляции не устраивает, то можно поменять один или несколько параметров в файле настроек и запустить симуляцию заново или же воспользоваться возможностью оптимизации.
Оптимизация - это в нашем случае поиск лучшей конфигурации гаусса по сравнению с тем что у нас есть на данный момент. Например, скрипт насчитал, что скорость пули вашего гаусса получается 10 м/с, но вы хотите более высоких значений. Так вот поиск при каких параметрах гаусса (ёмкости конденсатора, начального напряжения, катушки, пули и.т.п) будет выходить более высокая скорость - это и есть оптимизация.
Оптимизацию можно выполнять вручную (например, менять какие-либо настройки в начальных значениях, а затем смотреть, что из этого получается). Но возможность поиска более быстрого решения уже заложена в самом скрипте и далее будет расписано как ей воспользоваться.
Далее приведёт раздел конфигурационного файла, который касается оптимизации:
-- Параметры оптимизации
conf.opt = 0 -- Нужно ли оптимизировать полученные результаты (0 - нет, 1 - да)
conf.opt_t = "vel" -- Что именно надо оптимизировать ("vel" - скорость, "eff" - эффективность)
opt.l_kat = nil -- Оптимизация по длине катушки (nil - без оптимизации, <значение> - шаг для подбора оптимального значения)
opt.d_kat = nil -- Оптимизация по диаметру катушки (nil - без оптимизации, <значение> - шаг для подбора оптимального значения)
opt.l_sdv = nil -- Оптимизация по начальной позиции пули в катушке (nil - без оптимизации, <значение> - шаг для подбора оптимального значения)
В первую очередь для включения оптимизации нужно задать параметр conf.opt = 1
, а затем выбрать по каким параметрам мы собираемся оптимизировать. В conf.opt_t
задаётся что именно мы будем оптимизировать - скорость или КПД. Если в conf.opt_t указать "eff"
, то скрипт будет искать результаты с максимальным КПД.
Если мы хотим оптимизировать по диаметру катушки, то меняем параметр opt.d_kat
с nil
на 1
. Единица, которую мы задали - это шаг в миллиметрах, с которым скрипт будет менять диаметр катушки, постепенно приближаясь к более высокой скорости, чем в первоначальном варианте.
Можно оптимизировать по нескольким параметрам. Например одновременно по длине катушки и по диаметру катушки. Для этого выставляем opt.d_kat = 1
и opt.l_kat = 1
. В этом случае скрипт в процессе оптимизации будет менять диаметр и длину катушки на этот шаг и приближаться к конфигурации, которая будет выдавать более высокую скорость.
После opt.
можно указывать вообще любой параметр, который есть в настройках. Например, если задать opt.l_puli = 1
, то будет оптимизироваться по длине пули, подбирая значения с шагом в 1 мм.
Обратите внимание, что в процессе оптимизации скрипт запускает симуляцию много раз. Так что надо набраться терпения, чтобы дождаться, когда оптимизация наконец-то закончит работу.
- Оптимизация в скрипте выполняется при помощи алгоритма, похожего на градиентный спуск. Поэтому скрипт в конце концов приходит не к оптимальной скорости, а локальному максимуму, который располагается рядом с начальными параметрами. Но если для введённых начальных значений максимум скорости только один, то будет найдена оптимальная конфигурация.
Работу скрипта можно обсудить в следующих форумах:
- Улучшить алгоритм оптимизации
- Научить скрипт считать, а также оптимизировать параметры для многоступенчатого гаусса