C++ Bibliothek zur Optimierung
-
Hallo,
da auf meinen anderen Thread niemand antworten kann/möchte, versuch ich mal rauzubekommen, ob es schon gute fertige Bibliotheken gibt
Also ich möchte eine Funktion mit 8 Eingangsgrößen minimieren. Professionelle Tools wie CPLEX scheinen mir ein wenig mit "Kanonen auf Spatzen geschossen" bzw. sind auch absolut unerschwinglich.
Die meisten Optimierungstools, die ich gefunden habe, verlangen die explizite Vorgabe der zu minimierenden Funktion also z.B. x1+2*x2 = x3^2.
Genau das kann ich nicht verwenden, denn meine Funtkion ist komplizierter und liegt als C++ Funktion vor die ich dem Optimierungstool gerne übergeben würde. Also: Welches Optimierungstool lässt Funktionszeiger oder Funktoren zu und arbeitet mit Gradienten oder Newtonverfahren?Danke.
-
wenn man von der funktion nix weiss und nur einzelne werte berechnen kann, dann kriegt man ein maximum nur, wenn man jeden wert durchprobiert. oder hellsehen kann.
sieh dir lieber mal den quellcode an, extrahier die funktion, und treib ein bisschen analysis damit.
-
Theoretisch hast du Recht. Praktisch ist es jedoch üblich, "nahe benachbarte" Werte von einem Punkt auszuwählen und eine Art "Differenzenquotient" in die Richtung zu bilden. Anschlißend von den benachbarten Punkten mit dem steilsten Abstieg (er ist eine Näherung für den Gradienten) runter gehen.
Ist nur ein grobes heuristisches Verfahren und die große Gefahr existiert in einem lokalen Minimum hängen zu bleiben. Aber besser als gar nichts oder alle Werte durchprobieren allemal
-
Leider kann ich dir mit einer C/C++-Bibloithek nicht helfen. Ich hör zwar ne kleine Vorlesung drüber, da haben wir das alles aber in Matlab gemacht. Das geht dann auch wunderbar.
Aber mal zur Klarstellung: "Standard"-Analysis wird zur Optimierung in der Anwendung nur selten benutzt. Der Fall, dass man eine Funktion so hübsch in einem Term hinschreiben kann, ist da auch eher selten. Häufig müssen für eine einzige Funktionsauswertung ganze Gleichungssysteme oder DGLs gelöst werden.
Um das noch etwas unangenehmer zu machen, gibt es z.b. in den Ingenieurswissenschaften viele Probleme, die mit hunderten, tausenden oder hunderttausenden Variablen beschrieben werden.
Dazu haben sich die Numeriker eine ganze Menge toller Tricks einfallen lassen, um damit klarzukommen.Zum Abstiegsverfahren (Methode des steilsten Abstiegs): Das ist keine Heuristik. Man kann die Konvergenz des Verfahrens zeigen. Nur ist es leider ziemlich ungeeignet, weil die Konvergenz extrem langsam werden kanm (kam grad heute in der Vorlesung dran
) Ist auch "nur" ein Verfahren zur lokalen Optimierung, und es ist auch nicht gesagt, ob man auf einem Minimum oder Maximum hängen bleibt.
-
er hat doch nichtmal gesagt, dass seine funktion stetig ist. da bringen auch keine differenzenquotienten was, die kann ja dazwischen hopsen wie sie will.
-
@Taurin
Stimmt schon, nur hat er halt nichts geschrieben, dass eine Darstellung für den Gradienten bekannt ist (ebenso wenig wie eine Funktionsdarstellung). Also nehmen wir nur eine diskrete Anzahl Richtungen und außerdem durch den Differenzenquotienten eine Abschätzung.@Peter
Also, dass so hässliche Funktionen in der Praxis jemals auftauchen: das kommt einmal in 100 Jahren oder so vorWas in der Praxis vorkommt ist eigentlich immer mindestens stückweise stetig.
In diesem Fall kann glaube ich niemand hier im Forum viele allgemeine weitere Tipps geben, da man sehr viel über das Problem wissen müsste. Klar: man kann es dann mal mit genetischer Programmierung versuchen. Ist vergleichbar heuristisch wie das oben genannte Verfahren. Einfach halt mal ein wenig herumspielen.
-
er hat doch nichtmal gesagt, dass seine funktion stetig ist. da bringen auch keine differenzenquotienten was, die kann ja dazwischen hopsen wie sie will.
Also wenn die Hochburg der Optimierung "Microsoft Excel" mit Hilfe des Gradienten- oder Newtonverfahrens ein sehr gutes Minimum findet, obwohl die Funktion selber gar nicht hinterlegt ist, sollte das doch auch mit einer schönen C++ Bibliothek möglich sein
.
Ich hab übrigens Optsolve++ gefunden. Die Arbeiten mit Funktoren und das kommt mir sehr entgegen. Leider ein kommerzielles Tool und da wird mein Arbeitgeber kein Geld für ausgeben!