pub enum Solver {
Arc,
Bfgs,
Efs,
HybridEfs,
}Expand description
Which solver algorithm to use for the outer optimization.
Variants§
Arc
Adaptive Regularized Cubic; fastest convergence, requires Hessian.
Bfgs
BFGS; gradient only, builds a dense curvature approximation.
Efs
Extended Fellner-Schall; multiplicative fixed-point iteration. Only valid when all hyperparameter coordinates are penalty-like. Needs no gradient or Hessian — only traces tr(H^{-1} A_k) and Frobenius norms from the inner solution.
HybridEfs
Hybrid EFS + preconditioned gradient.
Used when ψ (design-moving) coordinates are present alongside ρ (penalty-like) coordinates. Combines:
- Standard EFS multiplicative fixed-point steps for ρ coords
- Safeguarded preconditioned gradient steps for ψ coords:
Δψ = -α G⁺ g_ψwhereG_{de} = tr(H⁻¹ B_d H⁻¹ B_e)
This hybrid exists because no EFS-type fixed-point iteration can
guarantee convergence for indefinite B_ψ (proven by counterexample
in response.md Section 2). The key structural property that EFS
needs — H^{-1/2} B_d H^{-1/2} ≽ 0 plus parameter-independent
nullspace — holds for penalty-like coords but fails for
design-moving coords where B_ψ has mixed inertia.
The preconditioned gradient uses the same trace Gram matrix that EFS already computes, so the cost is O(1) H⁻¹ solves per iteration (same as pure EFS), compared to O(dim(θ)) for full BFGS.
Trait Implementations§
impl Copy for Solver
impl Eq for Solver
impl StructuralPartialEq for Solver
Auto Trait Implementations§
impl Freeze for Solver
impl RefUnwindSafe for Solver
impl Send for Solver
impl Sync for Solver
impl Unpin for Solver
impl UnsafeUnpin for Solver
impl UnwindSafe for Solver
Blanket Implementations§
impl<T> Allocation for T
impl<T> Boilerplate for T
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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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.