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