Necesito resolver problemas de minimización no lineal (mínimos cuadrados residuales de N incógnitas) en mi programa Java. La forma habitual de resolver estos es el algoritmo Levenberg-Marquardt. Tengo un par de preguntasResolviendo numéricamente ecuaciones no lineales
¿Alguien tiene experiencia en las diferentes implementaciones de LM disponibles? Existen sabores ligeramente diferentes de LM, y he oído que la implementación exacta del algoritmo tiene un efecto importante en la estabilidad numérica. Mis funciones se comportan muy bien, así que esto probablemente no sea un problema, pero por supuesto me gustaría elegir una de las mejores alternativas. Aquí hay algunas alternativas que he encontrado:
FPL Statistics Group's Nonlinear Optimization Java Package. Esto incluye una traducción de Java de las rutinas clásicas de Fortran MINPACK.
JLAPACK, otra traducción de Fortran.
Implementación de Python. Pure Python estaría bien, ya que se puede compilar en Java con jythonc.
¿Hay alguna heurística de uso común para hacer la conjetura inicial que requiere LM?
En mi aplicación necesito establecer algunas limitaciones en la solución, pero afortunadamente son simples: solo requiero que las soluciones (para ser soluciones físicas) no sean negativas. Las soluciones levemente negativas son el resultado de imprecisiones de medición en los datos, y obviamente deben ser cero. Estaba pensando en utilizar LM "normal" pero repetir para que, si algunas de las incógnitas se vuelven negativas, lo ajuste a cero y resuelva el resto de eso. Los matemáticos reales probablemente se reirán de mí, pero ¿creen que esto podría funcionar?
¡Gracias por cualquier opinión!
Actualización: Esto no es ciencia espacial, el número de parámetros a resolver (N) es como máximo 5 y los conjuntos de datos son apenas lo suficientemente grandes como para hacer posible la resolución, así que creo que Java es bastante eficiente para resolver esta. Y creo que este problema ha sido resuelto en numerosas ocasiones por los matemáticos aplicados inteligentes, por lo que estoy buscando una solución preparada en lugar de cocinar la mía. P.ej. Scipy.optimize.minpack.leastsq probablemente estaría bien si fuera Python puro ...
¿Considera que muchos algoritmos no lineales solo funcionan si se inicializan correctamente? Y esa inicialización generalmente proviene de un algoritmo lineal más simple (que a menudo optimiza las medidas subóptimas)? – Vlad