tinyopt 700
Tinyopt, a lightweight, header only optimization library
Loading...
Searching...
No Matches
tinyopt::solvers::SolverGD< Gradient_t > Class Template Reference
Inheritance diagram for tinyopt::solvers::SolverGD< Gradient_t >:
tinyopt::solvers::SolverBase< VecX::Scalar, traits::params_trait< VecX >::Dims >

Public Types

using Base = SolverBase<typename Gradient_t::Scalar, traits::params_trait<Gradient_t>::Dims>
using Scalar = typename Gradient_t::Scalar
using Grad_t = Gradient_t
using H_t = std::nullptr_t
Public Types inherited from tinyopt::solvers::SolverBase< VecX::Scalar, traits::params_trait< VecX >::Dims >
using Scalar

Public Member Functions

 SolverGD (const Options &options={})
void InitWith (const Grad_t &g)
 Initialize solver with specific gradient and hessian.
void reset ()
 Reset the solver state and clear gradient & hessian.
template<int D = Dims, std::enable_if_t< D==Dynamic, int > = 0>
bool resize (int dims)
 Resize H and grad if needed, return true if they were resized.
template<int D = Dims, std::enable_if_t< D !=Dynamic, int > = 0>
bool resize (int dims=Dims)
 Resize H and grad if needed, return true if they were resized.
void clear ()
 Set gradient and hessian to 0s.
template<typename X_t>
bool ResizeIfNeeded (const X_t &x)
 Check whether we need to resize the system (gradient), return true if it did.
template<typename AccFunc>
auto GetAccFunc (const AccFunc &acc) const
 Ugly function to make sure the returned type is always a pair<scalar, scalar>...
template<typename X_t, typename AccFunc>
Scalar Evaluate (const X_t &x, const AccFunc &acc, bool save)
 Accumulate residuals and return the final error.
template<typename X_t, typename AccFunc>
bool Accumulate (const X_t &x, const AccFunc &acc)
 Accumulate residuals and update the gradient, returns true on success.
template<typename X_t, typename AccFunc>
bool Build (const X_t &x, const AccFunc &acc, bool resize_and_clear=true)
std::optional< Vector< Scalar, Dims > > Solve () const override
 Solve the linear system dx = -lr * grad, returns nullopt on failure.
Index dims () const override
const Grad_t & Gradient () const
Grad_t & Gradient ()
Scalar GradientNorm () const
Scalar GradientSquaredNorm () const
Public Member Functions inherited from tinyopt::solvers::SolverBase< VecX::Scalar, traits::params_trait< VecX >::Dims >
 SolverBase (const Options &options={})
bool Clamp (Grad_t &g, Scalar minmax) const
 Clamp the gradient 'g' to within [-minmax, minmax], if minmax is not 0. Returns true if 'g' was clamped.
void NormalizeCost (Cost &cost)
 Eventually normalize the cost.
virtual void GoodStep (Scalar=0.0f)
virtual void BadStep (Scalar=0.0f)
virtual void FailedStep ()
virtual void Rebuild (bool)
virtual std::string stateAsString () const
const Cost & cost () const

Public Attributes

const Options options_

Static Public Attributes

static constexpr bool IsNLLS = false
static constexpr bool FirstOrder = true
static constexpr Index Dims = traits::params_trait<Gradient_t>::Dims
Static Public Attributes inherited from tinyopt::solvers::SolverBase< VecX::Scalar, traits::params_trait< VecX >::Dims >
static constexpr Index Dims

Protected Attributes

Grad_t grad_
Protected Attributes inherited from tinyopt::solvers::SolverBase< VecX::Scalar, traits::params_trait< VecX >::Dims >
const Options options_
Cost cost_

Member Function Documentation

◆ Build()

template<typename Gradient_t = VecX>
template<typename X_t, typename AccFunc>
bool tinyopt::solvers::SolverGD< Gradient_t >::Build ( const X_t & x,
const AccFunc & acc,
bool resize_and_clear = true )
inline

Build the gradient and hessian by accumulating residuals and their jacobians Returns true on success

◆ dims()

template<typename Gradient_t = VecX>
Index tinyopt::solvers::SolverGD< Gradient_t >::dims ( ) const
inlineoverridevirtual

◆ Solve()

template<typename Gradient_t = VecX>
std::optional< Vector< Scalar, Dims > > tinyopt::solvers::SolverGD< Gradient_t >::Solve ( ) const
inlineoverridevirtual

The documentation for this class was generated from the following file:
  • include/tinyopt/solvers/gd.h