1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
//! Forward-Backward Splitting algorithm //! //! ## About //! //! This module offers an implementation of the forward-backward splitting algorithm //! //! //! //! ## Example: Forward-Backward Splitting //! //! ``` //! use optimization_engine::{*, fbs::*}; //! use optimization_engine::constraints::Ball2; //! use std::num::NonZeroUsize; //! //! fn my_cost(u: &[f64], cost: &mut f64) -> Result<(), Error> { //! *cost = u[0] * u[0] + 2. * u[1] * u[1] + u[0] - u[1] + 3.0; //! Ok(()) //! } //! //! fn my_gradient(u: &[f64], grad: &mut [f64]) -> Result<(), Error> { //! grad[0] = u[0] + u[1] + 1.0; //! grad[1] = u[0] + 2. * u[1] - 1.0; //! Ok(()) //! } //! //! fn main() { //! let radius = 0.2; //! let box_constraints = Ball2::new(None, radius); //! let problem = Problem::new(box_constraints, my_gradient, my_cost); //! let gamma = 0.3; //! let tolerance = 1e-6; //! //! let mut fbs_cache = FBSCache::new(NonZeroUsize::new(2).unwrap(), gamma, tolerance); //! let mut u = [0.0; 2]; //! let mut optimizer = FBSOptimizer::new(problem, &mut fbs_cache); //! //! let status = optimizer.solve(&mut u); //! //! assert!(status.has_converged()); //! } //! ``` mod fbs_cache; mod fbs_engine; mod fbs_optimizer; pub use fbs_cache::FBSCache; pub use fbs_optimizer::FBSOptimizer; /* --------------------------------------------------------------------------------------------- */ /* TESTS */ /* --------------------------------------------------------------------------------------------- */ #[cfg(test)] mod tests;