Skip to main content

Module proximal

Module proximal 

Source
Expand description

Proximal Optimization Methods

This module provides proximal operators and splitting methods for optimising non-smooth convex functions. These methods are particularly powerful for regularised learning problems (LASSO, ridge, nuclear norm, etc.) and image processing (total variation, sparsity-promoting penalties).

§Structure

SubmoduleContents
operatorsprox_l1, prox_l2, prox_linf, prox_nuclear, project_simplex, project_box
istaIstaOptimizer, FistaOptimizer, ista_minimize, fista_minimize
admmAdmmSolver, solve_lasso, solve_consensus
splittingdouglas_rachford, peaceman_rachford, forward_backward, primal_dual_chambolle_pock

§Quick Start

§LASSO via FISTA

use scirs2_optimize::proximal::{fista_minimize, prox_l1};

let f = |x: &[f64]| 0.5 * x.iter().map(|&xi| xi * xi).sum::<f64>();
let grad_f = |x: &[f64]| x.to_vec();
let prox = |v: &[f64]| prox_l1(v, 0.1);

let result = fista_minimize(f, grad_f, prox, vec![2.0, -3.0], 0.5, 500)
    .expect("FISTA failed");

§ADMM LASSO

use scirs2_optimize::proximal::solve_lasso;

let a = vec![vec![1.0, 0.0], vec![0.0, 1.0]];
let b = vec![1.5, -0.5];
let x = solve_lasso(&a, &b, 0.1).expect("LASSO failed");

§Douglas-Rachford Splitting

use scirs2_optimize::proximal::{douglas_rachford, prox_l1, prox_l2};

let prox_f = |v: &[f64]| prox_l1(v, 0.5);
let prox_g = |v: &[f64]| prox_l2(v, 0.5);
let x = douglas_rachford(&prox_f, &prox_g, vec![2.0, -1.0], 1.0, 500);

Re-exports§

pub use operators::project_box;
pub use operators::project_simplex;
pub use operators::prox_l1;
pub use operators::prox_l2;
pub use operators::prox_linf;
pub use operators::prox_nuclear;
pub use ista::fista_minimize;
pub use ista::ista_minimize;
pub use ista::FistaOptimizer;
pub use ista::IstaOptimizer;
pub use ista::ProxOptResult;
pub use admm::solve_consensus;
pub use admm::solve_lasso;
pub use admm::AdmmSolver;
pub use splitting::douglas_rachford;
pub use splitting::douglas_rachford_tracked;
pub use splitting::dr_split;
pub use splitting::forward_backward;
pub use splitting::peaceman_rachford;
pub use splitting::primal_dual_chambolle_pock;
pub use splitting::DRResult;
pub use splitting::SplittingResult;

Modules§

admm
ADMM — Alternating Direction Method of Multipliers
ista
ISTA and FISTA — (Fast) Iterative Shrinkage-Thresholding Algorithm
operators
Proximal Operators and Projection Functions
splitting
Operator Splitting Methods