pub struct WolfeLineSearch { /* private fields */ }Expand description
Wolfe line search with Armijo and curvature conditions.
Enforces both the Armijo condition (sufficient decrease) and the curvature condition (sufficient curvature):
Armijo: f(x + α*d) ≤ f(x) + c₁*α*∇f(x)ᵀd
Curvature: |∇f(x + α*d)ᵀd| ≤ c₂*|∇f(x)ᵀd|The curvature condition ensures the step size is not too small by requiring that the gradient has decreased sufficiently along the search direction.
§Parameters
- c1: Armijo constant (typical: 1e-4), c₁ ∈ (0, c₂)
- c2: Curvature constant (typical: 0.9), c₂ ∈ (c₁, 1)
max_iter: Maximum line search iterations
§Example
use aprender::optim::{WolfeLineSearch, LineSearch};
use aprender::primitives::Vector;
let line_search = WolfeLineSearch::new(1e-4, 0.9, 50);
let f = |x: &Vector<f32>| x[0] * x[0];
let grad = |x: &Vector<f32>| Vector::from_slice(&[2.0 * x[0]]);
let x = Vector::from_slice(&[1.0]);
let d = Vector::from_slice(&[-2.0]);
let alpha = line_search.search(&f, &grad, &x, &d);
assert!(alpha > 0.0);Implementations§
Source§impl WolfeLineSearch
impl WolfeLineSearch
Sourcepub fn new(c1: f32, c2: f32, max_iter: usize) -> WolfeLineSearch
pub fn new(c1: f32, c2: f32, max_iter: usize) -> WolfeLineSearch
Creates a new Wolfe line search.
§Arguments
c1- Armijo constant (typical: 1e-4)c2- Curvature constant (typical: 0.9)max_iter- Maximum iterations (typical: 50)
§Panics
Panics if c1 >= c2 or values are outside (0, 1).
§Example
use aprender::optim::WolfeLineSearch;
let line_search = WolfeLineSearch::new(1e-4, 0.9, 50);Trait Implementations§
Source§impl Clone for WolfeLineSearch
impl Clone for WolfeLineSearch
Source§fn clone(&self) -> WolfeLineSearch
fn clone(&self) -> WolfeLineSearch
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for WolfeLineSearch
impl Debug for WolfeLineSearch
Source§impl Default for WolfeLineSearch
impl Default for WolfeLineSearch
Source§fn default() -> WolfeLineSearch
fn default() -> WolfeLineSearch
Creates a Wolfe line search with default parameters.
Defaults: c1=1e-4, c2=0.9, max_iter=50
Auto Trait Implementations§
impl Freeze for WolfeLineSearch
impl RefUnwindSafe for WolfeLineSearch
impl Send for WolfeLineSearch
impl Sync for WolfeLineSearch
impl Unpin for WolfeLineSearch
impl UnsafeUnpin for WolfeLineSearch
impl UnwindSafe for WolfeLineSearch
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more