Quais são as formas recomendadas de fazer mínimos quadrados não lineares, min , com restrições de caixa ? Parece-me (tolos se apressam) que alguém poderia tornar as restrições da caixa quadráticas e minimizar onde é a "função banheira" com o formato \ _ _ _ / / . Isso funciona na teoria, funciona na prática? (Parece haver muitos trabalhos teóricos sobre NLS +, mas meu interesse é prático - casos de teste reais ou realistas me ajudariam a escolher entre os métodos.)
m a x ( l o - x , 0 , x - h i )
(Especialistas, adicione tags: "mínimos quadrados"?)
optimization
constraints
denis
fonte
fonte
Respostas:
Adicionar termos de penalidade ao quadrado para se livrar de restrições é uma abordagem simples, fornecendo uma precisão da ordem apenas 1 / fator de penalidade. Portanto, não é recomendado para alta precisão, a menos que você permita que a penalidade chegue ao infinito durante o cálculo. Mas um alto fator de penalidade torna o Hessiano muito mal condicionado, o que limita a precisão total alcançável sem levar em conta explicitamente as restrições.
Observe que restrições vinculadas são muito mais fáceis de lidar do que restrições gerais, de onde elas praticamente nunca são convertidas em penalidades.
O solucionador L-BFGS-B (usado com uma história de cerca de 5 dimensões) geralmente resolve problemas limitados limitados com muita confiabilidade e rapidez nas duas dimensões altas e baixas. As exceções são inconversas em problemas que podem ficar muito distantes das soluções, onde é fácil ficar preso ao método de descida.
Fizemos muitos experimentos em funções muito diversas em diversas dimensões, com diversos solucionadores disponíveis, pois precisávamos de um solucionador de restrições limitadas muito robusto como parte de nosso software de otimização global. O L-BFGS-B claramente se destaca como método de uso geral, embora, obviamente, em problemas de PME, outros solucionadores tenham um desempenho significativamente melhor. Portanto, eu recomendaria o L-BFGS-B como primeira opção e tentaria técnicas alternativas, caso o L-BFGS-B lide com sua classe de problemas.
fonte
Eu simplesmente usaria o IPOPT do solucionador de PNL de uso geral . É o solucionador mais robusto entre aqueles que tentei.
A menos que você tenha alguns requisitos muito especiais, não há motivo para insistir em um solucionador de problemas específico que funcione apenas para o NLS com restrições de caixa.
Uma mudança nos requisitos (por exemplo, adicionar restrições não lineares) causaria uma grande dor de cabeça com um solucionador de problemas específico. Você não terá esses problemas se usar o IPOPT de uso geral.
ATUALIZAÇÃO: Você pode tentar o L-BFGS com IPOPT , veja em Quase-Newton na documentação.
O procedimento da solução pode se tornar mais rápido às custas de estragar a notável robustez do IPOPT. Na minha opinião , use os derivados exatos, se estiverem disponíveis. Eu começaria a mexer com aproximações (como o L-BFGS) somente se tivesse problemas de desempenho comprovados.
fonte
O pacote R minpack.lm CRAN fornece uma implementação Levenberg-Marquardt com restrições de caixa.
Em geral, Levenberg-Marquardt é muito mais adequado que L-BFGS-B para problemas de mínimos quadrados. Ele convergirá (muito) melhor em problemas desafiadores. Também será muito mais rápido que o IPOPT de uso geral, pois é adaptado para problemas de mínimos quadrados não lineares.
O pacote R escolhe uma abordagem de projeção muito direta para impor as restrições (consulte o código-fonte ). Dependendo da implementação do LM que você está usando, pode ser simples incluir.
Agora, a sugestão nos comentários de usar uma transformação (por exemplo, uma transformação senoidal como em scipy) também é uma alternativa boa e simples para transformar seu algoritmo LM irrestrito em um restrito. Você também precisará incluir a transformação no jacobiano se o jacobiano for analítico.
fonte
(Anos depois) dois solucionadores que lidam com restrições de caixa:
O Scipy least_squares possui 3 métodos, com extenso documento:
fonte