Ich muss das Minimum einer Funktion finden. Wenn ich die Dokumente unter http://docs.scipy.org/doc/scipy/reference/optimize.html lese, sehe ich, dass es mehrere Algorithmen gibt, die dasselbe tun, dh das Minimum finden. Woher weiß ich, welches ich wählen soll?
Einige der aufgelisteten Algorithmen
- Minimieren Sie eine Funktion mit dem Downhill-Simplex-Algorithmus.
- Minimieren Sie eine Funktion mit dem BFGS-Algorithmus.
- Minimieren Sie eine Funktion mit dem nichtlinearen konjugierten Gradientenalgorithmus.
- Minimieren Sie die Funktion f mit der Newton-CG-Methode.
- Minimieren Sie eine Funktion mit der modifizierten Powell-Methode.
Meine Funktion ist linear. Die Dimensionalität liegt bei 232750 (dies ist die Anzahl der unterschiedlichen Verläufe, die ich jedes Mal berechnen muss). Die Berechnung des Verlaufs und der Kosten dauert ungefähr 2 Minuten, ist also nicht billig. Ich glaube nicht, dass ich Einschränkungen habe. es ist deterministisch und kontinuierlich.
optimization
siamii
quelle
quelle
Antworten:
Basierend auf dem, was Sie gesagt haben: Ich gehe davon aus, dass Sie für 50 Variablen optimieren müssen; Ich gehe auch davon aus, dass Sie die Situation haben, dass es sehr teuer ist, analytische Derivate zu finden (geschweige denn, die Zahlen herauszuholen) und dass Ihre Optimierung nicht eingeschränkt ist.
Lassen Sie mich betonen, Sie sind ein bisschen unglücklich, denn zwischen 25 und 100 Variablen handelt es sich um eine Dämmerungszone, wenn es um die Auswahl zwischen großen oder kleinen Optimierungsroutinen geht. Trotzdem ist nichts verloren.
Angesichts der Tatsache, dass Ableitungen erster Ordnung teuer sind, um solche Ableitungen zu erzielen, wird die Idee der Newtonschen Methode zunichte gemacht. Mit Quasi-Newton (BFGS) haben Sie vielleicht etwas Glück, wenn Ihr Hessischer am Anfang leicht diagonal ist. CG ist normalerweise etwas langsamer als BFGS. Verwenden Sie diese Option, wenn der Speicher ebenfalls ein Problem darstellt (oder wählen Sie in diesem Fall einfach L-BFGS). Zusätzlich wäre ein einfacher Suchalgorithmus für steilste Abfahrten / Linien, wenn man bedenkt, wie langsam es ist, Ihre Funktion zu bewerten, äußerst langsam. Das Gleiche gilt für Simulated Annealing und andere Zufallssuchvarianten (ich nehme an, Sie haben keinen Zugriff auf HMC und den ganzen Jazz).
Wenn Sie also das Beste für Ihr Geld brauchen, wenn es um die Bewertung einzelner Funktionen geht: Entscheiden Sie sich für die Powell-Methode und testen Sie COBYLA. Obwohl es sich um einen eingeschränkten Optimierungsalgorithmus handelt, da er den Gradienten Ihrer Funktion intern linear approximiert, um die Dinge zu beschleunigen, kann er die Linearität Ihrer Funktion nutzen. Auch auf jeden Fall versuchen NLopt für Python . Sie haben viele Optimierer ohne Farbverläufe. versuche UOBYQA; es ist auch Powells Idee (uneingeschränkte Optimierung durch quadratische Näherungen).
Ganz kurz: Der N-CG-Algorithmus hängt von der Berechnung des Hessischen ab, und die Berechnung Ihres Hessischen scheint sehr teuer zu sein. NLCG und BFGS benötigen es nicht, obwohl sie versuchen könnten, es in ihrem ersten Schritt einmal zu berechnen.
Ich habe den Simplex-Algorithmus absichtlich weggelassen, weil es ein ganz anderes Biest ist. nichts mit Farbverläufen als solchen zu tun. Probieren Sie es aus, aber ich kann es nicht wirklich kommentieren. es hängt wirklich von der Natur Ihres Problems ab.
Für eine erste gute Referenz zur numerischen Optimierung bringt Sie CTKellys Buch Iterative Methods for Optimization ganz schön weit.
quelle
Vielleicht sollten Sie sich ein Einführungsbuch über numerische Optimierung zulegen. Sie müssen Ihre Funktion berücksichtigen, um sich für den Algorithmus zu entscheiden.
Unter den Algorithmen, die Sie erwähnen, sind wichtige Unterschiede, ob das Jacobian oder das Hessian oder nur die Funktion selbst benötigt wird.
In Anbetracht der Tatsache, dass es sich hier um eine statistische Q & A-Site handelt und es sich daher um Zufallsvariablen handelt: Stellen Sie sicher, dass Ihre deterministische Funktion so ausgewertet werden kann, dass über den gesamten Suchbereich kontinuierliche Ergebnisse erzielt werden.
quelle