Como uma das minhas respostas foi citada, tentarei esclarecer por que sugeri o uso do IPOPT em vez do MINPACK.
Minhas objeções ao uso do MINPACK não têm nada a ver com os algoritmos que o MINPACK usa e tudo a ver com sua implementação. Minha principal objeção é que o software remonta a 1980 e foi atualizado pela última vez em 1999. Jorge Moré está aposentado; Duvido que ele ou qualquer um dos outros autores do software mantenha o controle sobre ele, e não há nenhuma equipe de pessoas que o apóie ativamente. A única documentação que posso encontrar no software é o relatório técnico original de Argonne de 1980, escrito por Jorge Moré e os outros autores do MINPACK. (Os capítulos 1-3 podem ser encontrados aqui e o capítulo 4 pode ser encontrado aqui.) Depois de pesquisar o código-fonte do MINPACK e ler a documentação (os PDFs são imagens digitalizadas e não podem ser pesquisadas), não vejo opções para acomodar restrições. Como o pôster original do problema de quadrados mínimos não lineares queria resolver um problema de quadrados mínimos não lineares restrito, o MINPACK nem sequer resolveria esse problema.
Se você olhar para a lista de discussão IPOPT, alguns usuários indicam que o desempenho do pacote em problemas de mínimos quadrados não lineares (NLS) é misto em relação aos algoritmos de Levenberg-Marquardt e algoritmos NLS mais especializados (veja aqui , aqui e aqui ). O desempenho do IPOPT em relação aos algoritmos NLS depende, é claro, do problema. Dado o feedback do usuário, o IPOPT parece ser uma recomendação razoável em relação aos algoritmos NLS.
No entanto, você enfatiza que os algoritmos NLS devem ser investigados. Concordo. Eu apenas acho que um pacote mais moderno que o MINPACK deve ser usado porque acredito que ele terá um desempenho melhor, será mais utilizável e terá suporte. Ceres parece ser um pacote candidato interessante, mas não pode lidar com problemas restritos no momento. TAOfuncionaria em problemas de mínimos quadrados com restrição de caixa, embora não implemente o clássico Levenberg-Marquardt, mas implemente um algoritmo sem derivadas. Um algoritmo livre de derivado provavelmente funcionaria bem para problemas de grande escala, mas eu não o usaria para problemas de pequena escala. Não consegui encontrar outros pacotes que inspirassem muita confiança em sua engenharia de software. Por exemplo, o GALAHAD parece não usar controle de versão ou qualquer teste automatizado, à primeira vista. O MINPACK também não parece fazer essas coisas. Se você tem experiência com o MINPACK ou recomendações sobre um software melhor, eu sou todo ouvidos.
Com tudo isso em mente, voltando à citação do meu comentário:
Qualquer sistema de equações é equivalente a um problema de otimização, e é por isso que os métodos baseados em Newton na otimização se parecem muito com os métodos baseados em Newton para resolver sistemas de equações não lineares.
Um comentário melhor provavelmente é algo para o efeito de:
nng(x)=0
Esta afirmação vale mesmo para resolver sistemas de equações sob restrições. Não conheço nenhum algoritmo que seja considerado "solucionador de equações" para o caso em que existem restrições nas variáveis. A abordagem comum que conheço, talvez com icterícia por vários semestres de cursos de otimização e pesquisa em um laboratório de otimização, é incorporar as restrições no sistema de equações em uma formulação de otimização. Se você tentasse usar as restrições em um esquema semelhante a Newton-Raphson para resolver equações, provavelmente terminaria com um gradiente projetado ou um método de região de confiança projetada, como os métodos usados na otimização restrita.
Se um determinado sistema não linear é a condição de otimização de primeira ordem para um problema de otimização, geralmente podemos produzir um algoritmo mais robusto usando essas informações. Por exemplo, considere a equação
Isso claramente tem um mínimo único e esperamos que nosso método de otimização o encontre independentemente do ponto de partida. Mas se olharmos apenas para as condições de otimização de primeira ordem, estaremos procurando uma solução de [Wolfram Alpha]x ∇f(x)=0
que tem uma solução exclusiva, mas muitos métodos de busca de raiz podem ficar presos no mínimo local.
Se reformularmos um novo problema de otimização para minimizar a norma do gradiente ao quadrado, estamos procurando um mínimo global de [Wolfram Alpha] que possui vários mínimos locais.x ∥∇f(x)∥2
Para resumir, começamos com um problema de otimização que possuía uma solução única que poderíamos garantir que um método encontraria. Nós reformulamos como um problema de busca não linear de raiz que tinha uma solução única que poderíamos identificar localmente, mas um método de busca de raiz (como Newton) pode estagnar antes de alcançá-lo. Em seguida, reformulamos o problema de localização raiz como um problema de otimização que tinha várias soluções locais (nenhuma medida local pode ser usada para identificar que não estamos no mínimo global).
Em geral, sempre que convertemos um problema de otimização em busca de raiz ou vice-versa, tornamos os métodos disponíveis e as garantias de convergência associadas mais fracos. A mecânica real dos métodos geralmente é muito semelhante, portanto é possível reutilizar muito código entre solucionadores não lineares e otimização.
fonte