pub struct HagerZhangLineSearch<P, G, F> { /* private fields */ }Expand description
§Hager-Zhang line search
The Hager-Zhang line search is a method to find a step length which obeys the strong Wolfe conditions.
§Requirements on the optimization problem
The optimization problem is required to implement CostFunction and Gradient.
§Reference
William W. Hager and Hongchao Zhang. “A new conjugate gradient method with guaranteed descent and an efficient line search.” SIAM J. Optim. 16(1), 2006, 170-192. DOI: https://doi.org/10.1137/030601880
Implementations§
Source§impl<P, G, F> HagerZhangLineSearch<P, G, F>
impl<P, G, F> HagerZhangLineSearch<P, G, F>
Sourcepub fn new() -> Self
pub fn new() -> Self
Construct a new instance of HagerZhangLineSearch
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> = HagerZhangLineSearch::new();Sourcepub fn with_delta_sigma(self, delta: F, sigma: F) -> Result<Self, Error>
pub fn with_delta_sigma(self, delta: F, sigma: F) -> Result<Self, Error>
Set delta and sigma.
Delta defaults to 0.1 and must be in (0, 1).
Sigma defaults to 0.9 and must be in [delta, 1).
Delta and Sigma correspond to the constants c1 and c2 of the strong Wolfe conditions,
respectively.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_delta_sigma(0.2, 0.8)?;Sourcepub fn with_epsilon(self, epsilon: F) -> Result<Self, Error>
pub fn with_epsilon(self, epsilon: F) -> Result<Self, Error>
Set epsilon
Used in the approximate strong Wolfe condition.
Must be non-negative and defaults to 1e-6.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_epsilon(1e-8)?;Sourcepub fn with_theta(self, theta: F) -> Result<Self, Error>
pub fn with_theta(self, theta: F) -> Result<Self, Error>
Set theta
Used in the update rules when the potential intervals [a, c] or [c, b] violate the opposite slope condition.
Must be in (0, 1) and defaults to 0.5.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_theta(0.4)?;Sourcepub fn with_gamma(self, gamma: F) -> Result<Self, Error>
pub fn with_gamma(self, gamma: F) -> Result<Self, Error>
Set gamma
Determines when a bisection step is performed.
Must be in (0, 1) and defaults to 0.66.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_gamma(0.7)?;Sourcepub fn with_eta(self, eta: F) -> Result<Self, Error>
pub fn with_eta(self, eta: F) -> Result<Self, Error>
Set eta
Used in the lower bound for beta_k^N.
Must be larger than zero and defaults to 0.01.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_eta(0.02)?;Sourcepub fn with_bounds(self, step_min: F, step_max: F) -> Result<Self, Error>
pub fn with_bounds(self, step_min: F, step_max: F) -> Result<Self, Error>
Set lower and upper bound of step
Defaults to a minimum step length of EPSILON and a maximum step length of 1e5.
The chosen values must satisfy 0 <= step_min < step_max.
§Example
let hzls: HagerZhangLineSearch<Vec<f64>, Vec<f64>, f64> =
HagerZhangLineSearch::new().with_bounds(1e-3, 1.0)?;Trait Implementations§
Source§impl<P: Clone, G: Clone, F: Clone> Clone for HagerZhangLineSearch<P, G, F>
impl<P: Clone, G: Clone, F: Clone> Clone for HagerZhangLineSearch<P, G, F>
Source§fn clone(&self) -> HagerZhangLineSearch<P, G, F>
fn clone(&self) -> HagerZhangLineSearch<P, G, F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<P, G, F> Default for HagerZhangLineSearch<P, G, F>
impl<P, G, F> Default for HagerZhangLineSearch<P, G, F>
Source§impl<'de, P, G, F> Deserialize<'de> for HagerZhangLineSearch<P, G, F>
impl<'de, P, G, F> Deserialize<'de> for HagerZhangLineSearch<P, G, F>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<P, G, F> LineSearch<G, F> for HagerZhangLineSearch<P, G, F>
impl<P, G, F> LineSearch<G, F> for HagerZhangLineSearch<P, G, F>
Source§fn search_direction(&mut self, search_direction: G)
fn search_direction(&mut self, search_direction: G)
Set search direction
Source§impl<P, G, F> Serialize for HagerZhangLineSearch<P, G, F>
impl<P, G, F> Serialize for HagerZhangLineSearch<P, G, F>
Source§impl<P, G, O, F> Solver<O, IterState<P, G, (), (), (), F>> for HagerZhangLineSearch<P, G, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + ArgminDot<G, F> + ArgminScaledAdd<G, F, P>,
G: Clone + ArgminDot<G, F>,
F: ArgminFloat,
impl<P, G, O, F> Solver<O, IterState<P, G, (), (), (), F>> for HagerZhangLineSearch<P, G, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + ArgminDot<G, F> + ArgminScaledAdd<G, F, P>,
G: Clone + ArgminDot<G, F>,
F: ArgminFloat,
Source§fn init(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), (), (), F>,
) -> Result<(IterState<P, G, (), (), (), F>, Option<KV>), Error>
fn init( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), (), (), F>, ) -> Result<(IterState<P, G, (), (), (), F>, Option<KV>), Error>
Source§fn next_iter(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), (), (), F>,
) -> Result<(IterState<P, G, (), (), (), F>, Option<KV>), Error>
fn next_iter( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), (), (), F>, ) -> Result<(IterState<P, G, (), (), (), F>, Option<KV>), Error>
state and optionally a KV which holds key-value pairs used in
Observers.Source§fn terminate(
&mut self,
_state: &IterState<P, G, (), (), (), F>,
) -> TerminationStatus
fn terminate( &mut self, _state: &IterState<P, G, (), (), (), F>, ) -> TerminationStatus
terminate_internal. Read moreSource§fn terminate_internal(&mut self, state: &I) -> TerminationStatus
fn terminate_internal(&mut self, state: &I) -> TerminationStatus
Auto Trait Implementations§
impl<P, G, F> Freeze for HagerZhangLineSearch<P, G, F>
impl<P, G, F> RefUnwindSafe for HagerZhangLineSearch<P, G, F>
impl<P, G, F> Send for HagerZhangLineSearch<P, G, F>
impl<P, G, F> Sync for HagerZhangLineSearch<P, G, F>
impl<P, G, F> Unpin for HagerZhangLineSearch<P, G, F>
impl<P, G, F> UnwindSafe for HagerZhangLineSearch<P, G, F>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.