roboptim::GenericFunction< T > Class Template Reference

Define an abstract mathematical function ( $C^0$). More...

#include <roboptim/core/function.hh>

Inheritance diagram for roboptim::GenericFunction< T >:

List of all members.

Public Types

typedef GenericFunctionTraits
< T >::value_type 
value_type
 Values type.
typedef GenericFunctionTraits
< T >::vector_t 
vector_t
 Basic vector type.
typedef GenericFunctionTraits
< T >::matrix_t 
matrix_t
 Basic matrix type.
typedef GenericFunctionTraits
< T >::size_type 
size_type
 Size type.
typedef GenericFunctionTraits
< T >::result_t 
result_t
 Type of a function evaluation result.
typedef GenericFunctionTraits
< T >::argument_t 
argument_t
 Type of a function evaluation argument.

Public Member Functions

bool isValidResult (const result_t &result) const throw ()
 Check the given result size is valid.
GenericFunction< T >::size_type inputSize () const throw ()
 Return the input size (i.e.
GenericFunction< T >::size_type outputSize () const throw ()
 Return the output size (i.e.
virtual ~GenericFunction () throw ()
 Trivial destructor.
result_t operator() (const argument_t &argument) const throw ()
 Evaluate the function at a specified point.
void operator() (result_t &result, const argument_t &argument) const throw ()
 Evaluate the function at a specified point.
const std::string & getName () const throw ()
 Get function name.
virtual std::ostream & print (std::ostream &) const throw ()
 Display the function on the specified output stream.

Static Public Member Functions

static value_type epsilon () throw ()
 Get the value of the machine epsilon, useful for floating types comparison.
static value_type infinity () throw ()
 Get the value that symbolizes positive infinity.

Protected Member Functions

 GenericFunction (size_type inputSize, size_type outputSize=1, std::string name=std::string()) throw ()
 Concrete class constructor should call this constructor.
virtual void impl_compute (result_t &result, const argument_t &argument) const =0 throw ()
 Function evaluation.

Static Protected Attributes

static log4cxx::LoggerPtr logger
 Pointer to function logger (see log4cxx documentation).

Interval

typedef std::pair< value_type,
value_type
interval_t
 Interval type (lower, upper).
typedef std::vector< interval_tintervals_t
 Vector of intervals.
static interval_t makeInterval (value_type l, value_type u) throw ()
 Construct an interval from a lower and upper bound.
static interval_t makeInfiniteInterval () throw ()
 Construct an infinite interval.
static interval_t makeLowerInterval (value_type l) throw ()
 Construct an interval from a lower bound.
static interval_t makeUpperInterval (value_type u) throw ()
 Construct an interval from an upper bound.
static double getLowerBound (const interval_t &interval) throw ()
 Get the lower bound of an interval.
static double getUpperBound (const interval_t &interval) throw ()
 Get the upper bound of an interval.

Discrete interval

typedef boost::tuple
< value_type, value_type,
value_type
discreteInterval_t
 Types representing a discrete interval.
static discreteInterval_t makeDiscreteInterval (value_type min, value_type max, value_type step)
 Construct a discrete interval.
static discreteInterval_t makeDiscreteInterval (interval_t interval, value_type step)
 Construct a discrete interval.
static double getLowerBound (const discreteInterval_t &interval) throw ()
 Get the lower bound of a discrete interval.
static double getUpperBound (const discreteInterval_t &interval) throw ()
 Get the upper bound of a discrete interval.
static double getStep (const discreteInterval_t &interval) throw ()
 Get the upper step of a discrete interval.
template<typename F >
static void foreach (const discreteInterval_t interval, F functor)
 Iterate on an interval.
template<typename F >
static void foreach (const interval_t interval, const size_type n, F functor)
 Iterate on an interval.

Detailed Description

template<typename T>
class roboptim::GenericFunction< T >

Define an abstract mathematical function ( $C^0$).

A function is an object that can be evaluated for a given point.

\[ 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.

Functions are pure immutable objects: evaluating a function twice at a given point must give the same result.

This function is parametrized by the matrix type used in this function. Currently, dense (which size may be dynamic or static and sparse Eigen matrices can be used) are supported.

Template Parameters:
TMatrix type
Examples:
visualization-gnuplot-function.cc.

Member Typedef Documentation

template<typename T>
typedef GenericFunctionTraits<T>::argument_t roboptim::GenericFunction< T >::argument_t

Type of a function evaluation argument.

Reimplemented in roboptim::SumOfC1Squares, and roboptim::GenericLinearFunction< T >.

template<typename T>
typedef boost::tuple<value_type, value_type, value_type> roboptim::GenericFunction< T >::discreteInterval_t

Types representing a discrete interval.

A discrete interval is a triplet of values:

  • lower bound,
  • upper bound,
  • step.
template<typename T>
typedef std::pair<value_type, value_type> roboptim::GenericFunction< T >::interval_t

Interval type (lower, upper).

Use negative or positive infinity to respectively disable the lower or upper bound.

template<typename T>
typedef std::vector<interval_t> roboptim::GenericFunction< T >::intervals_t

Vector of intervals.

template<typename T>
typedef GenericFunctionTraits<T>::matrix_t roboptim::GenericFunction< T >::matrix_t

Basic matrix type.

This basic matrix type is used each time a two dimensional matrix of values is needed.

Attention:
It is good practice in RobOptim to rely on this type when a matrix of values is needed instead of relying on a particular implementation.
Examples:
numeric-quadratic-function.cc.
template<typename T>
typedef GenericFunctionTraits<T>::result_t roboptim::GenericFunction< T >::result_t

Type of a function evaluation result.

Reimplemented in roboptim::GenericLinearFunction< T >.

template<typename T>
typedef GenericFunctionTraits<T>::size_type roboptim::GenericFunction< T >::size_type

Size type.

This type is used to represent sizes, indexes, etc.

Reimplemented in roboptim::GenericLinearFunction< T >, and roboptim::GenericQuadraticFunction< T >.

template<typename T>
typedef GenericFunctionTraits<T>::value_type roboptim::GenericFunction< T >::value_type

Values type.

Represents the numerical type (i.e. float, double, int...) used for computations.

template<typename T>
typedef GenericFunctionTraits<T>::vector_t roboptim::GenericFunction< T >::vector_t

Basic vector type.

This basic vector type is used each time a vector of values is required.

Attention:
It is good practice in RobOptim to rely on this type when a vector of values is needed instead of relying on a particular implementation.

Reimplemented in roboptim::GenericLinearFunction< T >.

Examples:
numeric-quadratic-function.cc.

Member Function Documentation

template<typename T>
static value_type roboptim::GenericFunction< T >::epsilon ( ) throw () [inline, static]

Get the value of the machine epsilon, useful for floating types comparison.

Returns:
machine epsilon value.

Referenced by roboptim::detail::ltvector::operator()().

template<typename T>
template<typename F >
static void roboptim::GenericFunction< T >::foreach ( const discreteInterval_t  interval,
functor 
) [inline, static]

Iterate on an interval.

Call the functor to each discretization point of the discrete interval.

Parameters:
intervalinterval on which the method iterates
functorunary function that will be applied
Template Parameters:
Ffunctor type (has to satisfy the STL unary function concept)

References roboptim::GenericFunction< T >::getLowerBound(), roboptim::GenericFunction< T >::getStep(), and roboptim::GenericFunction< T >::getUpperBound().

template<typename T>
template<typename F >
static void roboptim::GenericFunction< T >::foreach ( const interval_t  interval,
const size_type  n,
functor 
) [inline, static]

Iterate on an interval.

Call the functor regularly n times on an interval.

Parameters:
intervalinterval on which the method iterates
nnumber of discretization points
functorunary function that will be applied
Template Parameters:
Ffunctor type (has to satisfy the STL unary function concept)

References roboptim::GenericFunction< T >::getLowerBound(), and roboptim::GenericFunction< T >::getUpperBound().

template<typename T>
static double roboptim::GenericFunction< T >::getLowerBound ( const interval_t interval) throw () [inline, static]

Get the lower bound of an interval.

Parameters:
intervalaccessed interval
Returns:
lower bound of the interval

Referenced by roboptim::GenericFunction< T >::foreach(), and roboptim::GenericFunction< T >::makeDiscreteInterval().

template<typename T>
static double roboptim::GenericFunction< T >::getLowerBound ( const discreteInterval_t interval) throw () [inline, static]

Get the lower bound of a discrete interval.

Parameters:
intervalaccessed discrete interval
Returns:
lower bound of the discrete interval
template<typename T>
const std::string& roboptim::GenericFunction< T >::getName ( ) const throw () [inline]
template<typename T>
static double roboptim::GenericFunction< T >::getStep ( const discreteInterval_t interval) throw () [inline, static]

Get the upper step of a discrete interval.

Parameters:
intervalaccessed discrete interval
Returns:
upper step of the discrete interval

Referenced by roboptim::GenericFunction< T >::foreach().

template<typename T>
static double roboptim::GenericFunction< T >::getUpperBound ( const interval_t interval) throw () [inline, static]

Get the upper bound of an interval.

Parameters:
intervalaccessed interval
Returns:
upper bound of the interval

Referenced by roboptim::GenericFunction< T >::foreach(), and roboptim::GenericFunction< T >::makeDiscreteInterval().

template<typename T>
static double roboptim::GenericFunction< T >::getUpperBound ( const discreteInterval_t interval) throw () [inline, static]

Get the upper bound of a discrete interval.

Parameters:
intervalaccessed discrete interval
Returns:
upper bound of the discrete interval
template<typename T>
virtual void roboptim::GenericFunction< T >::impl_compute ( result_t result,
const argument_t argument 
) const throw () [protected, pure virtual]

Function evaluation.

Evaluate the function, has to be implemented in concrete classes.

Warning:
Do not call this function directly, call operator()(result_t&, const argument_t&) const throw () instead.
Parameters:
resultresult will be stored in this vector
argumentpoint at which the function will be evaluated

Implemented in roboptim::NTimesDerivableFunction< 2 >, roboptim::GenericFiniteDifferenceGradient< T, FdgPolicy >, roboptim::GenericNumericLinearFunction< T >, roboptim::SumOfC1Squares, roboptim::NumericQuadraticFunction, roboptim::IdentityFunction, and roboptim::ConstantFunction.

Referenced by roboptim::GenericFunction< T >::operator()().

template<typename T>
static value_type roboptim::GenericFunction< T >::infinity ( ) throw () [inline, static]
template<typename T>
bool roboptim::GenericFunction< T >::isValidResult ( const result_t result) const throw () [inline]

Check the given result size is valid.

Parameters:
resultresult that will be checked
Returns:
true if valid, false if not

References roboptim::GenericFunction< T >::outputSize().

Referenced by roboptim::GenericFunction< T >::operator()().

template<typename T>
static discreteInterval_t roboptim::GenericFunction< T >::makeDiscreteInterval ( value_type  min,
value_type  max,
value_type  step 
) [inline, static]

Construct a discrete interval.

Parameters:
minmiminum value of the interval
maxmaxinum value of the interval
stepdiscretization step
template<typename T>
static discreteInterval_t roboptim::GenericFunction< T >::makeDiscreteInterval ( interval_t  interval,
value_type  step 
) [inline, static]

Construct a discrete interval.

Parameters:
intervalcontinuous interval
stepdiscretization step

References roboptim::GenericFunction< T >::getLowerBound(), and roboptim::GenericFunction< T >::getUpperBound().

template<typename T>
static interval_t roboptim::GenericFunction< T >::makeInfiniteInterval ( ) throw () [inline, static]

Construct an infinite interval.

Returns:
interval representing $[-\infty, +\infty]$

References roboptim::GenericFunction< T >::infinity().

Referenced by roboptim::Problem< F, boost::mpl::vector<> >::Problem(), and roboptim::Problem< F, CLIST >::Problem().

template<typename T>
static interval_t roboptim::GenericFunction< T >::makeInterval ( value_type  l,
value_type  u 
) throw () [inline, static]

Construct an interval from a lower and upper bound.

Parameters:
llower bound
uupper bound
Returns:
interval representing $[l, u]$

Referenced by roboptim::GenericFunction< T >::makeLowerInterval(), and roboptim::GenericFunction< T >::makeUpperInterval().

template<typename T>
static interval_t roboptim::GenericFunction< T >::makeLowerInterval ( value_type  l) throw () [inline, static]

Construct an interval from a lower bound.

Parameters:
llower bound
Returns:
interval representing $[l, +\infty]$

References roboptim::GenericFunction< T >::infinity(), and roboptim::GenericFunction< T >::makeInterval().

template<typename T>
static interval_t roboptim::GenericFunction< T >::makeUpperInterval ( value_type  u) throw () [inline, static]

Construct an interval from an upper bound.

Parameters:
uupper bound
Returns:
interval representing $[-\infty, u]$

References roboptim::GenericFunction< T >::infinity(), and roboptim::GenericFunction< T >::makeInterval().

template<typename T>
result_t roboptim::GenericFunction< T >::operator() ( const argument_t argument) const throw () [inline]

Evaluate the function at a specified point.

The program will abort if the argument does not have the expected size.

Parameters:
argumentpoint at which the function will be evaluated
Returns:
computed result

References roboptim::GenericFunction< T >::outputSize().

template<typename T>
void roboptim::GenericFunction< T >::operator() ( result_t result,
const argument_t argument 
) const throw () [inline]

Evaluate the function at a specified point.

The program will abort if the argument does not have the expected size.

Parameters:
resultresult will be stored in this vector
argumentpoint at which the function will be evaluated

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

ROBOPTIM_DO_NOT_CHECK_ALLOCATION

References roboptim::GenericFunction< T >::impl_compute(), roboptim::GenericFunction< T >::inputSize(), roboptim::GenericFunction< T >::isValidResult(), and roboptim::GenericFunction< T >::logger.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines