## my-bfgs

A pure Rust implementation of the BFGS optimization algorithm

### 3 releases

 0.1.2 Feb 1, 2023 Apr 26, 2022 Apr 26, 2022

#7 in #minimizing

Used in 2 crates (via consprob-trained)

MIT/Apache

9KB
137 lines

# bfgs

This package contains an implementation of BFGS, an algorithm for minimizing convex twice-differentiable functions.

BFGS is explained at a high level in the blog post introducing this package.

In this example, we minimize a 2d function:

``````extern crate bfgs;
extern crate ndarray;

use ndarray::{Array, Array1};

fn main() {
let x0 = Array::from_vec(vec![8.888, 1.234]);  // Chosen arbitrarily
let f = |x: &Array1<f64>| x.dot(x);
let g = |x: &Array1<f64>| 2.0 * x;
let x_min = bfgs::bfgs(x0, f, g);
assert_eq!(x_min, Ok(Array::from_vec(vec![0.0, 0.0])));
}
``````

This project uses cargo-make for builds; to build, run `cargo make all`.

### `lib.rs`:

This package contains an implementation of BFGS, an algorithm for minimizing convex twice-differentiable functions.

BFGS is explained at a high level in the blog post introducing this package.

In this example, we minimize a 2d function:

``````extern crate my_bfgs as bfgs;
extern crate ndarray;

use ndarray::{Array, Array1};

fn main() {
let x0 = Array::from_vec(vec![8.888, 1.234]);  // Chosen arbitrarily
let f = |x: &Array1<f64>| x.dot(x);
let g = |x: &Array1<f64>| 2.0 * x;
let x_min = bfgs::bfgs(x0, f, g);
assert_eq!(x_min, Ok(Array::from_vec(vec![0.0, 0.0])));
}
``````

This project uses cargo-make for builds; to build, run `cargo make all`.

~1.5MB
~25K SLoC