Define an abstract derivable function ( \(C^1\)). More...
#include <roboptim/core/fwd.hh>
Public Types | |
typedef std::pair< size_type, size_type > | jacobianSize_t |
Jacobian size type (pair of values). More... | |
Public Types inherited from roboptim::GenericFunction< T > | |
typedef T | traits_t |
Traits type. More... | |
typedef GenericFunctionTraits < T >::value_type | value_type |
Values type. More... | |
typedef GenericFunctionTraits < T >::size_type | size_type |
Size type. More... | |
typedef std::string | name_t |
Type of a function argument name. More... | |
typedef std::vector< name_t > | names_t |
Type of a vector of function argument names. More... | |
typedef std::pair< value_type, value_type > | interval_t |
Interval type (lower, upper). More... | |
typedef std::vector< interval_t > | intervals_t |
Vector of intervals. More... | |
typedef boost::tuple < value_type, value_type, value_type > | discreteInterval_t |
Types representing a discrete interval. More... | |
Public Member Functions | |
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... | |
virtual std::ostream & | print (std::ostream &o) const |
Display the function on the specified output stream. 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 | |
GenericDifferentiableFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) | |
Concrete class constructor should call this constructor. More... | |
virtual void | impl_jacobian (jacobian_ref jacobian, const_argument_ref arg) const |
Jacobian evaluation. More... | |
virtual void | impl_gradient (gradient_ref gradient, const_argument_ref argument, size_type functionId=0) const =0 |
Gradient evaluation. 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... | |
virtual void | impl_compute (result_ref result, const_argument_ref argument) const =0 |
Function evaluation. More... | |
Additional Inherited Members | |
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... | |
Define an abstract derivable function ( \(C^1\)).
A derivable function which provides a way to compute its gradient/jacobian.
\[ f : x \rightarrow f(x) \]
\(x \in \mathbb{R}^n\), \(f(x) \in \mathbb{R}^m\) where \(n\) is the input size and \(m\) is the output size.
Gradient computation is done through the impl_gradient method that has to implemented by the concrete class inheriting this class.
Jacobian computation is automatically done by concatenating gradients together, however this naive implementation can be overridden by the concrete class.
The gradient of a \(\mathbb{R}^n \rightarrow \mathbb{R}^m\) function where \(n > 1\) and \(m > 1\) is a matrix. As this representation is costly, RobOptim considers these functions as \(m\) \(\mathbb{R}^n \rightarrow \mathbb{R}\) functions. Through that mechanism, gradients are always vectors and jacobian are always matrices. When the gradient or the jacobian has to be computed, one has to precise which of the \(m\) functions should be considered.
If \(m = 1\), then the function id must always be 0 and can be safely ignored in the gradient/jacobian computation. The class provides a default value for the function id so that these functions do not have to explicitly set the function id.
typedef std::pair<size_type, size_type> roboptim::GenericDifferentiableFunction< T >::jacobianSize_t |
Jacobian size type (pair of values).
|
protected |
Concrete class constructor should call this constructor.
inputSize | input size (argument size) |
outputSize | output size (result size) |
name | function's name |
|
inline |
Computes the gradient.
argument | point at which the gradient will be computed |
functionId | function id in split representation |
Referenced by roboptim::checkGradient(), and roboptim::checkGradientAndThrow().
|
inline |
Computes the gradient.
Program will abort if the gradient size is wrong before or after the gradient computation.
gradient | gradient will be stored in this argument |
argument | point at which the gradient will be computed |
functionId | function id in split representation |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
References roboptim::is_malloc_allowed(), and roboptim::set_is_malloc_allowed().
|
inline |
Return the gradient size.
Gradient size is equals to the input size.
|
protectedpure virtual |
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 |
Implemented in roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >, roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::GenericIdentityFunction< T >, roboptim::GenericNumericLinearFunction< T >, roboptim::GenericNumericLinearFunction< T >, roboptim::GenericConstantFunction< T >, roboptim::GenericIdentityFunction< T >, roboptim::Cos< T >, roboptim::Sin< T >, roboptim::GenericSumOfC1Squares< T >, roboptim::Cos< T >, roboptim::Polynomial< T >, and roboptim::Sin< T >.
|
inlineprotected |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
References roboptim::is_malloc_allowed(), and roboptim::set_is_malloc_allowed().
|
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 in roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::Cos< T >, roboptim::GenericConstantFunction< T >, roboptim::Sin< T >, roboptim::GenericNumericLinearFunction< T >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::GenericIdentityFunction< T >, roboptim::Polynomial< T >, roboptim::Cos< T >, and roboptim::Sin< T >.
|
inline |
Check if the gradient is valid (check size).
gradient | checked gradient |
|
inline |
Check if the jacobian is valid (check sizes).
jacobian | checked jacobian |
|
inline |
Computes the jacobian.
argument | point at which the jacobian will be computed |
Referenced by roboptim::checkJacobian(), roboptim::checkJacobianAndThrow(), roboptim::ScalingHelper< T >::computeScaling(), and roboptim::visualization::gnuplot::plot_jac().
|
inline |
Computes the jacobian.
Program will abort if the jacobian size is wrong before or after the jacobian computation.
jacobian | jacobian will be stored in this argument |
argument | point at which the jacobian will be computed |
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
ROBOPTIM_DO_NOT_CHECK_ALLOCATION
References roboptim::is_malloc_allowed(), and roboptim::set_is_malloc_allowed().
|
inline |
Return the jacobian size as a pair.
Gradient size is equals to (output size, input size).
|
virtual |
Display the function on the specified output stream.
o | output stream used for display |
Reimplemented from roboptim::GenericFunction< T >.
Reimplemented in roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >, roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericTwiceDifferentiableFunction< T >, roboptim::GenericNumericQuadraticFunction< T >, roboptim::GenericConstantFunction< T >, roboptim::GenericNumericLinearFunction< T >, roboptim::Polynomial< T >, roboptim::GenericIdentityFunction< T >, roboptim::GenericLinearFunction< T >, roboptim::GenericQuadraticFunction< T >, roboptim::Cos< T >, and roboptim::Sin< T >.
References roboptim::indent().
roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_ADD_FLAG | ( | ROBOPTIM_IS_DIFFERENTIABLE | ) |
roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_FUNCTION_FWD_TYPEDEFS_ | ( | GenericFunction< T > | ) |
roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_GENERATE_TRAITS_REFS_ | ( | gradient | ) |
Gradient type.
roboptim::GenericDifferentiableFunction< T >::ROBOPTIM_GENERATE_TRAITS_REFS_ | ( | jacobian | ) |
Jacobian type.