Compute automatically a gradient with finite differences. More...
#include <roboptim/core/fwd.hh>
Public Member Functions | |
ROBOPTIM_DIFFERENTIABLE_FUNCTION_FWD_TYPEDEFS_ (GenericDifferentiableFunction< T >) | |
GenericFiniteDifferenceGradient (const boost::shared_ptr< const GenericFunction< T > > &f, value_type e=finiteDifferenceEpsilon) | |
Instantiate a finite differences gradient. More... | |
GenericFiniteDifferenceGradient (const GenericFunction< T > &f, value_type e=finiteDifferenceEpsilon) | |
Instantiate a finite differences gradient. More... | |
~GenericFiniteDifferenceGradient () | |
virtual std::ostream & | print (std::ostream &o) const |
Display the function on the specified output stream. More... | |
Public Member Functions inherited from roboptim::GenericDifferentiableFunction< T > | |
ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ (GenericFunction< T >) | |
ROBOPTIM_ADD_FLAG (ROBOPTIM_IS_DIFFERENTIABLE) | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (gradient) | |
Gradient type. More... | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (jacobian) | |
Jacobian type. More... | |
size_type | gradientSize () const |
Return the gradient size. More... | |
jacobianSize_t | jacobianSize () const |
Return the jacobian size as a pair. More... | |
bool | isValidGradient (const_gradient_ref gradient) const |
Check if the gradient is valid (check size). More... | |
bool | isValidJacobian (const_jacobian_ref jacobian) const |
Check if the jacobian is valid (check sizes). More... | |
jacobian_t | jacobian (const_argument_ref argument) const |
Computes the jacobian. More... | |
void | jacobian (jacobian_ref jacobian, const_argument_ref argument) const |
Computes the jacobian. More... | |
gradient_t | gradient (const_argument_ref argument, size_type functionId=0) const |
Computes the gradient. More... | |
void | gradient (gradient_ref gradient, const_argument_ref argument, size_type functionId=0) const |
Computes the gradient. More... | |
Public Member Functions inherited from roboptim::GenericFunction< T > | |
ROBOPTIM_DEFINE_FLAG_TYPE () | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (vector) | |
Basic (column) vector type. More... | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (rowVector) | |
Row vector type. More... | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (matrix) | |
Basic matrix type. More... | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (result) | |
Type of a function evaluation result. More... | |
ROBOPTIM_GENERATE_TRAITS_REFS_ (argument) | |
Type of a function evaluation argument. More... | |
bool | isValidResult (const_result_ref result) const |
Check the given result size is valid. More... | |
GenericFunction< T >::size_type | inputSize () const |
Return the input size (i.e. More... | |
GenericFunction< T >::size_type | outputSize () const |
Return the output size (i.e. More... | |
virtual | ~GenericFunction () |
Trivial destructor. More... | |
result_t | operator() (const_argument_ref argument) const |
Evaluate the function at a specified point. More... | |
void | operator() (result_ref result, const_argument_ref argument) const |
Evaluate the function at a specified point. More... | |
const std::string & | getName () const |
Get function name. More... | |
virtual flag_t | getFlags () const |
Get the type-checking flag. More... | |
template<typename F > | |
void | foreach (const discreteInterval_t interval, F functor) |
template<typename F > | |
void | foreach (const interval_t interval, const size_type n, F functor) |
template<class ExpectedType > | |
ExpectedType * | castInto (bool check=false) |
Cast function to ExpectedType. More... | |
template<class ExpectedType > | |
const ExpectedType * | castInto (bool check=false) const |
Cast function to ExpectedType (const). More... | |
template<class ExpectedType > | |
bool | asType () const |
Fonction type checking. More... | |
Protected Member Functions | |
virtual void | impl_compute (result_ref, const_argument_ref) const |
Function evaluation. More... | |
virtual void | impl_gradient (gradient_ref, const_argument_ref argument, size_type=0) const |
Gradient evaluation. More... | |
virtual void | impl_jacobian (jacobian_ref jacobian, const_argument_ref argument) const |
Jacobian evaluation. More... | |
std::string | generateName (const GenericFunction< T > &adaptee) const |
Protected Member Functions inherited from roboptim::GenericDifferentiableFunction< T > | |
GenericDifferentiableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) | |
Concrete class constructor should call this constructor. More... | |
template<> | |
void | impl_jacobian (jacobian_ref jacobian, const_argument_ref argument) const |
Protected Member Functions inherited from roboptim::GenericFunction< T > | |
GenericFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) | |
Concrete class constructor should call this constructor. More... | |
Protected Attributes | |
const boost::shared_ptr< const GenericFunction< T > > | adaptee_ |
Shared pointer to the wrapped function. More... | |
const value_type | epsilon_ |
argument_t | xEps_ |
Additional Inherited Members | |
Public Types inherited from roboptim::GenericDifferentiableFunction< T > | |
typedef std::pair< size_type, size_type > | jacobianSize_t |
Jacobian size type (pair of values). More... | |
Static Public Member Functions inherited from roboptim::GenericFunction< T > | |
static value_type | epsilon () |
Get the value of the machine epsilon, useful for floating types comparison. More... | |
static value_type | infinity () |
Get the value that symbolizes positive infinity. More... | |
static interval_t | makeInterval (value_type l, value_type u) |
Construct an interval from a lower and upper bound. More... | |
static interval_t | makeInfiniteInterval () |
Construct an infinite interval. More... | |
static interval_t | makeLowerInterval (value_type l) |
Construct an interval from a lower bound. More... | |
static interval_t | makeUpperInterval (value_type u) |
Construct an interval from an upper bound. More... | |
static value_type | getLowerBound (const interval_t &interval) |
Get the lower bound of an interval. More... | |
static value_type | getUpperBound (const interval_t &interval) |
Get the upper bound of an interval. More... | |
static discreteInterval_t | makeDiscreteInterval (value_type min, value_type max, value_type step) |
Construct a discrete interval. More... | |
static discreteInterval_t | makeDiscreteInterval (interval_t interval, value_type step) |
Construct a discrete interval. More... | |
static value_type | getLowerBound (const discreteInterval_t &interval) |
Get the lower bound of a discrete interval. More... | |
static value_type | getUpperBound (const discreteInterval_t &interval) |
Get the upper bound of a discrete interval. More... | |
static value_type | getStep (const discreteInterval_t &interval) |
Get the upper step of a discrete interval. More... | |
template<typename F > | |
static void | foreach (const discreteInterval_t interval, F functor) |
Iterate on an interval. More... | |
template<typename F > | |
static void | foreach (const interval_t interval, const size_type n, F functor) |
Iterate on an interval. More... | |
Static Public Attributes inherited from roboptim::GenericFunction< T > | |
static const flag_t | flags = ROBOPTIM_IS_FUNCTION |
Flag representing the Roboptim Function type. More... | |
Compute automatically a gradient with finite differences.
Finite difference gradient is a method to approximate a function's gradient. It is particularly useful in RobOptim to avoid the need to compute the analytical gradient manually.
This class takes a Function as its input and wraps it into a derivable function.
The one dimensional formula with the Simple policy is:
\[f'(x)\approx {f(x+\epsilon)-f(x)\over \epsilon}\]
where \(\epsilon\) is a constant given when calling the class constructor.
For sparse functions, the default behavior is to treat all values as nonzeros. That way, the function can be used in an optimization problem (sparse solvers expect the full sparse pattern during the initialization). The downside to this approach is the lower performance, as the Jacobian matrix will be a dense matrix treated as a sparse one.
roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >::GenericFiniteDifferenceGradient | ( | const boost::shared_ptr< const GenericFunction< T > > & | f, |
value_type | e = finiteDifferenceEpsilon |
||
) |
Instantiate a finite differences gradient.
Instantiate a derivable function that will wrap a non derivable function and compute automatically its gradient using finite differences.
f | shared pointer to the function that will be wrapped. |
e | epsilon used in finite difference computation |
roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >::GenericFiniteDifferenceGradient | ( | const GenericFunction< T > & | f, |
value_type | e = finiteDifferenceEpsilon |
||
) |
Instantiate a finite differences gradient.
WARNING: prefer the shared_ptr alternative if possible.
Instantiate a derivable function that will wrap a non derivable function and compute automatically its gradient using finite differences.
f | function that will e wrapped |
e | epsilon used in finite difference computation |
roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >::~GenericFiniteDifferenceGradient | ( | ) |
|
protected |
References roboptim::GenericFunction< T >::getName().
|
protectedvirtual |
Function evaluation.
Evaluate the function, has to be implemented in concrete classes.
result | result will be stored in this vector |
argument | point at which the function will be evaluated |
Implements roboptim::GenericFunction< T >.
|
protectedvirtual |
Gradient evaluation.
Compute the gradient, has to be implemented in concrete classes. The gradient is computed for a specific sub-function whose id is passed through the functionId argument.
gradient | gradient will be stored in this vector |
argument | point where the gradient will be computed |
functionId | evaluated function id in the split representation |
Implements roboptim::GenericDifferentiableFunction< T >.
|
protectedvirtual |
Jacobian evaluation.
Computes the jacobian, can be overridden by concrete classes. The default behavior is to compute the jacobian from the gradient.
jacobian | jacobian will be store in this argument |
arg | point where the jacobian will be computed |
Reimplemented from roboptim::GenericDifferentiableFunction< T >.
|
virtual |
Display the function on the specified output stream.
o | output stream used for display |
Reimplemented from roboptim::GenericDifferentiableFunction< T >.
References roboptim::decindent(), roboptim::iendl(), and roboptim::incindent().
roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >::ROBOPTIM_DIFFERENTIABLE_FUNCTION_FWD_TYPEDEFS_ | ( | GenericDifferentiableFunction< T > | ) |
|
protected |
Shared pointer to the wrapped function.
|
protected |
|
mutableprotected |