Struct argmin::solver::linesearch::MoreThuenteLineSearch
source · [−]pub struct MoreThuenteLineSearch<P, G, F> { /* private fields */ }
Expand description
More-Thuente line search
The More-Thuente line search is a method which finds an appropriate step length from a starting point and a search direction. This point obeys the strong Wolfe conditions.
With the method with_c
the scaling factors for the
sufficient decrease condition and the curvature condition can be supplied. By default they are
set to c1 = 1e-4
and c2 = 0.9
.
Bounds on the range where step lengths are being searched for can be set with
with_bounds
which accepts a lower and an upper bound.
Both values need to be non-negative and lower < upper
.
One of the reasons for the algorithm to terminate is when the the relative width of the
uncertainty interval is smaller than a given tolerance (default: 1e-10
). This tolerance can
be set via with_width_tolerance
and must be
non-negative.
TODO: Add missing stopping criteria!
Requirements on the optimization problem
The optimization problem is required to implement CostFunction
and Gradient
.
References
This implementation follows the excellent MATLAB implementation of Dianne P. O’Leary at http://www.cs.umd.edu/users/oleary/software/
Jorge J. More and David J. Thuente. “Line search algorithms with guaranteed sufficient decrease.” ACM Trans. Math. Softw. 20, 3 (September 1994), 286-307. DOI: https://doi.org/10.1145/192115.192132
Implementations
sourceimpl<P, G, F> MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
impl<P, G, F> MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
sourcepub fn new() -> Self
pub fn new() -> Self
Construct a new instance of MoreThuenteLineSearch
Example
let mtls: MoreThuenteLineSearch<Vec<f64>, Vec<f64>, f64> = MoreThuenteLineSearch::new();
sourcepub fn with_c(self, c1: F, c2: F) -> Result<Self, Error>
pub fn with_c(self, c1: F, c2: F) -> Result<Self, Error>
Set the constants c1 and c2 for the sufficient decrease and curvature conditions,
respectively. 0 < c1 < c2 < 1
must hold.
The default values are c1 = 1e-4
and c2 = 0.9
.
Example
let mtls: MoreThuenteLineSearch<Vec<f64>, Vec<f64>, f64> =
MoreThuenteLineSearch::new().with_c(1e-3, 0.8)?;
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 are step_min = sqrt(EPS)
and step_max = INF
.
step_min
must be smaller than step_max
.
Example
let mtls: MoreThuenteLineSearch<Vec<f64>, Vec<f64>, f64> =
MoreThuenteLineSearch::new().with_bounds(1e-6, 10.0)?;
sourcepub fn with_width_tolerance(self, xtol: F) -> Result<Self, Error>
pub fn with_width_tolerance(self, xtol: F) -> Result<Self, Error>
Set relative tolerance on width of uncertainty interval
The algorithm terminates when the relative width of the uncertainty interval is below the supplied tolerance.
Must be non-negative and defaults to 1e-10
.
Example
let mtls: MoreThuenteLineSearch<Vec<f64>, Vec<f64>, f64> =
MoreThuenteLineSearch::new().with_width_tolerance(1e-9)?;
Trait Implementations
sourceimpl<P: Clone, G: Clone, F: Clone> Clone for MoreThuenteLineSearch<P, G, F>
impl<P: Clone, G: Clone, F: Clone> Clone for MoreThuenteLineSearch<P, G, F>
sourcefn clone(&self) -> MoreThuenteLineSearch<P, G, F>
fn clone(&self) -> MoreThuenteLineSearch<P, G, F>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<P, G, F> Default for MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
impl<P, G, F> Default for MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
sourceimpl<'de, P, G, F> Deserialize<'de> for MoreThuenteLineSearch<P, G, F> where
P: Deserialize<'de>,
G: Deserialize<'de>,
F: Deserialize<'de>,
impl<'de, P, G, F> Deserialize<'de> for MoreThuenteLineSearch<P, G, F> where
P: Deserialize<'de>,
G: Deserialize<'de>,
F: Deserialize<'de>,
sourcefn 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>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl<P, G, F> LineSearch<P, F> for MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
impl<P, G, F> LineSearch<P, F> for MoreThuenteLineSearch<P, G, F> where
F: ArgminFloat,
sourcefn search_direction(&mut self, search_direction: P)
fn search_direction(&mut self, search_direction: P)
Set search direction
sourcefn initial_step_length(&mut self, alpha: F) -> Result<(), Error>
fn initial_step_length(&mut self, alpha: F) -> Result<(), Error>
Set initial alpha value
sourceimpl<P, G, F> Serialize for MoreThuenteLineSearch<P, G, F> where
P: Serialize,
G: Serialize,
F: Serialize,
impl<P, G, F> Serialize for MoreThuenteLineSearch<P, G, F> where
P: Serialize,
G: Serialize,
F: Serialize,
sourceimpl<P, G, O, F> Solver<O, IterState<P, G, (), (), F>> for MoreThuenteLineSearch<P, G, F> where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + SerializeAlias + ArgminDot<G, F> + ArgminScaledAdd<P, F, P>,
G: Clone + SerializeAlias + ArgminDot<P, F>,
F: ArgminFloat,
impl<P, G, O, F> Solver<O, IterState<P, G, (), (), F>> for MoreThuenteLineSearch<P, G, F> where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + SerializeAlias + ArgminDot<G, F> + ArgminScaledAdd<P, F, P>,
G: Clone + SerializeAlias + ArgminDot<P, F>,
F: ArgminFloat,
sourceconst NAME: &'static str = "More-Thuente Line search"
const NAME: &'static str = "More-Thuente Line search"
Name of the solver. Mainly used in Observers.
sourcefn 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>
Initializes the algorithm. Read more
sourcefn 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>
sourcefn terminate_internal(&mut self, state: &I) -> TerminationReason
fn terminate_internal(&mut self, state: &I) -> TerminationReason
Checks whether basic termination reasons apply. Read more
sourcefn terminate(&mut self, _state: &I) -> TerminationReason
fn terminate(&mut self, _state: &I) -> TerminationReason
Used to implement stopping criteria, in particular criteria which are not covered by
(terminate_internal
. Read more
Auto Trait Implementations
impl<P, G, F> RefUnwindSafe for MoreThuenteLineSearch<P, G, F> where
F: RefUnwindSafe,
G: RefUnwindSafe,
P: RefUnwindSafe,
impl<P, G, F> Send for MoreThuenteLineSearch<P, G, F> where
F: Send,
G: Send,
P: Send,
impl<P, G, F> Sync for MoreThuenteLineSearch<P, G, F> where
F: Sync,
G: Sync,
P: Sync,
impl<P, G, F> Unpin for MoreThuenteLineSearch<P, G, F> where
F: Unpin,
G: Unpin,
P: Unpin,
impl<P, G, F> UnwindSafe for MoreThuenteLineSearch<P, G, F> where
F: UnwindSafe,
G: UnwindSafe,
P: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more