Введение в проблему
У меня есть набор из N частиц в конечной трехмерной физической вселенной. Я хочу приблизительно аппроксимировать набор всех физических координат, для которых суммарная потенциальная энергия вселенной является самой низкой.
Общая потенциальная энергия вселенной является суммой всех потенциальных энергий для каждой частицы.
Потенциальная энергия частицы сама по себе является суммой 5 различных потенциальных энергий, вычисленных из 5 различных взаимодействий между рассматриваемой частицей и всеми остальными частицами.
Мой код предоставляет функцию для аналитической производной всех5 из этих потенциальных функций.
Я пытался использовать несколько методов:
Метод 1 (перебор)
Запуск пользователязаданное число потенциальных циклов сокращения.
Каждый цикл состоит из итеративного применения случайной трансляции (фиксированной величины) к каждой частице и отбрасывания ее в случае увеличения общего потенциала вселенной.
ЕслиПреобразование должно быть отброшено 100 раз подряд, величина Is вдвое.
Этот подход работает, но требует большого объема вычислений и довольно жалок.
Метод 2 (градиентный спуск)
Потенциал запускациклы сокращения до тех пор, пока не будет достигнута заданная пользователем потенциальная энергия цели.
Каждый цикл для каждой частицы аналитически вычисляет градиент ее потенциала в физическом пространстве и смещает его в этом направлении на определенную величину (величина вычисляется отдельно).
Если общий потенциал вселенной увеличился, преобразование отбрасывается.
Это в основном моделирование движения, но без кинетической энергии, что означает, что система будет стремительно приближаться к равновесию.
Этот подход работает очень быстро, но алгоритм градиентного спуска найдет только локальноеминимумы общего потенциала вселенной.
Решения?
Невозможно найти алгоритм градиентного спуска для абсолютных минимумов, он будет только приближаться клокальные минимумы.
Есть ли способ эффективно и элегантно найти грубое приближение абсолютных минимумов, чтобы это приближение могло быть дополнительно уточнено с помощью градиентного спуска?
Спасибо за вашевремя.
Репозиторий: https://github.com/Garuda1/senpai
Функция интереса: https://github.com/Garuda1/senpai/blob/master/sources/universe.c (строка 485)