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