Module Lbfgs


module Lbfgs: sig .. end
Binding to L-BFGS-B. These is a limited-memory quasi-Newton code for unconstrained and for bound-constrained optimization.

The authors of the original FORTRAN code expect that if you use their software in a publication, you quote one of these references:



type work 
Represent the memory space needed to solve a minimization problem. It is usually allocated automatically but it is possible to do it manually to, say, allocate it once only before a loop.
exception Abnormal of float * string
Abnormal(f, msg) is raised if the routine terminated abnormally without being able to satisfy the termination conditions. In such an event, the variable x (see Lbfgs.F.min) will contain the current best approximation found and f is the value of the target function at x. msg is a message containing additional information (returned by the original FORTRAN code).

If the error message is not precise enough, it is recommended to turn printing on to understand what is the problem.


type print =
| No (*No output is generated.*)
| Last (*Print one line at the last iteration.*)
| Every of int (*Every k prints the value of the function and |proj gradient| every k iterations. Valid values are 0 <= k <= 98, otherwise the closer value in that interval is used.*)
| Details (*Print details of every iteration (except vectors).*)
| All (*Print details of every iteration (except vectors) including changes of active set and final x.*)
| Full (*Print details of every iteration including x and g.*)
Control of the frequency at which information is outputted.
type state 
Holds informations on the current state of the computation that can help to decide whether to stop.
module F: sig .. end
Fortran Layout.
module C: sig .. end
C layout.
val work : ?corrections:int -> int -> work
work n allocate the work space for a problem of size at most n.
corrections : See Lbfgs.F.min.

Accessing the state


val is_constrained : state -> bool
Tells whether the problem is constrained.
val nintervals : state -> int
The total number of intervals explored in the search of Cauchy points.
val nskipped_updates : state -> int
The total number of skipped BFGS updates before the current iteration.
val iter : state -> int
The number of current iteration.
val nupdates : state -> int
The total number of BFGS updates prior the current iteration.
val nintervals_current : state -> int
The number of intervals explored in the search of Cauchy point in the current iteration.
val neval : state -> int
The total number of function and gradient evaluations.
val neval_current : state -> int
The number of function value or gradient evaluations in the current iteration.
val previous_f : state -> float
Returns f(x) in the previous iteration.
val norm_dir : state -> float
2-norm of the line search direction vector.
val eps : state -> float
The machine precision epsmch generated by the code.
val time_cauchy : state -> float
The accumulated time spent on searching for Cauchy points.
val time_subspace_min : state -> float
The accumulated time spent on subspace minimization.
val time_line_search : state -> float
The accumulated time spent on line search.
val slope : state -> float
The slope of the line search function at the current point of line search.
val slope_init : state -> float
The slope of the line search function at the starting point of the line search.
val normi_grad : state -> float
The infinity norm of the projected gradient