Puisqu'une de mes réponses a été citée, je vais essayer de clarifier pourquoi j'ai suggéré d'utiliser IPOPT au lieu de MINPACK.
Mes objections à l'utilisation de MINPACK n'ont rien à voir avec les algorithmes que MINPACK utilise et tout à voir avec leur implémentation. Ma principale objection est que le logiciel remonte à 1980 et a été mis à jour pour la dernière fois en 1999. Jorge Moré est à la retraite; Je doute que lui ou l'un des autres auteurs du logiciel garde un œil dessus, et il n'y a pas d'équipe de personnes qui le soutiennent activement. La seule documentation que je peux trouver sur le logiciel est le rapport technique original d'Argonne de 1980 écrit par Jorge Moré et les autres auteurs de MINPACK. (Les chapitres 1-3 peuvent être trouvés ici , et le chapitre 4 peut être trouvé ici.) Après avoir recherché le code source de MINPACK et parcouru la documentation (les fichiers PDF sont des images numérisées et ne peuvent pas être recherchés), je ne vois aucune option pour s'adapter aux contraintes. Puisque l'affiche originale du problème des moindres carrés non linéaires voulait résoudre un problème des moindres carrés non linéaires contraint, MINPACK ne résoudra même pas ce problème.
Si vous regardez la liste de diffusion IPOPT, certains utilisateurs indiquent que les performances du package sur les problèmes des moindres carrés non linéaires (NLS) sont mitigées par rapport aux algorithmes de Levenberg-Marquardt et aux algorithmes NLS plus spécialisés (voir ici , ici et ici ). Les performances d'IPOPT par rapport aux algorithmes NLS dépendent bien sûr du problème. Étant donné les commentaires des utilisateurs, IPOPT semble être une recommandation raisonnable par rapport aux algorithmes NLS.
Cependant, vous faites valoir que les algorithmes NLS doivent être étudiés. Je suis d'accord. Je pense simplement qu'un package plus moderne que MINPACK devrait être utilisé car je pense qu'il fonctionnera mieux, sera plus utilisable et sera pris en charge. Ceres semble être un package candidat intéressant, mais il ne peut pas gérer les problèmes contraints pour le moment. TAOfonctionnerait sur les problèmes de moindres carrés contraints par des boîtes, bien qu'il n'implémente pas le Levenberg-Marquardt classique, mais implémente à la place un algorithme sans dérivé. Un algorithme sans dérivé fonctionnerait probablement bien pour des problèmes à grande échelle, mais je ne l'utiliserais pas pour des problèmes à petite échelle. Je n'ai trouvé aucun autre package qui ait inspiré une grande confiance dans leur génie logiciel. Par exemple, GALAHAD ne semble pas utiliser le contrôle de version ou tout test automatisé, à première vue. MINPACK ne semble pas faire ces choses non plus. Si vous avez de l'expérience avec MINPACK ou des recommandations concernant un meilleur logiciel, je suis à l'écoute.
Avec tout cela à l'esprit, revenons à la citation de mon commentaire:
Tout système d'équations équivaut à un problème d'optimisation, c'est pourquoi les méthodes basées sur Newton en optimisation ressemblent beaucoup aux méthodes basées sur Newton pour résoudre des systèmes d'équations non linéaires.
Un meilleur commentaire est probablement quelque chose à l'effet de:
nng( x ) = 0
Cette affirmation est valable même pour la résolution de systèmes d'équations sous contraintes. Je ne connais aucun algorithme considéré comme "résolveur d'équations" dans le cas où il y a des contraintes sur les variables. L'approche commune que je connais, peut-être jaunie par plusieurs semestres de cours d'optimisation et de recherche dans un laboratoire d'optimisation, est d'incorporer les contraintes sur le système d'équations dans une formulation d'optimisation. Si vous deviez essayer d'utiliser les contraintes dans un schéma de type Newton-Raphson pour la résolution d'équations, vous vous retrouveriez probablement avec un gradient projeté ou une méthode de région de confiance projetée, un peu comme les méthodes utilisées dans l'optimisation contrainte.
Si un système non linéaire donné est la condition d'optimalité de premier ordre pour un problème d'optimisation, alors nous pouvons souvent produire un algorithme plus robuste en utilisant ces informations. Par exemple, considérons l'équation
Cela a clairement un minimum unique et nous nous attendons à ce que notre méthode d'optimisation le trouve quel que soit le point de départ. Mais si nous ne regardons que les conditions d'optimalité de premier ordre, nous recherchons une solution de [Wolfram Alpha]∇ f ( x ) = 0x ∇f(x)=0
qui a une solution unique, mais de nombreuses méthodes de rootfinding peuvent rester bloquées au minimum local.
Si nous reformulons un nouveau problème d'optimisation pour minimiser la norme du gradient au carré, nous recherchons un minimum global de [Wolfram Alpha] qui a plusieurs minima locaux.‖ ∇ f ( x ) ‖ 2x ∥∇f(x)∥2
Pour résumer, nous avons commencé avec un problème d'optimisation qui avait une solution unique que nous pouvions garantir qu'une méthode trouverait. Nous avons reformulé comme un problème de recherche de racine non linéaire qui avait une solution unique que nous pouvions identifier localement, mais une méthode de recherche de racine (comme Newton) pourrait stagner avant de l'atteindre. Nous avons ensuite reformulé le problème de recherche de racine comme un problème d'optimisation qui avait de multiples solutions locales (aucune mesure locale ne peut être utilisée pour identifier que nous ne sommes pas au minimum global).
En général, chaque fois que nous convertissons un problème de l'optimisation en rootfinding ou vice-versa, nous affaiblissons les méthodes disponibles et les garanties de convergence associées. La mécanique réelle des méthodes est souvent très similaire, il est donc possible de réutiliser beaucoup de code entre les solveurs non linéaires et l'optimisation.
la source