pub struct RiemannianLBFGS {
pub history: usize,
pub step_size: f64,
pub max_iter: usize,
pub grad_tol: f64,
}Fields§
§history: usize§step_size: f64§max_iter: usize§grad_tol: f64Implementations§
Source§impl RiemannianLBFGS
impl RiemannianLBFGS
Sourcepub fn minimize(
&self,
manifold: &dyn RiemannianManifold,
objective: &mut dyn RiemannianObjective,
initial: ArrayView1<'_, f64>,
) -> GeometryResult<Array1<f64>>
pub fn minimize( &self, manifold: &dyn RiemannianManifold, objective: &mut dyn RiemannianObjective, initial: ArrayView1<'_, f64>, ) -> GeometryResult<Array1<f64>>
Riemannian L-BFGS with a backtracking-and-expansion Armijo line search.
The search starts at the user-supplied step_size (a hint, not a hard
cap) and first expands by doubling while the Armijo sufficient-
decrease condition continues to hold and the objective is still
strictly improving. Once expansion stalls, it accepts the best step
it has seen so far; if even the initial trial violates Armijo, it
contracts by halving until Armijo holds or a safeguard floor is
reached. This makes the optimizer robust to mis-scaled step_size
inputs (including the Newton-natural α=1 that BFGS expects on
well-conditioned quadratics) without forcing the caller to retune
it, and preserves the secant pair (s, y) curvature condition so the
L-BFGS inverse-Hessian approximation stays SPD.
All inner products use the manifold metric g_x(·,·), and every secant
pair is parallel-transported into the current tangent space before it
enters the two-loop recursion, so the BFGS algebra never mixes vectors
living in different tangent spaces (the bug fixed in #616). The freshly
formed secant pair likewise transports the accepted step from the old
tangent space into the new one before pairing it with the gradient
difference, so both s and y live in T_{x_new}M.
Trait Implementations§
Source§impl Clone for RiemannianLBFGS
impl Clone for RiemannianLBFGS
Source§fn clone(&self) -> RiemannianLBFGS
fn clone(&self) -> RiemannianLBFGS
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RiemannianLBFGS
impl Debug for RiemannianLBFGS
Source§impl Default for RiemannianLBFGS
impl Default for RiemannianLBFGS
Source§impl PartialEq for RiemannianLBFGS
impl PartialEq for RiemannianLBFGS
Source§fn eq(&self, other: &RiemannianLBFGS) -> bool
fn eq(&self, other: &RiemannianLBFGS) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for RiemannianLBFGS
Auto Trait Implementations§
impl Freeze for RiemannianLBFGS
impl RefUnwindSafe for RiemannianLBFGS
impl Send for RiemannianLBFGS
impl Sync for RiemannianLBFGS
impl Unpin for RiemannianLBFGS
impl UnsafeUnpin for RiemannianLBFGS
impl UnwindSafe for RiemannianLBFGS
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§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).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.