Description: L-BFGS-B is a variant of the well-known "BFGS" quasi-Newton method. This variant uses limited-memory (like L-BFGS), and also handles simple constraints (to be specific, bound constraints, so this includes x >=0 constraints).
The authors of LBFGSB have had fortran implementations available since 1996, but in 2011 they released a major update (v3.0) which has an improved algorithm (you should use this version!). There are existing mex file wrappers for earlier versions, but none worked with v3.0, so I created this file.
This submission tries to make the mex wrapper simple, and then includes a nice .m file solver that requires very few parameters, yet is customizable for advanced users. Run the compile_mex.m file to compile the files. compile_mex.m also includes two quick sanity checks (the file driver1.m is a helper file for one of these checks)
I also have an example of using L-BFGS-B to solve the non-negative least-squares
(NNLS) problem, and comparing it to other existing solvers. To put it simply,
L-BFGS-B is a fantastic NNLS solver, and much better than Matlab's lsqnonneg.
Links:
The fortran lbfgsb is at http://users.eecs.northwestern.edu/~nocedal/lbfgsb.html,
There are also versions 2.1 and 2.4 of the library.
For v 2.1, Peter Carbonetto's mex interface works; see http://www.mathworks.com/matlabcentral/fileexchange/15061-matlab-interface-for-l-bfgs-b and also http://www.cs.ubc.ca/~pcarbo/lbfgsb-for-matlab.html
For v 2.4 (I don't know where you can find this version though), use the mex files from here: http://www.cs.toronto.edu/~liam/software.shtml
The wikipedia page (this was mainly edited by one of the authors of the L-BFGS-B algorithm): http://en.wikipedia.org/wiki/L-BFGS-B:_Optimization_subject_to_simple_bounds
For installing on 64-bit Windows, if you need a compiler, see http://www.mathworks.com/support/compilers/R2011b/win64.html |