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<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 + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminAdd<P, P> + ArgminDot<P, F> + ArgminDot<P, B> + ArgminL2Norm<F> + ArgminZeroLike,
G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminL2Norm<F> + ArgminDot<P, F> + ArgminSub<G, P>,
B: Clone + SerializeAlias + DeserializeOwnedAlias + 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 + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminAdd<P, P> + ArgminDot<P, F> + ArgminDot<P, B> + ArgminL2Norm<F> + ArgminZeroLike, G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminL2Norm<F> + ArgminDot<P, F> + ArgminSub<G, P>, B: Clone + SerializeAlias + DeserializeOwnedAlias + 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 more