Intro: I am porting a calibration function, where we used to use 2-d quasi Newton method.
How to port this? Does QuantLib have same optimization algorithm supported? what else?
todo: insteading quoting others, give logical description of all algorithms and status remarks.
quick solution:
1) 2-d QN: unknown yet. maybe M-G
http://en.wikipedia.org/wiki/Levenberg-Marquardt_algorithm
2)1-d Newton: see here: http://quantlib.org/reference/class_quant_lib_1_1_newton.html
Quasi Newton is an effort trying to generate the celebrated 1-d Newton method:
http://en.wikipedia.org/wiki/Newton%27s_method
A simple Google search gives me the following query back in May 2007:
Hello,
at the moment are available into QuantLib the following optimizers:
· Simplex (recently revisited: the Numerical Recipes implementation badly failed in finding the minimum of a 1D parabole…)
· Levenberg-Marquardt
· Conjugate Gradient
· Steepest Descent (still to be debugged, work in progress)
and we are currently considering the option to port into QuantLib the Broyden-Fletcher-Goldfarb-Shanno (BFGS2) algorithm, which in GSL is declared to be the best (see the text below). So:
· Any comment on the choice of BFGS2? do anyone has experience with it ?
· is anyone aware of an available open source C++ implementation to be ported into Quantlib with small effort ?
Personally, I would prefer NOT to translate the GSL implementation from C to C++, because of the danger to introduce some tricky bug and because it requires a much more sophisticated test suite (and much work).
ciao
Marco
In the reply, it is pointed out that GSL has C native code ready:
http://www.gnu.org/software/gsl/manual/html_node/Multidimensional-Minimization.html
with some comments:
Minimizer: gsl_multimin_fdfminimizer_vector_bfgs2
Minimizer: gsl_multimin_fdfminimizer_vector_bfgs
These methods use the vector Broyden-Fletcher-Goldfarb-Shanno (BFGS) algorithm. This is a quasi-Newton method which builds up an approximation to the second derivatives of the function f using the difference between successive gradient vectors. By combining the first and second derivatives the algorithm is able to take Newton-type steps towards the function minimum, assuming quadratic behavior in that region.
The bfgs2 version of this minimizer is the most efficient version available, and is a faithful implementation of the line minimization scheme described in Fletcher’s Practical Methods of Optimization , Algorithms 2.6.2 and 2.6.4. It supercedes the original bfgs routine and requires substantially fewer function and gradient evaluations. The user-supplied tolerance tol corresponds to the parameter \sigma used by Fletcher. A value of 0.1 is recommended for typical use (larger values correspond to less accurate line searches).
An existing C++ BFGS implementation is here:
http://www.alglib.net/optimization/lbfgs.php


