Expand description
Limited memory BFGS (L-BFGS) algorithm ported from liblbfgs
§Example
// 0. Import the lib
use liblbfgs::lbfgs;
const N: usize = 100;
// 1. Initialize data
let mut x = [0.0 as f64; N];
for i in (0..N).step_by(2) {
x[i] = -1.2;
x[i + 1] = 1.0;
}
// 2. Defining how to evaluate function and gradient
let evaluate = |x: &[f64], gx: &mut [f64]| {
let n = x.len();
let mut fx = 0.0;
for i in (0..n).step_by(2) {
let t1 = 1.0 - x[i];
let t2 = 10.0 * (x[i + 1] - x[i] * x[i]);
gx[i + 1] = 20.0 * t2;
gx[i] = -2.0 * (x[i] * gx[i + 1] + t1);
fx += t1 * t1 + t2 * t2;
}
Ok(fx)
};
let prb = lbfgs()
.with_max_iterations(5)
.with_orthantwise(1.0, 0, 99) // enable OWL-QN
.minimize(
&mut x, // input variables
evaluate, // define how to evaluate function
|prgr| { // define progress monitor
println!("iter: {:}", prgr.niter);
false // returning true will cancel optimization
}
)
.expect("lbfgs owlqn minimize");
println!("fx = {:}", prb.fx);
Modules§
- line
- Find a satisfactory step length along predefined search direction
- math
- Backend for lbfgs vector operations
Structs§
- Lbfgs
Param - L-BFGS optimization parameters.
- Lbfgs
State - LBFGS optimization state allowing iterative propagation
- Orthantwise
- Orthant-Wise Limited-memory Quasi-Newton (OWL-QN) algorithm
- Problem
- Represents an optimization problem.
- Progress
- Store optimization progress data, for progress monitor
- Report
Functions§
- default_
evaluate - Default test function (rosenbrock) adopted from liblbfgs sample.c
- default_
progress - Default progress monitor adopted from liblbfgs sample.c
- lbfgs