|
occ
|
Trust Region Newton optimizer with Steihaug-CG subproblem solver. More...
#include <trust_region.h>
Public Types | |
| using | Objective = std::function< std::pair< double, Vec >(const Vec &)> |
| Objective function: returns (value, gradient) | |
| using | HessianFunc = std::function< Mat(const Vec &)> |
| Hessian function: returns Hessian matrix. | |
| using | HessianVectorProduct = std::function< Vec(const Vec &, const Vec &)> |
| Hessian-vector product: returns H*v (more efficient for large problems) | |
| using | Callback = std::function< bool(int, const Vec &, double, const Vec &)> |
| Iteration callback: (iteration, x, value, gradient) -> continue? | |
| using | GradObjective = std::function< double(const Vec &, Vec &)> |
| Gradient-only objective: f(x, grad) -> energy (same signature as LBFGS/MSTMIN) | |
Public Member Functions | |
| TrustRegion (const TrustRegionSettings &settings={}) | |
| TrustRegionResult | minimize (Objective objective, HessianFunc hessian, const Vec &x0, Callback callback=nullptr) |
| Minimize using explicit Hessian matrix. | |
| TrustRegionResult | minimize_hvp (Objective objective, HessianVectorProduct hvp, const Vec &x0) |
| Minimize using Hessian-vector products (matrix-free). | |
| TrustRegionResult | minimize_bfgs (GradObjective f, const Vec &x0, Callback callback=nullptr) |
| Minimize using BFGS Hessian approximation (gradient-only). | |
Trust Region Newton optimizer with Steihaug-CG subproblem solver.
This is a robust second-order optimization method that:
The trust region subproblem is: min_p g^T p + 0.5 p^T H p subject to ||p|| <= delta
Usage:
| using occ::mults::TrustRegion::Callback = std::function<bool(int, const Vec&, double, const Vec&)> |
Iteration callback: (iteration, x, value, gradient) -> continue?
| using occ::mults::TrustRegion::GradObjective = std::function<double(const Vec&, Vec&)> |
Gradient-only objective: f(x, grad) -> energy (same signature as LBFGS/MSTMIN)
| using occ::mults::TrustRegion::HessianFunc = std::function<Mat(const Vec&)> |
Hessian function: returns Hessian matrix.
| using occ::mults::TrustRegion::HessianVectorProduct = std::function<Vec(const Vec&, const Vec&)> |
Hessian-vector product: returns H*v (more efficient for large problems)
| using occ::mults::TrustRegion::Objective = std::function<std::pair<double, Vec>(const Vec&)> |
Objective function: returns (value, gradient)
|
explicit |
| TrustRegionResult occ::mults::TrustRegion::minimize | ( | Objective | objective, |
| HessianFunc | hessian, | ||
| const Vec & | x0, | ||
| Callback | callback = nullptr |
||
| ) |
Minimize using explicit Hessian matrix.
| objective | Function returning (value, gradient) |
| hessian | Function returning Hessian matrix |
| x0 | Initial parameters |
| callback | Optional iteration callback (return false to stop) |
| TrustRegionResult occ::mults::TrustRegion::minimize_bfgs | ( | GradObjective | f, |
| const Vec & | x0, | ||
| Callback | callback = nullptr |
||
| ) |
Minimize using BFGS Hessian approximation (gradient-only).
Starts from identity Hessian, applies BFGS rank-2 updates each accepted step. No analytic Hessian needed — same interface as LBFGS.
| f | Gradient-only objective: f(x, grad) -> energy |
| x0 | Initial parameters |
| callback | Optional iteration callback |
| TrustRegionResult occ::mults::TrustRegion::minimize_hvp | ( | Objective | objective, |
| HessianVectorProduct | hvp, | ||
| const Vec & | x0 | ||
| ) |
Minimize using Hessian-vector products (matrix-free).
| objective | Function returning (value, gradient) |
| hvp | Function returning H*v given x and v |
| x0 | Initial parameters |