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. More...
typedef F | roboptim::Problem< F, boost::mpl::vector<> >::function_t
| Function type. More...
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. More...
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. More...
typedef CLIST | roboptim::Problem< F, CLIST >::constraintsList_t
| Constraints types list. More...
typedef F | roboptim::Problem< F, CLIST >::function_t
| Function type. More...
typedef boost::make_variant_over< typename detail::add_shared_ptr< CLIST >::type >::type | roboptim::Problem< F, CLIST >::constraint_t
| Constraint's type. More...
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. More...
typedef boost::optional< Function::vector_t > | roboptim::Problem< F, CLIST >::startingPoint_t
| Optional vector defines a starting point. More...
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. More...
typedef std::vector< intervals_t > | roboptim::Problem< F, CLIST >::intervalsVect_t
| Vector of interval vectors. More...
typedef std::vector< scales_t > | roboptim::Problem< F, CLIST >::scalesVect_t
| Vector of scale vectors. More...

## Functions

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

## Friends

template<typename F_ , typename CLIST_ >
class | roboptim::Problem< F, boost::mpl::vector<> >::Problem
template<typename F_ , typename CLIST_ >
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. More...
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). More...
| 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. More...
intervals_t & | roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds () throw ()
| Retrieve arguments bounds. More...
const intervals_t & | roboptim::Problem< F, boost::mpl::vector<> >::argumentBounds () const throw ()
| Retrieve arguments bounds. More...
scales_t & | roboptim::Problem< F, boost::mpl::vector<> >::argumentScales () throw ()
| Retrieve arguments scales. More...
const scales_t & | roboptim::Problem< F, boost::mpl::vector<> >::argumentScales () const throw ()
| Retrieve arguments scales. More...

## Starting point (initial guess).

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

## Constructors and destructors.

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

## Cost function.

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

## Constraints.

const constraints_t & | roboptim::Problem< F, CLIST >::constraints () const throw ()
| Retrieve constraints. More...
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. More...
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. More...
const intervalsVect_t & | roboptim::Problem< F, CLIST >::boundsVector () const throw ()
| Retrieve constraints bounds vector. More...
const scalesVect_t & | roboptim::Problem< F, CLIST >::scalesVector () const throw ()
| Retrieve constraints scales vector. More...

## Starting point (initial guess).

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

## Detailed Description

Optimization problem without constraints.

Optimization problem.

An optimization problem is defined as:

- a cost function ( )
- a set of intervals and scales for arguments.

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

  F | function type

An optimization problem is defined as:

- a cost function ( )
- one or more constraints functions, ( ) associated with an interval and a scale,
- a set of intervals and scales for arguments.

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

  F | function type
  CLIST | type 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 .

If , 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 .

If , 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

Result.

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 , use addConstraint (boost::shared_ptr<C> constraint, intervals_t intervals, scales_t scales) instead.

Parameters

  constraint | the constraint that will be added
  interval | interval in which the constraint is satisfied
  scale | constraint scale

Template Parameters

  C | constraint 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

  constraint | the constraint that will be added
  intervals | interval vector in which the constraint is satisfied
  scale | constraint scale

Template Parameters

  C | constraint 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

  o | output stream used for display
  ns | NoSolution 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

  o | output stream used for display
  pb | problem 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

  o | output stream used for display
  pb | problem 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

  o | output 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

  o | output 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

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

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 >
template<typename F_ , typename CLIST_ >

friend class Problem

friend

template<typename F, typename CLIST>
template<typename F_ , typename CLIST_ >

friend class Problem

friend