roboptim::Solver< F, C > Class Template Reference

Solver for a specific problem class. More...

#include <roboptim/core/solver.hh>

Inheritance diagram for roboptim::Solver< F, C >:
roboptim::GenericSolver

Public Types

typedef Problem< F, C > problem_t
 Solver problem type. More...
 
typedef F::vector_t vector_t
 Import vector type from cost function. More...
 
typedef std::map< std::string, Parameterparameters_t
 Map of parameters. More...
 
typedef SolverState< problem_tsolverState_t
 State of the solver. More...
 
typedef boost::function< void(const problem_t &problem, solverState_t &state)> callback_t
 Per-iteration callback type. More...
 
- Public Types inherited from roboptim::GenericSolver
enum  solutions {
  SOLVER_NO_SOLUTION,
  SOLVER_VALUE,
  SOLVER_VALUE_WARNINGS,
  SOLVER_ERROR
}
 Define the kind of solution which has been found. More...
 
typedef boost::variant< NoSolution, Result, ResultWithWarnings, SolverErrorresult_t
 Result type. More...
 

Public Member Functions

 Solver (const problem_t &problem)
 Instantiate a solver from a problem. More...
 
template<typename F_ , typename C_ >
 Solver (const Problem< F_, C_ > &problem)
 Instantiate a solver from a problem in a different problem class. More...
 
virtual ~Solver ()
 
const problem_tproblem () const
 Retrieve the problem. More...
 
virtual void setIterationCallback (callback_t)
 Set the per-iteration callback. More...
 
virtual std::ostream & print (std::ostream &) const
 Display the solver on the specified output stream. More...
 
Parameters
const parameters_tparameters () const
 
parameters_tparameters ()
 
template<typename T >
const T & getParameter (const std::string &key) const
 
Plugin name
const std::string & pluginName () const
 
std::string & pluginName ()
 
- Public Member Functions inherited from roboptim::GenericSolver
void reset ()
 Force to restart the optimization. More...
 
virtual void solve ()=0
 Solve the problem. More...
 
const result_tminimum ()
 Returns the function minimum This solves the problem automatically, if it has not yet been solved. More...
 
solutions minimumType ()
 Determine real minimum type. More...
 
template<typename T >
const T & getMinimum ()
 Get real result. More...
 
 GenericSolver ()
 
 GenericSolver (const GenericSolver &)
 
virtual ~GenericSolver ()
 

Protected Attributes

const problem_t problem_
 Problem that will be solved. More...
 
parameters_t parameters_
 Solver parameters (run-time configuration). More...
 
std::string plugin_name_
 Plugin name. More...
 
- Protected Attributes inherited from roboptim::GenericSolver
result_t result_
 Optimization result. More...
 

Static Protected Attributes

static log4cxx::LoggerPtr logger
 Pointer to function logger (see log4cxx documentation). More...
 
- Static Protected Attributes inherited from roboptim::GenericSolver
static log4cxx::LoggerPtr logger
 Pointer to function logger (see log4cxx documentation). More...
 

Detailed Description

template<typename F, typename C>
class roboptim::Solver< F, C >

Solver for a specific problem class.

This class is parametrized by two types: the cost function type and the constraints type.

Solver classes are immutable, the problem can not be changed after the class instantiation.

Template Parameters
Fcost function type
Cconstraints functions type
Precondition
F is a subtype of Function

Member Typedef Documentation

template<typename F, typename C>
typedef boost::function<void (const problem_t& problem, solverState_t& state)> roboptim::Solver< F, C >::callback_t

Per-iteration callback type.

Callback parameters:

  • problem is a (constant) reference to the problem
  • state is the current state of the optimization solver. It can be modified by the callback, and updated values can be used by the solver to determine what to do next.
template<typename F, typename C>
typedef std::map<std::string, Parameter> roboptim::Solver< F, C >::parameters_t

Map of parameters.

template<typename F, typename C>
typedef Problem<F, C> roboptim::Solver< F, C >::problem_t

Solver problem type.

The solver can solve problems of this type. If another kind of problem is given, a conversion will be required.

template<typename F, typename C>
typedef SolverState<problem_t> roboptim::Solver< F, C >::solverState_t

State of the solver.

template<typename F, typename C>
typedef F::vector_t roboptim::Solver< F, C >::vector_t

Import vector type from cost function.

Constructor & Destructor Documentation

template<typename F , typename C >
roboptim::Solver< F, C >::Solver ( const problem_t problem)
explicit

Instantiate a solver from a problem.

Parameters
problemproblem that should be solved
template<typename F , typename C >
template<typename F_ , typename C_ >
roboptim::Solver< F, C >::Solver ( const Problem< F_, C_ > &  problem)
explicit

Instantiate a solver from a problem in a different problem class.

This constructor is called when the problem cost function or/and constraints type does not match solver's types.

This is only possible if the problem provides too much information compared to the solver requirements: if the problem contains twice derivable function and the solver requires only derivable function, it will work however the opposite will fail. Problem compatibility is known at compile-time, so the failure will be at compile-time.

Template Parameters
F_original cost function type
C_original constraints functions type
Parameters
problemproblem that should be solved
template<typename F , typename C >
roboptim::Solver< F, C >::~Solver ( )
virtual

Member Function Documentation

template<typename F , typename C >
template<typename T >
const T & roboptim::Solver< F, C >::getParameter ( const std::string &  key) const
template<typename F , typename C >
const Solver< F, C >::parameters_t & roboptim::Solver< F, C >::parameters ( ) const
template<typename F , typename C >
Solver< F, C >::parameters_t & roboptim::Solver< F, C >::parameters ( )
template<typename F , typename C >
const std::string & roboptim::Solver< F, C >::pluginName ( ) const
template<typename F , typename C >
std::string & roboptim::Solver< F, C >::pluginName ( )
template<typename F , typename C >
std::ostream & roboptim::Solver< F, C >::print ( std::ostream &  o) const
virtual

Display the solver on the specified output stream.

Parameters
ooutput stream used for display
Returns
output stream

Reimplemented from roboptim::GenericSolver.

References roboptim::decindent(), roboptim::iendl(), roboptim::incindent(), and result_.

template<typename F , typename C >
const Solver< F, C >::problem_t & roboptim::Solver< F, C >::problem ( ) const

Retrieve the problem.

Returns
problem this solver is solving
template<typename F, typename C>
virtual void roboptim::Solver< F, C >::setIterationCallback ( callback_t  )
inlinevirtual

Set the per-iteration callback.

The per-iteration callback is a callback called each time one iteration of the optimization process is finished.

Not all the solvers support such a callback so this method may throw a std::runtime_error to let you know this feature is unsupported.

Exceptions
std::runtime_error

Reimplemented in roboptim::GenericDummySolverLastState< F >.

Member Data Documentation

template<typename F, typename C>
log4cxx::LoggerPtr roboptim::Solver< F, C >::logger
staticprotected

Pointer to function logger (see log4cxx documentation).

template<typename F, typename C>
parameters_t roboptim::Solver< F, C >::parameters_
protected

Solver parameters (run-time configuration).

template<typename F, typename C>
std::string roboptim::Solver< F, C >::plugin_name_
protected

Plugin name.

template<typename F, typename C>
const problem_t roboptim::Solver< F, C >::problem_
protected

Problem that will be solved.