Struct argmin::solver::quasinewton::SR1TrustRegion
source · pub struct SR1TrustRegion<R, F> { /* private fields */ }
Expand description
§SR1 Trust region method
A Quasi-Newton method which uses symmetric rank 1 (SR1) updating of the Hessian in a trust region framework. An initial parameter vector must be provided, initial cost, gradient and Hessian are optional and will be computed if not provided. Requires a trust region sub problem.
§Requirements on the optimization problem
The optimization problem is required to implement CostFunction
, Gradient
and
Hessian
.
§Reference
Jorge Nocedal and Stephen J. Wright (2006). Numerical Optimization. Springer. ISBN 0-387-30303-0.
Implementations§
source§impl<R, F> SR1TrustRegion<R, F>where
F: ArgminFloat,
impl<R, F> SR1TrustRegion<R, F>where
F: ArgminFloat,
sourcepub fn new(subproblem: R) -> Self
pub fn new(subproblem: R) -> Self
Construct a new instance of SR1TrustRegion
§Example
let subproblem = argmin::solver::trustregion::Steihaug::new().with_max_iters(20);
let sr1: SR1TrustRegion<_, f64> = SR1TrustRegion::new(subproblem);
sourcepub fn with_denominator_factor(
self,
denominator_factor: F,
) -> Result<Self, Error>
pub fn with_denominator_factor( self, denominator_factor: F, ) -> Result<Self, Error>
Set denominator factor
If the denominator of the update is below the denominator_factor
(scaled with other
factors derived from the parameter vectors and the gradients), then the update of the
inverse Hessian will be skipped.
Must be in (0, 1)
and defaults to 1e-8
.
§Example
let sr1: SR1TrustRegion<_, f64> = SR1TrustRegion::new(subproblem).with_denominator_factor(1e-7)?;
sourcepub fn with_radius(self, radius: F) -> Self
pub fn with_radius(self, radius: F) -> Self
Set initial radius
Defaults to 1.0.
§Example
let sr1: SR1TrustRegion<_, f64> = SR1TrustRegion::new(subproblem).with_radius(2.0);
sourcepub fn with_eta(self, eta: F) -> Result<Self, Error>
pub fn with_eta(self, eta: F) -> Result<Self, Error>
Set eta
A step is taken if the actual reduction over the predicted reduction exceeds eta. Must be in (0, 10^-3) and defaults to 0.5 * 10^-3.
§Example
let sr1: SR1TrustRegion<_, f64> = SR1TrustRegion::new(subproblem).with_eta(10e-4)?;
sourcepub fn with_tolerance_grad(self, tol_grad: F) -> Result<Self, Error>
pub fn with_tolerance_grad(self, tol_grad: F) -> Result<Self, Error>
The algorithm stops if the norm of the gradient is below tol_grad
.
The provided value must be non-negative. Defaults to 10^-3
.
§Example
let sr1: SR1TrustRegion<_, f64> = SR1TrustRegion::new(subproblem).with_tolerance_grad(1e-6)?;
Trait Implementations§
source§impl<R: Clone, F: Clone> Clone for SR1TrustRegion<R, F>
impl<R: Clone, F: Clone> Clone for SR1TrustRegion<R, F>
source§fn clone(&self) -> SR1TrustRegion<R, F>
fn clone(&self) -> SR1TrustRegion<R, F>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'de, R, F> Deserialize<'de> for SR1TrustRegion<R, F>where
R: Deserialize<'de>,
F: Deserialize<'de>,
impl<'de, R, F> Deserialize<'de> for SR1TrustRegion<R, F>where
R: Deserialize<'de>,
F: Deserialize<'de>,
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<R, F> Serialize for SR1TrustRegion<R, F>
impl<R, F> Serialize for SR1TrustRegion<R, F>
source§impl<O, R, P, G, B, F> Solver<O, IterState<P, G, (), B, (), F>> for SR1TrustRegion<R, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G> + Hessian<Param = P, Hessian = B>,
P: Clone + ArgminSub<P, P> + ArgminAdd<P, P> + ArgminDot<P, F> + ArgminDot<P, B> + ArgminL2Norm<F> + ArgminZeroLike,
G: Clone + ArgminL2Norm<F> + ArgminDot<P, F> + ArgminSub<G, P>,
B: Clone + ArgminDot<P, P> + ArgminAdd<B, B> + ArgminMul<F, B>,
R: Clone + TrustRegionRadius<F> + Solver<O, IterState<P, G, (), B, (), F>>,
F: ArgminFloat + ArgminL2Norm<F>,
impl<O, R, P, G, B, F> Solver<O, IterState<P, G, (), B, (), F>> for SR1TrustRegion<R, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G> + Hessian<Param = P, Hessian = B>,
P: Clone + ArgminSub<P, P> + ArgminAdd<P, P> + ArgminDot<P, F> + ArgminDot<P, B> + ArgminL2Norm<F> + ArgminZeroLike,
G: Clone + ArgminL2Norm<F> + ArgminDot<P, F> + ArgminSub<G, P>,
B: Clone + ArgminDot<P, P> + ArgminAdd<B, B> + ArgminMul<F, B>,
R: Clone + TrustRegionRadius<F> + Solver<O, IterState<P, G, (), B, (), F>>,
F: ArgminFloat + ArgminL2Norm<F>,
source§fn init(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), B, (), F>,
) -> Result<(IterState<P, G, (), B, (), F>, Option<KV>), Error>
fn init( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), B, (), F>, ) -> Result<(IterState<P, G, (), B, (), F>, Option<KV>), Error>
source§fn next_iter(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), B, (), F>,
) -> Result<(IterState<P, G, (), B, (), F>, Option<KV>), Error>
fn next_iter( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), B, (), F>, ) -> Result<(IterState<P, G, (), B, (), 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, (), B, (), F>,
) -> TerminationStatus
fn terminate( &mut self, state: &IterState<P, G, (), B, (), 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<R, F> Freeze for SR1TrustRegion<R, F>
impl<R, F> RefUnwindSafe for SR1TrustRegion<R, F>where
F: RefUnwindSafe,
R: RefUnwindSafe,
impl<R, F> Send for SR1TrustRegion<R, F>
impl<R, F> Sync for SR1TrustRegion<R, F>
impl<R, F> Unpin for SR1TrustRegion<R, F>
impl<R, F> UnwindSafe for SR1TrustRegion<R, F>where
F: UnwindSafe,
R: UnwindSafe,
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
§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.