¿Cuáles son las formas recomendadas de hacer mínimos cuadrados no lineales, min , con restricciones de recuadro l o j < = p j < = h i j ? Me parece (los tontos se apresuran) que uno podría hacer que las restricciones de la caja sean cuadráticas y minimizar ∑ i e r r i ( p ) 2 + C ∗ ∑ j t u b ( p j , l o donde t u b ( x , l o , h i ) es la "función tub" con forma de \ ___ /, m a x ( l o - x , 0 , x - h i ) . ¿Funciona esto en teoría, en la práctica? (Parece que hay muchos documentos teóricos sobre NLS +, pero mi interés es práctico: los casos de prueba reales o realistas me ayudarían a elegir entre los métodos).
(Expertos, agregue etiquetas: "mínimos cuadrados")
optimization
constraints
denis
fuente
fuente
Respuestas:
Agregar términos de penalización al cuadrado para deshacerse de las restricciones es un enfoque simple que proporciona una precisión de orden 1 / factor de penalización solamente. Por lo tanto, no se recomienda para una alta precisión a menos que deje que la penalización se vaya al infinito durante el cálculo. Pero un alto factor de penalización hace que el Hesse esté muy mal condicionado, lo que limita la precisión total alcanzable sin tener en cuenta las restricciones explícitamente.
Tenga en cuenta que las restricciones vinculadas son mucho más fáciles de manejar que las restricciones generales, por lo que prácticamente nunca se convierten en sanciones.
El solucionador L-BFGS-B (usado con un historial de aproximadamente 5 dimensiones) generalmente resuelve problemas limitados limitados de manera muy confiable y rápida en ambas dimensiones altas y bajas. Las excepciones son la falta de convergencia en problemas que pueden volverse muy planos lejos de las soluciones, donde es fácil quedarse atrapado con un método de descenso.
Hicimos muchos experimentos en funciones muy diversas en muchas dimensiones diferentes, con muchos solucionadores diferentes disponibles, ya que necesitábamos un solucionador con restricciones limitadas muy robusto como parte de nuestro software de optimización global. L-BFGS-B se destaca claramente como método de propósito general, aunque, por supuesto, en los problemas de otros agentes de resolución funcionan significativamente mejor. Por lo tanto, recomendaría L-BFGS-B como primera opción, y probaría técnicas alternativas en caso de que L-BFGS-B maneje mal su clase particular de problemas.
fuente
Simplemente usaría el solucionador de PNL de propósito general IPOPT . Es el solucionador más robusto entre los que he probado.
A menos que tenga algunos requisitos muy especiales, no hay razón para insistir en un solucionador de problemas específico que solo funcione para NLS con restricciones de recuadro.
Un cambio en los requisitos (por ejemplo, agregar restricciones no lineales) causaría un gran dolor de cabeza con un solucionador específico del problema. No tendrá tales problemas si utiliza el IPOPT de uso general.
ACTUALIZACIÓN: puede probar L-BFGS con IPOPT , consulte bajo Cuasi-Newton en la documentación.
El procedimiento de solución puede ser más rápido a expensas de estropear la notable robustez de IPOPT. En mi opinión , use los derivados exactos si están disponibles. Comenzaría a jugar con aproximaciones (como L-BFGS) solo si tuviera problemas de rendimiento probados.
fuente
El paquete R minpack.lm CRAN proporciona una implementación de Levenberg-Marquardt con restricciones de cuadro.
En general, Levenberg-Marquardt es mucho más adecuado que L-BFGS-B para problemas de mínimos cuadrados. Convergerá (mucho) mejor en problemas desafiantes. También será mucho más rápido que el IPOPT de propósito general, ya que está diseñado para problemas de mínimos cuadrados no lineales.
El paquete R elige un enfoque de proyección muy sencillo para hacer cumplir las restricciones (ver el código fuente ). Dependiendo de la implementación de LM que esté utilizando, podría ser fácil de incluir.
Ahora, la sugerencia en los comentarios sobre el uso de una transformación (por ejemplo, una transformación sinusoidal como en scipy) también es una alternativa buena y simple para transformar su algoritmo LM sin restricciones en uno restringido. También deberá incluir la transformación en el jacobiano si el jacobiano es analítico.
fuente
(Años después) dos solucionadores que manejan las restricciones de la caja:
Scipy least_squares tiene 3 métodos, con un extenso documento:
fuente