E3: Riemannian Optimization for ETKDG
Module: sci_form::experimental::riemannianFeature flag: experimental-riemannian
Overview
Replaces the Euclidean BFGS optimizer in the embedding step with Riemannian L-BFGS over the manifold of fixed-rank positive semidefinite (PSD) matrices. Negative eigenvalues are eliminated by design, reducing the retry loop failure rate to zero.
Theory
PSD Manifold
The metric matrix
Retraction
The retraction maps a tangent vector back to the manifold:
where
Riemannian Gradient
The Euclidean gradient is projected to the tangent space:
For the Stiefel manifold:
L-BFGS on the Manifold
- Store
curvature pairs in the tangent space - Two-loop recursion with vector transport along geodesics
- Line search with Armijo condition along the manifold geodesic
API
use sci_form::experimental::riemannian::*;
// PSD projection
let (projected, n_neg) = project_psd(&matrix);
// Retraction
let retracted = retract_psd(&x, &tangent_vector, epsilon);
// Riemannian gradient
let rgrad = riemannian_gradient(&x, &euclidean_grad);
// Full L-BFGS optimization
let config = RiemannianConfig {
max_iter: 500,
tol: 1e-6,
memory: 5,
..Default::default()
};
let result = riemannian_lbfgs(&x0, &objective, &gradient, &config);
// result.x, result.iterations, result.converged, result.final_gradient_normConvergence
- Primary:
- Secondary: Maximum distance violation
Å - Fallback: Reverts to Euclidean BFGS + PSD projection if not converged in 500 iterations
Tests
cargo test --features experimental-riemannian --test regression -- test_riemannianCovers: PSD projection correctness, retraction stays on manifold, Riemannian gradient orthogonality, L-BFGS convergence on Rosenbrock and distance geometry objectives.