Мне нужно решить проблемы нелинейной минимизации (наименьшие остаточные квадраты из N неизвестных) в моей программе Java. Обычный способ решения этих проблем - алгоритм Levenberg-Marquardt. У меня есть пара вопросовРешение нелинейных уравнений численно
Есть ли у кого-нибудь опыт в различных вариантах реализации LM? Существуют немного разные ароматы LM, и я слышал, что точное выполнение алгоритма оказывает большое влияние на его численную стабильность. Мои функции довольно хорошо, поэтому это, вероятно, не проблема, но, конечно, я бы хотел выбрать одну из лучших альтернатив. Вот несколько альтернатив, которые я нашел:
FPL Statistics Group's Nonlinear Optimization Java Package. Это включает в себя перевод Java классических подпрограмм Fortran MINPACK.
JLAPACK, другой перевод Fortran.
Некоторые реализации на Python. Pure Python будет хорошо, поскольку он может быть скомпилирован на Java с jythonc.
Есть ли обычно используемые эвристики, чтобы сделать первоначальное предположение, что требуется LM?
В моем приложении мне нужно установить некоторые ограничения на решение, но, к счастью, они просты: я просто требую, чтобы решения (для того, чтобы быть физическими решениями) неотрицательны. Немного отрицательные решения являются результатом погрешностей измерений в данных и, очевидно, должны быть равны нулю. Я думал использовать «обычный» LM, но повторяю так, чтобы, если некоторые из неизвестных становятся отрицательными, я устанавливаю его в ноль и разрешаю остальное от него. Реальные математики, вероятно, будут смеяться надо мной, но вы думаете, что это может сработать?
Спасибо за любые мнения!
Обновление: Это не наука о ракетах, количество параметров для решения (N) не более 5, а наборы данных едва достаточно велики, чтобы сделать возможным решение, поэтому я считаю, что Java достаточно эффективна для решения это. И я считаю, что эта проблема была решена много раз умными прикладными математиками, поэтому я просто ищу какое-то готовое решение, а не готовить свои собственные. Например. Scipy.optimize.minpack.leastsq, вероятно, будет хорошо, если бы он был чистым Python.
Считаете ли вы, что многие нелинейные алгоритмы работают только при правильной инициализации? И эта инициализация обычно происходит из более простого линейного алгоритма (который часто оптимизирует субоптимальные метрики)? – Vlad