- 3.0.2 optimal control module.
ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR > Class Template Referenceabstract

Describes a cost function with a quadratic approximation, i.e. one that can compute first and second order derivatives with respect to state and control input. This does NOT mean it has to be a purely quadratic cost function. If you are looking for a purely quadratic cost function, check CostFunctionQuadraticSimple. More...

#include <CostFunctionQuadratic.hpp>

Inheritance diagram for ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >:
ct::optcon::CostFunction< STATE_DIM, CONTROL_DIM, SCALAR > ct::optcon::CostFunctionAnalytical< STATE_DIM, CONTROL_DIM, SCALAR > ct::optcon::CostFunctionQuadraticSimple< STATE_DIM, CONTROL_DIM, SCALAR >

Public Types

typedef Eigen::Matrix< SCALAR, CONTROL_DIM, CONTROL_DIM > control_matrix_t
 
typedef Eigen::Matrix< SCALAR, CONTROL_DIM, STATE_DIM > control_state_matrix_t
 
typedef core::StateVector< STATE_DIM, SCALARstate_vector_t
 
typedef core::ControlVector< CONTROL_DIM, SCALARcontrol_vector_t
 
typedef CostFunction< STATE_DIM, CONTROL_DIM, SCALARBASE
 
- Public Types inherited from ct::optcon::CostFunction< STATE_DIM, CONTROL_DIM, SCALAR >
typedef core::ControlVector< CONTROL_DIM, SCALARcontrol_vector_t
 

Public Member Functions

 CostFunctionQuadratic ()
 
 CostFunctionQuadratic (const CostFunctionQuadratic &arg)
 
virtual CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR > * clone () const =0
 
virtual ~CostFunctionQuadratic ()
 
virtual size_t addIntermediateTerm (std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR >> term, bool verbose=false)
 Adds an intermediate term. More...
 
virtual size_t addFinalTerm (std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR >> term, bool verbose=false)
 Adds a final term. More...
 
virtual void loadFromConfigFile (const std::string &filename, bool verbose=false)
 Loads cost function from config file. More...
 
virtual state_vector_t stateDerivativeIntermediate ()=0
 Computes intermediate-cost first-order derivative with respect to state. More...
 
virtual state_vector_t stateDerivativeTerminal ()=0
 
virtual state_matrix_t stateSecondDerivativeIntermediate ()=0
 Computes intermediate-cost second-order derivative with respect to state. More...
 
virtual state_matrix_t stateSecondDerivativeTerminal ()=0
 Computes final-cost second-order derivative with respect to state. More...
 
virtual control_vector_t controlDerivativeIntermediate ()=0
 Computes intermediate-cost first-order derivative with respect to control. More...
 
virtual control_vector_t controlDerivativeTerminal ()
 Computes terminal-cost first-order derivative with respect to control. More...
 
virtual control_matrix_t controlSecondDerivativeIntermediate ()=0
 Computes intermediate-cost second-order derivative with respect to input. More...
 
virtual control_matrix_t controlSecondDerivativeTerminal ()
 Computes final-cost second-order derivative with respect to input. More...
 
virtual control_state_matrix_t stateControlDerivativeIntermediate ()=0
 Computes intermediate-cost derivative with respect to state and control. More...
 
virtual control_state_matrix_t stateControlDerivativeTerminal ()
 Computes final-cost derivative with respect to state and control. More...
 
virtual void updateReferenceState (const state_vector_t &x_ref)
 update the reference state for intermediate cost terms More...
 
virtual void updateFinalState (const state_vector_t &x_final)
 update the reference state for final cost terms More...
 
virtual void updateReferenceControl (const control_vector_t &u_ref)
 update the reference control for intermediate cost terms More...
 
bool stateDerivativeIntermediateTest (bool verbose=false)
 compare the state derivative against numerical differentiation More...
 
bool controlDerivativeIntermediateTest (bool verbose=false)
 compare the control derivative against numerical differentiation More...
 
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > getIntermediateTermById (const size_t id)
 
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > getFinalTermById (const size_t id)
 
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > getIntermediateTermByName (const std::string &name)
 
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > getFinalTermByName (const std::string &name)
 
virtual void initialize ()
 initialize the cost function (e.g. to be used in CostFunctionAD) More...
 
- Public Member Functions inherited from ct::optcon::CostFunction< STATE_DIM, CONTROL_DIM, SCALAR >
 CostFunction ()
 Default constructor. More...
 
virtual ~CostFunction ()
 Destructor. More...
 
 CostFunction (const CostFunction &arg)
 Copy constructor. More...
 
virtual void setCurrentStateAndControl (const state_vector_t &x, const control_vector_t &u, const SCALAR &t=SCALAR(0.0))
 
virtual void getCurrentStateAndControl (Eigen::Matrix< SCALAR, STATE_DIM, 1 > &x, Eigen::Matrix< SCALAR, CONTROL_DIM, 1 > &u, SCALAR &t) const
 sets current state, control and time More...
 
virtual SCALAR evaluateIntermediate ()=0
 evaluate intermediate costs More...
 
virtual SCALAR evaluateTerminal ()=0
 evaluate terminal costs More...
 
virtual void shiftTime (const SCALAR t)
 

Public Attributes

EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef Eigen::Matrix< SCALAR, STATE_DIM, STATE_DIM > state_matrix_t
 
- Public Attributes inherited from ct::optcon::CostFunction< STATE_DIM, CONTROL_DIM, SCALAR >
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef core::StateVector< STATE_DIM, SCALARstate_vector_t
 

Protected Member Functions

SCALAR evaluateIntermediateBase ()
 evaluate intermediate analytical cost terms More...
 
SCALAR evaluateTerminalBase ()
 evaluate terminal analytical cost terms More...
 
state_vector_t stateDerivativeIntermediateBase ()
 evaluate intermediate analytical state derivatives More...
 
state_vector_t stateDerivativeTerminalBase ()
 evaluate terminal analytical state derivatives More...
 
state_matrix_t stateSecondDerivativeIntermediateBase ()
 evaluate intermediate analytical state second derivatives More...
 
state_matrix_t stateSecondDerivativeTerminalBase ()
 evaluate terminal analytical state second derivatives More...
 
control_vector_t controlDerivativeIntermediateBase ()
 evaluate intermediate analytical control derivatives More...
 
control_vector_t controlDerivativeTerminalBase ()
 evaluate terminal analytical control derivatives More...
 
control_matrix_t controlSecondDerivativeIntermediateBase ()
 evaluate intermediate analytical control second derivatives More...
 
control_matrix_t controlSecondDerivativeTerminalBase ()
 evaluate terminal analytical control second derivatives More...
 
control_state_matrix_t stateControlDerivativeIntermediateBase ()
 evaluate intermediate analytical control mixed state control derivatives More...
 
control_state_matrix_t stateControlDerivativeTerminalBase ()
 evaluate terminal analytical control mixed state control derivatives More...
 
state_vector_t stateDerivativeIntermediateNumDiff ()
 compute the state derivative by numerical differentiation (can be used for testing) More...
 
control_vector_t controlDerivativeIntermediateNumDiff ()
 compute the control derivative by numerical differentiation (can be used for testing) More...
 

Protected Attributes

SCALAR eps_
 stepsize for numerical differentiation More...
 
bool doubleSidedDerivative_ = true
 use double sided derivatives in numerical differentiation More...
 
std::vector< std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > > intermediateCostAnalytical_
 
std::vector< std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > > finalCostAnalytical_
 
- Protected Attributes inherited from ct::optcon::CostFunction< STATE_DIM, CONTROL_DIM, SCALAR >
state_vector_t x_
 
control_vector_t u_
 
SCALAR t_
 
SCALAR t_shift_
 

Detailed Description

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
class ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >

Describes a cost function with a quadratic approximation, i.e. one that can compute first and second order derivatives with respect to state and control input. This does NOT mean it has to be a purely quadratic cost function. If you are looking for a purely quadratic cost function, check CostFunctionQuadraticSimple.

A cost function is assumed to be a sum of intermediate and final terms, i.e. $ J(x,u,t) = \sum_{n=0}^{N_i} T_{i,n}(x,u,t) + \sum_{n=0}^{N_f} T_{i,f}(x,u,t) $ These terms can have arbitrary form.

Member Typedef Documentation

◆ control_matrix_t

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
typedef Eigen::Matrix<SCALAR, CONTROL_DIM, CONTROL_DIM> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_matrix_t

◆ control_state_matrix_t

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
typedef Eigen::Matrix<SCALAR, CONTROL_DIM, STATE_DIM> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_state_matrix_t

◆ state_vector_t

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
typedef core::StateVector<STATE_DIM, SCALAR> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::state_vector_t

◆ control_vector_t

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
typedef core::ControlVector<CONTROL_DIM, SCALAR> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_vector_t

◆ BASE

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
typedef CostFunction<STATE_DIM, CONTROL_DIM, SCALAR> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::BASE

Constructor & Destructor Documentation

◆ CostFunctionQuadratic() [1/2]

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::CostFunctionQuadratic ( )

Constructor

◆ CostFunctionQuadratic() [2/2]

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::CostFunctionQuadratic ( const CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR > &  arg)

◆ ~CostFunctionQuadratic()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::~CostFunctionQuadratic ( )
virtual

Destructor

References ct::optcon::example::verbose.

Member Function Documentation

◆ clone()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual CostFunctionQuadratic<STATE_DIM, CONTROL_DIM, SCALAR>* ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::clone ( ) const
pure virtual

◆ addIntermediateTerm()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
size_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::addIntermediateTerm ( std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR >>  term,
bool  verbose = false 
)
virtual

Adds an intermediate term.

Parameters
termintermediate term
verboseverbosity flag which enables printout
Returns

References ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::intermediateCostAnalytical_.

Referenced by ct::optcon::example::TEST().

◆ addFinalTerm()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
size_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::addFinalTerm ( std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR >>  term,
bool  verbose = false 
)
virtual

Adds a final term.

Parameters
termfinal term
verboseverbosity flag which enables printout
Returns

References ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::finalCostAnalytical_.

Referenced by ct::optcon::example::TEST().

◆ loadFromConfigFile()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
void ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::loadFromConfigFile ( const std::string &  filename,
bool  verbose = false 
)
virtual

Loads cost function from config file.

Parameters
filenameconfig file location
verboseverbosity flag which enables printout

Reimplemented in ct::optcon::CostFunctionAnalytical< STATE_DIM, CONTROL_DIM, SCALAR >.

◆ stateDerivativeIntermediate()

◆ stateDerivativeTerminal()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual state_vector_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateDerivativeTerminal ( )
pure virtual

◆ stateSecondDerivativeIntermediate()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual state_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateSecondDerivativeIntermediate ( )
pure virtual

◆ stateSecondDerivativeTerminal()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual state_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateSecondDerivativeTerminal ( )
pure virtual

◆ controlDerivativeIntermediate()

◆ controlDerivativeTerminal()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_vector_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::controlDerivativeTerminal ( )
virtual

Computes terminal-cost first-order derivative with respect to control.

Not available for all cost functions. Throws an exception if not available.

Returns
derivative vector (Jacobian)

Reimplemented in ct::optcon::CostFunctionAnalytical< STATE_DIM, CONTROL_DIM, SCALAR >.

Referenced by ct::optcon::example::compareCostFunctionOutput(), and ct::optcon::example::printCostFunctionOutput().

◆ controlSecondDerivativeIntermediate()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual control_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::controlSecondDerivativeIntermediate ( )
pure virtual

◆ controlSecondDerivativeTerminal()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::controlSecondDerivativeTerminal ( )
virtual

Computes final-cost second-order derivative with respect to input.

Not available for all cost functions. Throws an exception if not available.

Returns
derivative matrix (Jacobian)

Reimplemented in ct::optcon::CostFunctionAnalytical< STATE_DIM, CONTROL_DIM, SCALAR >.

Referenced by ct::optcon::example::compareCostFunctionOutput(), and ct::optcon::example::printCostFunctionOutput().

◆ stateControlDerivativeIntermediate()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
virtual control_state_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateControlDerivativeIntermediate ( )
pure virtual

◆ stateControlDerivativeTerminal()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::control_state_matrix_t ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateControlDerivativeTerminal ( )
virtual

Computes final-cost derivative with respect to state and control.

Returns
derivative matrix (Jacobian)

Reimplemented in ct::optcon::CostFunctionAnalytical< STATE_DIM, CONTROL_DIM, SCALAR >.

Referenced by ct::optcon::example::compareCostFunctionOutput(), and ct::optcon::example::printCostFunctionOutput().

◆ updateReferenceState()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
void ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::updateReferenceState ( const state_vector_t x_ref)
virtual

◆ updateFinalState()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
void ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::updateFinalState ( const state_vector_t x_final)
virtual

◆ updateReferenceControl()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
void ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::updateReferenceControl ( const control_vector_t u_ref)
virtual

update the reference control for intermediate cost terms

References ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::intermediateCostAnalytical_.

◆ stateDerivativeIntermediateTest()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
bool ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::stateDerivativeIntermediateTest ( bool  verbose = false)

◆ controlDerivativeIntermediateTest()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
bool ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::controlDerivativeIntermediateTest ( bool  verbose = false)

◆ getIntermediateTermById()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::getIntermediateTermById ( const size_t  id)

◆ getFinalTermById()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::getFinalTermById ( const size_t  id)

◆ getIntermediateTermByName()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::getIntermediateTermByName ( const std::string &  name)

◆ getFinalTermByName()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
std::shared_ptr< TermBase< STATE_DIM, CONTROL_DIM, SCALAR > > ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::getFinalTermByName ( const std::string &  name)

◆ initialize()

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR >
void ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::initialize ( )
virtual

initialize the cost function (e.g. to be used in CostFunctionAD)

do nothing at all

◆ evaluateIntermediateBase()

◆ evaluateTerminalBase()

◆ stateDerivativeIntermediateBase()

◆ stateDerivativeTerminalBase()

◆ stateSecondDerivativeIntermediateBase()

◆ stateSecondDerivativeTerminalBase()

◆ controlDerivativeIntermediateBase()

◆ controlDerivativeTerminalBase()

◆ controlSecondDerivativeIntermediateBase()

◆ controlSecondDerivativeTerminalBase()

◆ stateControlDerivativeIntermediateBase()

◆ stateControlDerivativeTerminalBase()

◆ stateDerivativeIntermediateNumDiff()

◆ controlDerivativeIntermediateNumDiff()

Member Data Documentation

◆ state_matrix_t

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef Eigen::Matrix<SCALAR, STATE_DIM, STATE_DIM> ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::state_matrix_t

◆ eps_

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
SCALAR ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::eps_
protected

◆ doubleSidedDerivative_

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
bool ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::doubleSidedDerivative_ = true
protected

◆ intermediateCostAnalytical_

template<size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
std::vector<std::shared_ptr<TermBase<STATE_DIM, CONTROL_DIM, SCALAR> > > ct::optcon::CostFunctionQuadratic< STATE_DIM, CONTROL_DIM, SCALAR >::intermediateCostAnalytical_
protected

◆ finalCostAnalytical_


The documentation for this class was generated from the following files: