Non-linear-Least-Squares-Optimierung-Bibliothek für C
Ich bin auf der Suche nach einer Bibliothek in C, die die Optimierung einer Zielfunktion (vorzugsweise Levenberg-Marquardt-Algorithmus) und unterstützt die box-constraints, die linear inequality constraints und nicht-linear inequality constraints.
Ich habe versucht, mehrere Bibliotheken bereits, aber keiner von Ihnen verwenden die notwendigen constraint-Typen für meine Anwendung:
- GNU GSL (unterstützt keine Einschränkungen)
- cMPFIT (nur unterstützt box-constraints)
- levmar (keine Unterstützung für nicht-lineare constraints)
Momentan entdecke ich NLoptaber ich bin mir nicht sicher, ob ich eine least-squares-Ansatz mit einer der mitgelieferten algorithmen.
Ich finde es schwer zu glauben, dass es nicht eine einzelne Bibliothek unterstützt die vollständige Palette von Nebenbedingungen in diesem problem, so dass ich glaube, ich habe irgendwo einen Fehler, während googeln.
Ich vor kurzem entdeckt habe, die ich anrufen kann der Matlab-Funktionen C. Während würde lösen das problem ganz einfach, ich will nicht zu haben, rufen Sie Matlab-Funktionen von C. Es ist nicht schnell, in meiner Erfahrung.
Jede Hilfe wird sehr geschätzt.
InformationsquelleAutor der Frage alkar | 2011-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe vor einiger Zeit war die Erforschung der Zustand von C/C++ least-squares-fitting-Bibliotheken. Ich notierte ein paar links, auch die, die Sie gab und auch:
ALGLIB/Optimierung -- Lev-Mar mit boundary-constraints.
WNLIB/wnnlp -- eine eingeschränkte nicht-lineare Optimierung-Paket in C (Allgemeine Optimierung, nicht der kleinsten Quadrate). Einschränkungen werden behandelt, indem ein penalty-Funktion.
Ich habe nicht verwendet eine der Bibliotheken noch nicht, aber NLopt scheint der vielversprechendste für mich. Es wäre toll, wenn es spezielle Schnittstellen und algorithmen für die (gewichtete) least-squares fitting.
BTW, ist dein Hinweis zur Matlab bedeuten, dass es Lev-Mar mit nicht-linearen Nebenbedingungen?
InformationsquelleAutor der Antwort marcin
Den Ansatz, den ich letztendlich gefolgt ist folgende:
Ich verwendet NLopt für die Optimierung und die Zielfunktion wurde gebaut, um die Berechnung der quadrierten Fehler des Problems.
Den Algorithmus, zeigten die vielversprechendsten Ergebnisse wurde COBYLA (Local derivative-free optimization). Es unterstützt box-constraints und nicht-linearen Nebenbedingungen. Die lineare Ungleichheit-Einschränkungen eingeführt wurden, die als nicht-lineare constraints, die in der Regel machbar.
Einfaches benchmarking zeigt, dass es nicht konvergieren ein wenig langsamer als ein Lev-Mar-Ansatz, aber die Geschwindigkeit geopfert wird, aufgrund der Notwendigkeit für Einschränkungen.
InformationsquelleAutor der Antwort alkar
MPFIT: EIN MINPACK-1 Least-Squares-Fitting-Bibliothek in C
MPFIT verwendet die Levenberg-Marquardt-Verfahren zum lösen von least-squares problem. In seiner typischen Verwendung, MPFIT verwendet werden, um zu passen eine vom Benutzer bereitgestellte Funktion ("Modell"), um vom Benutzer gelieferten Daten ("Daten") durch einstellen einer Reihe von Parametern. MPFIT basiert auf MINPACK-1 (LMDIF.F) von Mehr' und Mitarbeiter.
http://cow.physics.wisc.edu/~craigm/idl/cmpfit.html
InformationsquelleAutor der Antwort Pedro van Stralen
OPTIF9 kann umgewandelt werden in C (Fortran) und vielleicht schon von jemand.
Wenn das, was du meinst mit box-constraints ist, dass es unterstützt die oberen und unteren Grenzen auf Werte der parameter, ich glaube, es ist eine version, die das tut.
Dass ist ein heikles problem, weil es bedeutet, dass wenn ein parameter wird auf eine Grenze, es reduziert effektiv die Freiheitsgrade um 1.
Es kann get "stuck on a wall", wenn Sie nicht wirklich wollen, dass es.
Was wir gefunden haben ist, dass es besser ist, um eine unbeschränkte minimizer und Parameter für die Transformation, über so etwas wie ein Protokoll oder eine logit-Transformation, so dass in dem Suchraum sind Sie unbeschränkt, aber in der Modell-Raum, für den Sie beschränkt sind.
Soweit die andere Arten von Einschränkungen, ich weiß es nicht, obwohl eine option ist, als Teil der Ziel-Funktion, um es wirklich schlimm, wenn die constraints verletzt werden, so dass der Optimierer vermeidet diese Bereiche.
Ich habe festgestellt, wenn ich eine wirklich flexible Reihe von Einschränkungen, wenn ich will, einen guten störungsfreien Algorithmus verwende ich Metropolis-Hastings.
Es sei denn, ich bin falsch, wenn es ihm gelingt, eine Probe, die gegen Einschränkungen, können Sie einfach verwerfen der Probe.
Es dauert länger, aber es ist einfach und funktioniert immer.
InformationsquelleAutor der Antwort Mike Dunlavey