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
sourceimpl<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 demoninator_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
sourceimpl<'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>,
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<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> + ArgminNorm<F> + ArgminMul<F, P>,
G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminNorm<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> + ArgminNorm<F> + ArgminMul<F, P>,
G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminNorm<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,
sourcefn 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>
Initializes the algorithm. Read more
sourcefn 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>
sourcefn terminate(&mut self, state: &IterState<P, G, (), H, F>) -> TerminationReason
fn terminate(&mut self, state: &IterState<P, G, (), H, F>) -> TerminationReason
Used to implement stopping criteria, in particular criteria which are not covered by
(terminate_internal
. Read more
sourcefn terminate_internal(&mut self, state: &I) -> TerminationReason
fn terminate_internal(&mut self, state: &I) -> TerminationReason
Checks whether basic termination reasons apply. Read more
Auto Trait Implementations
impl<L, F> RefUnwindSafe for SR1<L, F> where
F: RefUnwindSafe,
L: RefUnwindSafe,
impl<L, F> Send for SR1<L, F> where
F: Send,
L: Send,
impl<L, F> Sync for SR1<L, F> where
F: Sync,
L: Sync,
impl<L, F> Unpin for SR1<L, F> where
F: Unpin,
L: Unpin,
impl<L, F> UnwindSafe for SR1<L, F> where
F: UnwindSafe,
L: 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