Optimization problems

Optimization problem without constraints. More...

Classes

struct  roboptim::detail::add_shared_ptr< CLIST >
 Transform a types list into a types list of shared pointers. More...
class  roboptim::Problem< F, boost::mpl::vector<> >
class  roboptim::Problem< F, CLIST >
class  roboptim::ResultWithWarnings
 Represents the solution of an optimization problem when errors occurred during the solving process. More...
class  roboptim::Result
 Represents the solution of an optimization problem. More...
class  roboptim::SolverError
 Base exception class for solving errors. More...
class  roboptim::SolverFactory< T >
 Define a solver factory that instanciate the plug-ins. More...
class  roboptim::SolverWarning
 Exception used for non-critical errors during optimization. More...
struct  roboptim::Parameter
 Parameters type. More...
class  roboptim::Solver< F, C >
 Solver for a specific problem class. More...

Typedefs

typedef boost::mpl::transform
< CLIST, typename
boost::shared_ptr
< boost::mpl::_1 > >::type 
roboptim::detail::add_shared_ptr< CLIST >::type
 Result.
typedef F roboptim::Problem< F, boost::mpl::vector<> >::function_t
 Function type.
typedef function_t::value_type roboptim::Problem< F, boost::mpl::vector<> >::value_type
typedef boost::optional
< Function::vector_t > 
roboptim::Problem< F, boost::mpl::vector<> >::startingPoint_t
 Optional vector defines a starting point.
typedef Function::interval_t roboptim::Problem< F, boost::mpl::vector<> >::interval_t
typedef Function::intervals_t roboptim::Problem< F, boost::mpl::vector<> >::intervals_t
typedef std::vector< value_type > roboptim::Problem< F, boost::mpl::vector<> >::scales_t
 Scale vector.
typedef CLIST roboptim::Problem< F, CLIST >::constraintsList_t
 Constraints types list.
typedef F roboptim::Problem< F, CLIST >::function_t
 Function type.
typedef
boost::make_variant_over
< typename
detail::add_shared_ptr< CLIST >
::type >::type 
roboptim::Problem< F, CLIST >::constraint_t
 Constraint's type.
typedef function_t::value_type roboptim::Problem< F, CLIST >::value_type
typedef std::vector< constraint_t > roboptim::Problem< F, CLIST >::constraints_t
 Constraints are represented as a vector of constraints.
typedef boost::optional
< Function::vector_t > 
roboptim::Problem< F, CLIST >::startingPoint_t
 Optional vector defines a starting point.
typedef Function::interval_t roboptim::Problem< F, CLIST >::interval_t
typedef Function::intervals_t roboptim::Problem< F, CLIST >::intervals_t
typedef std::vector< value_type > roboptim::Problem< F, CLIST >::scales_t
 Scale vector.
typedef std::vector< intervals_t > roboptim::Problem< F, CLIST >::intervalsVect_t
 Vector of interval vectors.
typedef std::vector< scales_t > roboptim::Problem< F, CLIST >::scalesVect_t
 Vector of scale vectors.

Functions

std::ostream & roboptim::Problem< F, boost::mpl::vector<> >::print (std::ostream &o) const throw ()
 Display the problem on the specified output stream.
std::ostream & roboptim::Problem< F, CLIST >::print (std::ostream &o) const throw ()
 Display the problem on the specified output stream.
template<typename F >
std::ostream & roboptim::operator<< (std::ostream &o, const Problem< F, boost::mpl::vector<> > &pb)
 Override operator<< to handle problem display.
template<typename F , typename CLIST >
std::ostream & roboptim::operator<< (std::ostream &o, const Problem< F, CLIST > &pb)
 Override operator<< to handle problem display.
ROBOPTIM_DLLAPI std::ostream & roboptim::operator<< (std::ostream &o, const Parameter &parameter)
 Override operator<< to display ``parameters'' objects.

Friends

class roboptim::Problem< F, boost::mpl::vector<> >::Problem
class roboptim::Problem< F, CLIST >::Problem

Constructors and destructors.

 roboptim::Problem< F, boost::mpl::vector<> >::Problem (const function_t &) throw ()
 roboptim::Problem< F, boost::mpl::vector<> >::Problem (const Problem< F, boost::mpl::vector<> > &) throw ()
 Copy constructor.
template<typename F_ >
 roboptim::Problem< F, boost::mpl::vector<> >::Problem (const Problem< F_, boost::mpl::vector<> > &) throw ()
 Copy constructor (convert from another class of problem).
 roboptim::Problem< F, boost::mpl::vector<> >::~Problem () throw ()

Cost function.

const function_t & roboptim::Problem< F, boost::mpl::vector<> >::function () const throw ()
 Retrieve cost function.
intervals_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds () throw ()
 Retrieve arguments bounds.
const intervals_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds () const throw ()
 Retrieve arguments bounds.
scales_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentScales () throw ()
 Retrieve arguments scales.
const scales_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentScales () const throw ()
 Retrieve arguments scales.

Starting point (initial guess).

startingPoint_t & roboptim::Problem< F, boost::mpl::vector<> >::startingPoint () throw ()
 Set the initial guess.
const startingPoint_t & roboptim::Problem< F, boost::mpl::vector<> >::startingPoint () const throw ()
 Get the initial guess.

Constructors and destructors.

 roboptim::Problem< F, CLIST >::Problem (const function_t &) throw ()
 roboptim::Problem< F, CLIST >::Problem (const Problem< F, CLIST > &) throw ()
 Copy constructor.
template<typename F_ , typename CLIST_ >
 roboptim::Problem< F, CLIST >::Problem (const Problem< F_, CLIST_ > &) throw ()
 Copy constructor (convert from another class of problem).
 roboptim::Problem< F, CLIST >::~Problem () throw ()

Cost function.

const function_t & roboptim::Problem< F, CLIST >::function () const throw ()
 Retrieve cost function.
intervals_t & roboptim::Problem< F, CLIST >::argumentBounds () throw ()
 Retrieve arguments bounds.
const intervals_t & roboptim::Problem< F, CLIST >::argumentBounds () const throw ()
 Retrieve arguments bounds.
scales_t & roboptim::Problem< F, CLIST >::argumentScales () throw ()
 Retrieve arguments scales.
const scales_t & roboptim::Problem< F, CLIST >::argumentScales () const throw ()
 Retrieve arguments scales.

Constraints.

const constraints_t & roboptim::Problem< F, CLIST >::constraints () const throw ()
 Retrieve constraints.
template<typename C >
void roboptim::Problem< F, CLIST >::addConstraint (boost::shared_ptr< C > constraint, interval_t interval, value_type scale=1.) throw (std::runtime_error)
 Add a constraint to the problem.
template<typename C >
void roboptim::Problem< F, CLIST >::addConstraint (boost::shared_ptr< C > constraint, intervals_t intervals, scales_t scales) throw (std::runtime_error)
 Add a constraint to the problem.
const intervalsVect_t & roboptim::Problem< F, CLIST >::boundsVector () const throw ()
 Retrieve constraints bounds vector.
const scalesVect_t & roboptim::Problem< F, CLIST >::scalesVector () const throw ()
 Retrieve constraints scales vector.

Starting point (initial guess).

startingPoint_t & roboptim::Problem< F, CLIST >::startingPoint () throw ()
 Set the initial guess.
const startingPoint_t & roboptim::Problem< F, CLIST >::startingPoint () const throw ()
 Get the initial guess.

Detailed Description

Optimization problem without constraints.

Optimization problem.

An optimization problem is defined as:

The goal of the optimization process is finding a point which minimizes the cost function

To use the class, one has to instantiate a problem with a reference to a cost function. method: a reference to a function and an interval is needed.

The cost function is immutable.

Unlike other classes which just copy functions, pointers are used here in order to allow sub-classes of constraints to be inserted in the problem. For instance, a twice derivable function can be inserted in a problem which expects a derivable function.

Template Parameters:
Ffunction type

An optimization problem is defined as:

The goal of the optimization process is finding a point which minimizes the cost function and which respects the constraints (i.e. the result of some functions is inside of specific interval).

To use the class, one has to instantiate a problem with a reference to a cost function. Then, constraints can be added through the addConstraint method: a reference to a function and an interval is needed.

The cost function is immutable.

Constraints are stored as a Boost.Variant of smart pointers (i.e. more precisely using a boost::shared_ptr) representing all the different possibles constraint types.

It is recommended to add a constraint using the following syntax:

 problem.addConstraint<C> (boost::make_shared<MyFunction> (...), ...);

where C is the constraint type and MyFunction the function type.

Unlike other classes which just copy functions, pointers are used here in order to allow sub-classes of constraints to be inserted in the problem. For instance, a twice derivable function can be inserted in a problem which expects a derivable function.

Template Parameters:
Ffunction type
CLISTtype list satisfying MPL's sequence concept

Typedef Documentation

template<typename F, typename CLIST>
typedef boost::make_variant_over<typename detail::add_shared_ptr<CLIST>::type>::type roboptim::Problem< F, CLIST >::constraint_t

Constraint's type.

Generate a Boost.Variant of shared pointers tyle from the static constraints types list.

For instance, if one instantiates

  Problem<QuadraticFunction, vector<LinearFunction, QuadraticFunction> >

then this type will be set to:

 boost::variant<boost::shared_ptr<LinearFunction>,
                boost::shared_ptr<QuadraticFunction> >

The meta-algorithm which add shared pointers is implemented in detail::add_shared_pointer.

template<typename F, typename CLIST>
typedef std::vector<constraint_t> roboptim::Problem< F, CLIST >::constraints_t

Constraints are represented as a vector of constraints.

template<typename F, typename CLIST>
typedef CLIST roboptim::Problem< F, CLIST >::constraintsList_t

Constraints types list.

template<typename F >
typedef F roboptim::Problem< F, boost::mpl::vector<> >::function_t

Function type.

This has to be either Function or one of its sub-classes.

template<typename F, typename CLIST>
typedef F roboptim::Problem< F, CLIST >::function_t

Function type.

This has to be either Function or one of its sub-classes.

template<typename F >
typedef Function::interval_t roboptim::Problem< F, boost::mpl::vector<> >::interval_t
template<typename F, typename CLIST>
typedef Function::interval_t roboptim::Problem< F, CLIST >::interval_t
template<typename F >
typedef Function::intervals_t roboptim::Problem< F, boost::mpl::vector<> >::intervals_t
template<typename F, typename CLIST>
typedef Function::intervals_t roboptim::Problem< F, CLIST >::intervals_t
template<typename F, typename CLIST>
typedef std::vector<intervals_t> roboptim::Problem< F, CLIST >::intervalsVect_t

Vector of interval vectors.

This type is used to take into account the fact that constraints can have output values in $\mathbb{C}^{m}$.

If $m=1$, then the associated interval vector contains only one element of interval_t type.

template<typename F >
typedef std::vector<value_type> roboptim::Problem< F, boost::mpl::vector<> >::scales_t

Scale vector.

template<typename F, typename CLIST>
typedef std::vector<value_type> roboptim::Problem< F, CLIST >::scales_t

Scale vector.

template<typename F, typename CLIST>
typedef std::vector<scales_t> roboptim::Problem< F, CLIST >::scalesVect_t

Vector of scale vectors.

This type is used to take into account the fact that constraints can have output values in $\mathbb{R}^m$.

If $m=1$, then the associated scale vector contains only one element of scale_t type.

template<typename F >
typedef boost::optional<Function::vector_t> roboptim::Problem< F, boost::mpl::vector<> >::startingPoint_t

Optional vector defines a starting point.

template<typename F, typename CLIST>
typedef boost::optional<Function::vector_t> roboptim::Problem< F, CLIST >::startingPoint_t

Optional vector defines a starting point.

template<typename CLIST>
typedef boost::mpl::transform<CLIST, typename boost::shared_ptr<boost::mpl::_1> >::type roboptim::detail::add_shared_ptr< CLIST >::type
template<typename F >
typedef function_t::value_type roboptim::Problem< F, boost::mpl::vector<> >::value_type
template<typename F, typename CLIST>
typedef function_t::value_type roboptim::Problem< F, CLIST >::value_type

Function Documentation

template<typename F , typename CLIST >
template<typename C >
void roboptim::Problem< F, CLIST >::addConstraint ( boost::shared_ptr< C >  constraint,
interval_t  interval,
value_type  scale = 1. 
) throw (std::runtime_error)

Add a constraint to the problem.

Useful only when $m=1$, use addConstraint (boost::shared_ptr<C> constraint, intervals_t intervals, scales_t scales) instead.

Parameters:
constraintthe constraint that will be added
intervalinterval in which the constraint is satisfied
scaleconstraint scale
Template Parameters:
Cconstraint type (has to be in CLIST)
template<typename F , typename CLIST >
template<typename C >
void roboptim::Problem< F, CLIST >::addConstraint ( boost::shared_ptr< C >  constraint,
intervals_t  intervals,
scales_t  scales 
) throw (std::runtime_error)

Add a constraint to the problem.

The constraint can be multidimensional.

Parameters:
constraintthe constraint that will be added
intervalsinterval vector in which the constraint is satisfied
scaleconstraint scale
Template Parameters:
Cconstraint type (has to be in CLIST)
template<typename F >
Problem< F, boost::mpl::vector<> >::intervals_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds ( ) throw ()

Retrieve arguments bounds.

Arguments bounds define in which interval each argument is valid.

Returns:
arguments bounds
template<typename F >
const Problem< F, boost::mpl::vector<> >::intervals_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds ( ) const throw ()

Retrieve arguments bounds.

Arguments bounds define in which interval each argument is valid.

Returns:
arguments bounds
template<typename F , typename CLIST >
Problem< F, CLIST >::intervals_t & roboptim::Problem< F, CLIST >::argumentBounds ( ) throw ()

Retrieve arguments bounds.

Arguments bounds define in which interval each argument is valid.

Returns:
arguments bounds
template<typename F , typename CLIST >
const Problem< F, CLIST >::intervals_t & roboptim::Problem< F, CLIST >::argumentBounds ( ) const throw ()

Retrieve arguments bounds.

Arguments bounds define in which interval each argument is valid.

Returns:
arguments bounds
template<typename F >
Problem< F, boost::mpl::vector<> >::scales_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentScales ( ) throw ()

Retrieve arguments scales.

Arguments scales define which scale is applied for each argument.

Returns:
arguments scales
template<typename F >
const Problem< F, boost::mpl::vector<> >::scales_t & roboptim::Problem< F, boost::mpl::vector<> >::argumentScales ( ) const throw ()

Retrieve arguments scales.

Arguments scales define which scale is applied for each argument.

Returns:
arguments scales
template<typename F , typename CLIST >
Problem< F, CLIST >::scales_t & roboptim::Problem< F, CLIST >::argumentScales ( ) throw ()

Retrieve arguments scales.

Arguments scales define which scale is applied for each argument.

Returns:
arguments scales
template<typename F , typename CLIST >
const Problem< F, CLIST >::scales_t & roboptim::Problem< F, CLIST >::argumentScales ( ) const throw ()

Retrieve arguments scales.

Arguments scales define which scale is applied for each argument.

Returns:
arguments scales
template<typename F , typename CLIST >
const Problem< F, CLIST >::intervalsVect_t & roboptim::Problem< F, CLIST >::boundsVector ( ) const throw ()

Retrieve constraints bounds vector.

Returns:
constraints bounds vector
template<typename F , typename CLIST >
const Problem< F, CLIST >::constraints_t & roboptim::Problem< F, CLIST >::constraints ( ) const throw ()

Retrieve constraints.

Returns:
constraints
template<typename F >
const Problem< F, boost::mpl::vector<> >::function_t & roboptim::Problem< F, boost::mpl::vector<> >::function ( ) const throw ()

Retrieve cost function.

Returns:
cost function
template<typename F , typename CLIST >
const Problem< F, CLIST >::function_t & roboptim::Problem< F, CLIST >::function ( ) const throw ()

Retrieve cost function.

Returns:
cost function
std::ostream & roboptim::operator<< ( std::ostream &  o,
const Parameter &  parameter 
)

Override operator<< to display ``parameters'' objects.

Parameters:
ooutput stream used for display
nsNoSolution object, ignored
Returns:
output stream

References roboptim::Parameter::description.

template<typename F >
std::ostream & roboptim::operator<< ( std::ostream &  o,
const Problem< F, boost::mpl::vector<> > &  pb 
)

Override operator<< to handle problem display.

Parameters:
ooutput stream used for display
pbproblem to be displayed
Returns:
output stream
template<typename F , typename CLIST >
std::ostream & roboptim::operator<< ( std::ostream &  o,
const Problem< F, CLIST > &  pb 
)

Override operator<< to handle problem display.

Parameters:
ooutput stream used for display
pbproblem to be displayed
Returns:
output stream
template<typename F >
std::ostream & roboptim::Problem< F, boost::mpl::vector<> >::print ( std::ostream &  o) const throw ()

Display the problem on the specified output stream.

Parameters:
ooutput stream used for display
Returns:
output stream

References roboptim::decindent(), roboptim::iendl(), roboptim::incendl(), roboptim::GenericFunction< T >::infinity(), roboptim::fg::reset(), and roboptim::fg::warn().

template<typename F , typename CLIST >
std::ostream & roboptim::Problem< F, CLIST >::print ( std::ostream &  o) const throw ()

Display the problem on the specified output stream.

Parameters:
ooutput stream used for display
Returns:
output stream

References roboptim::decindent(), roboptim::iendl(), roboptim::incendl(), roboptim::GenericFunction< T >::infinity(), roboptim::fg::ok(), roboptim::fg::reset(), and roboptim::fg::warn().

template<typename F >
roboptim::Problem< F, boost::mpl::vector<> >::Problem ( const function_t f) throw () [explicit]
Precondition:
costfunction $\mathbb{R}^n \rightarrow \mathbb{R}$

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

template<typename F >
roboptim::Problem< F, boost::mpl::vector<> >::Problem ( const Problem< F, boost::mpl::vector<> > &  pb) throw () [explicit]

Copy constructor.

template<typename F >
template<typename F_ >
roboptim::Problem< F, boost::mpl::vector<> >::Problem ( const Problem< F_, boost::mpl::vector<> > &  pb) throw () [explicit]

Copy constructor (convert from another class of problem).

template<typename F , typename CLIST >
roboptim::Problem< F, CLIST >::Problem ( const function_t f) throw () [explicit]
Precondition:
costfunction $\mathbb{R}^n \rightarrow \mathbb{R}$

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

template<typename F , typename CLIST >
roboptim::Problem< F, CLIST >::Problem ( const Problem< F, CLIST > &  pb) throw () [explicit]

Copy constructor.

template<typename F , typename CLIST >
template<typename F_ , typename CLIST_ >
roboptim::Problem< F, CLIST >::Problem ( const Problem< F_, CLIST_ > &  pb) throw () [explicit]

Copy constructor (convert from another class of problem).

template<typename F , typename CLIST >
const Problem< F, CLIST >::scalesVect_t & roboptim::Problem< F, CLIST >::scalesVector ( ) const throw ()

Retrieve constraints scales vector.

Returns:
constraints scales vector
template<typename F >
Problem< F, boost::mpl::vector<> >::startingPoint_t & roboptim::Problem< F, boost::mpl::vector<> >::startingPoint ( ) throw ()

Set the initial guess.

Returns:
reference on the initial guess
template<typename F >
const Problem< F, boost::mpl::vector<> >::startingPoint_t & roboptim::Problem< F, boost::mpl::vector<> >::startingPoint ( ) const throw ()

Get the initial guess.

Returns:
reference on the initial guess
template<typename F , typename CLIST >
Problem< F, CLIST >::startingPoint_t & roboptim::Problem< F, CLIST >::startingPoint ( ) throw ()

Set the initial guess.

Returns:
reference on the initial guess
template<typename F , typename CLIST >
const Problem< F, CLIST >::startingPoint_t & roboptim::Problem< F, CLIST >::startingPoint ( ) const throw ()

Get the initial guess.

Returns:
reference on the initial guess
template<typename F >
roboptim::Problem< F, boost::mpl::vector<> >::~Problem ( ) throw ()
template<typename F , typename CLIST >
roboptim::Problem< F, CLIST >::~Problem ( ) throw ()

Friends

template<typename F >
friend class Problem [friend]
template<typename F, typename CLIST>
friend class Problem [friend]
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines