Struct argmin::solver::quasinewton::SR1
source · pub struct SR1<L, F> { /* private fields */ }
Expand description
§Symmetric rank-one (SR1) method
This method currently has problems: https://github.com/argmin-rs/argmin/issues/221.
§Requirements on the optimization problem
The optimization problem is required to implement CostFunction
and Gradient
.
§Reference
Jorge Nocedal and Stephen J. Wright (2006). Numerical Optimization. Springer. ISBN 0-387-30303-0.
Implementations§
source§impl<L, F> SR1<L, F>where
F: ArgminFloat,
impl<L, F> SR1<L, F>where
F: ArgminFloat,
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: SR1<_, f64> = SR1::new(linesearch).with_denominator_factor(1e-7)?;
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 sqrt(EPSILON)
.
§Example
let sr1: SR1<_, f64> = SR1::new(linesearch).with_tolerance_grad(1e-6)?;
sourcepub fn with_tolerance_cost(self, tol_cost: F) -> Result<Self, Error>
pub fn with_tolerance_cost(self, tol_cost: F) -> Result<Self, Error>
Sets tolerance for the stopping criterion based on the change of the cost stopping criterion
The provided value must be non-negative. Defaults to EPSILON
.
§Example
let sr1: SR1<_, f64> = SR1::new(linesearch).with_tolerance_cost(1e-6)?;
Trait Implementations§
source§impl<'de, L, F> Deserialize<'de> for SR1<L, F>where
L: Deserialize<'de>,
F: Deserialize<'de>,
impl<'de, L, F> Deserialize<'de> for SR1<L, F>where
L: 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, L, P, G, H, F> Solver<O, IterState<P, G, (), H, (), F>> for SR1<L, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + ArgminSub<P, P> + ArgminDot<G, F> + ArgminDot<P, F> + ArgminDot<P, H> + ArgminL2Norm<F> + ArgminMul<F, P>,
G: Clone + ArgminSub<P, P> + ArgminL2Norm<F> + ArgminSub<G, G>,
H: ArgminDot<G, P> + ArgminDot<P, P> + ArgminAdd<H, H> + ArgminMul<F, H>,
L: Clone + LineSearch<P, F> + Solver<O, IterState<P, G, (), (), (), F>>,
F: ArgminFloat,
impl<O, L, P, G, H, F> Solver<O, IterState<P, G, (), H, (), F>> for SR1<L, F>where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + ArgminSub<P, P> + ArgminDot<G, F> + ArgminDot<P, F> + ArgminDot<P, H> + ArgminL2Norm<F> + ArgminMul<F, P>,
G: Clone + ArgminSub<P, P> + ArgminL2Norm<F> + ArgminSub<G, G>,
H: ArgminDot<G, P> + ArgminDot<P, P> + ArgminAdd<H, H> + ArgminMul<F, H>,
L: Clone + LineSearch<P, F> + Solver<O, IterState<P, G, (), (), (), F>>,
F: ArgminFloat,
source§fn init(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, (), F>,
) -> Result<(IterState<P, G, (), H, (), F>, Option<KV>), Error>
fn init( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), H, (), F>, ) -> Result<(IterState<P, G, (), H, (), F>, Option<KV>), Error>
source§fn next_iter(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, (), F>,
) -> Result<(IterState<P, G, (), H, (), F>, Option<KV>), Error>
fn next_iter( &mut self, problem: &mut Problem<O>, state: IterState<P, G, (), H, (), F>, ) -> Result<(IterState<P, G, (), H, (), 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, (), H, (), F>,
) -> TerminationStatus
fn terminate( &mut self, state: &IterState<P, G, (), H, (), 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<L, F> Freeze for SR1<L, F>
impl<L, F> RefUnwindSafe for SR1<L, F>where
F: RefUnwindSafe,
L: RefUnwindSafe,
impl<L, F> Send for SR1<L, F>
impl<L, F> Sync for SR1<L, F>
impl<L, F> Unpin for SR1<L, F>
impl<L, F> UnwindSafe for SR1<L, F>where
F: UnwindSafe,
L: 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.