[Python-de] Optimizer

Peter Otten __peter__ at web.de
Mon Nov 22 17:24:15 CET 2004


[Heute schon einmal über gmane gepostet, scheint aber in einem Filter 
hängengeblieben zu sein.]

Reik H. Börger wrote:

> Ich versuche, eine recht komplizierte Funktion mit kompliziertem, aber
> explizit bekanntem  Gradienten zu optimieren. Ich habe Zielfunktion und
> Gradient jeweils in eine Funktion geschrieben, die zu funktionieren
> scheinen. Nun versuche ich mit dem Befehl
> 
> minvalue = optimize.fmin_bfgs(calibration_objective_function, x0, \
> fprime=compute_gradient_objective_function, \
>          args=(Zins, market_vols,
> initial_curve, swaptions, fixrho),gtol=1.0e-25)
> 
> die Funktion zu minimieren.
> Der Optimierer bricht immer nach einer Iteration ab, wobei der Gradient
> 3 mal aufgerufen wird und die Zielfunktion 14 mal. Der Gradient wird
> aber immer an derselben Stelle ausgewertet. Der angegebene Optimalwert
> ist immer der Startwert x0, was nicht sein kann. Ich kann den Fehler
> einfach nicht finden. Ist  fmin_bfgs etwa  fehlerhaft? Wenn ich
> fprime=None übergebe, funktioniert die Optimierung wunderbar (dauert
> aber lange -> Gradient benutzen).
> 
> Hat jemand eine Idee, in welche Falle ich gelaufen sein könnte?

[Scheinbar nicht, deshalb:]

Als erstes, weil's so einfach ist, würde ich gtol (Toleranz?) erhöhen. Ich
kenne den Algorithmus nicht, vielleicht fällt irgendein Wert aus der
Rechengenauigkeit. 
Als nächstes kannst Du grad f mit seiner numerischen Näherung vergleichen.
Zuletzt kann fmin_bgfs() mit einer einfachen (und publizierbaren) 
f/grad f-Kombination getestet werden -- und wenn dabei ebenfalls Probleme
auftreten, finden sich auf einer scipy-Mailingliste sicherlich kompetente
Ansprechpartner.

Peter