Como se ha citado una de mis respuestas, intentaré aclarar por qué sugerí usar IPOPT en lugar de MINPACK.
Mis objeciones al uso de MINPACK no tienen nada que ver con los algoritmos que MINPACK usa y todo que ver con su implementación. Mi principal objeción es que el software se remonta a 1980 y se actualizó por última vez en 1999. Jorge Moré está retirado; Dudo que él o cualquiera de los otros autores del software lo controlen más, y no hay un equipo de personas que lo respalde activamente. La única documentación que puedo encontrar en el software es el informe técnico original de 1980 de Argonne escrito por Jorge Moré y los otros autores del MINPACK. (Los capítulos 1-3 se pueden encontrar aquí , y el Capítulo 4 se puede encontrar aquí.) Después de buscar el código fuente del MINPACK y examinar la documentación (los archivos PDF son imágenes escaneadas y no se pueden buscar), no veo ninguna opción para acomodar las restricciones. Dado que el póster original del problema de mínimos cuadrados no lineales quería resolver un problema de mínimos cuadrados no lineales restringidos, MINPACK ni siquiera resolverá ese problema.
Si observa la lista de correo IPOPT, algunos usuarios indican que el rendimiento del paquete en problemas de mínimos cuadrados no lineales (NLS) es mixto en relación con los algoritmos de Levenberg-Marquardt y los algoritmos de NLS más especializados (consulte aquí , aquí y aquí ). El rendimiento de IPOPT en relación con los algoritmos NLS depende, por supuesto, del problema. Teniendo en cuenta los comentarios de los usuarios, IPOPT parece una recomendación razonable en relación con los algoritmos NLS.
Sin embargo, hace un buen punto de que los algoritmos NLS deben investigarse. Estoy de acuerdo. Simplemente creo que debería usarse un paquete más moderno que MINPACK porque creo que funcionará mejor, será más útil y será compatible. Ceres parece un paquete candidato interesante, pero no puede manejar problemas restringidos en este momento. TAOfuncionaría en problemas de mínimos cuadrados con restricciones de caja, aunque no implementa el clásico Levenberg-Marquardt, sino que implementa un algoritmo sin derivadas. Un algoritmo sin derivadas probablemente funcionaría bien para problemas a gran escala, pero no lo usaría para problemas a pequeña escala. No pude encontrar ningún otro paquete que inspirara mucha confianza en su ingeniería de software. Por ejemplo, GALAHAD no parece utilizar el control de versiones o ninguna prueba automatizada, a primera vista. MINPACK tampoco parece hacer esas cosas. Si tiene experiencia con MINPACK o recomendaciones con respecto a un mejor software, soy todo oídos.
Con todo eso en mente, volviendo a la cita de mi comentario:
Cualquier sistema de ecuaciones es equivalente a un problema de optimización, por lo que los métodos de optimización basados en Newton se parecen mucho a los métodos basados en Newton para resolver sistemas de ecuaciones no lineales.
Un mejor comentario es probablemente algo en el sentido de:
nng(x)=0
Esta afirmación es válida incluso para resolver sistemas de ecuaciones bajo restricciones. No conozco ningún algoritmo que se considere "solucionador de ecuaciones" para el caso donde hay restricciones en las variables. El enfoque común que conozco, tal vez con ictericia por varios semestres de cursos de optimización e investigación en un laboratorio de optimización, es incorporar las restricciones sobre el sistema de ecuaciones en una formulación de optimización. Si intentara usar las restricciones en un esquema similar a Newton-Raphson para la resolución de ecuaciones, probablemente terminaría con un gradiente proyectado o un método proyectado de región de confianza, muy similar a los métodos utilizados en la optimización restringida.
Si un sistema no lineal dado es la condición de optimización de primer orden para un problema de optimización, entonces a menudo podemos producir un algoritmo más robusto utilizando esa información. Por ejemplo, considere la ecuación
Esto claramente tiene un mínimo único y esperamos que nuestro método de optimización lo encuentre independientemente del punto de partida. Pero si solo observamos las condiciones de optimización de primer orden, estamos buscando una solución de [Wolfram Alpha]x ∇f(x)=0
que tiene una solución única, pero muchos métodos de búsqueda de raíz pueden atascarse en el mínimo local.
Si reformulamos un nuevo problema de optimización para minimizar la norma del gradiente al cuadrado, estamos buscando un mínimo global de [Wolfram Alpha] que tiene múltiples mínimos locales.x ∥∇f(x)∥2
Para resumir, comenzamos con un problema de optimización que tenía una solución única que podíamos garantizar que encontraría un método. Reformulamos como un problema de búsqueda de raíz no lineal que tenía una solución única que podíamos identificar localmente, pero un método de búsqueda de raíz (como Newton) podría estancarse antes de llegar a él. Luego reformulamos el problema de búsqueda de raíz como un problema de optimización que tenía múltiples soluciones locales (no se puede utilizar ninguna medida local para identificar que no estamos en el mínimo global).
En general, cada vez que convertimos un problema de optimización a rootfinding o viceversa, hacemos que los métodos disponibles y las garantías de convergencia asociadas sean más débiles. La mecánica real de los métodos a menudo es muy similar, por lo que es posible reutilizar una gran cantidad de código entre los solucionadores no lineales y la optimización.
fuente