Residual-based cost. More...
#include <residual.hpp>
Public Types | |
typedef ActivationModelAbstractTpl< Scalar > | ActivationModelAbstract |
typedef CostModelAbstractTpl< Scalar > | Base |
typedef CostDataAbstractTpl< Scalar > | CostDataAbstract |
typedef CostDataResidualTpl< Scalar > | Data |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef MathBase::MatrixXs | MatrixXs |
typedef ResidualModelAbstractTpl< Scalar > | ResidualModelAbstract |
typedef MathBase::VectorXs | VectorXs |
![]() | |
typedef ActivationModelAbstractTpl< Scalar > | ActivationModelAbstract |
typedef ActivationModelQuadTpl< Scalar > | ActivationModelQuad |
typedef CostDataAbstractTpl< Scalar > | CostDataAbstract |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef MathBase::MatrixXs | MatrixXs |
typedef ResidualModelAbstractTpl< Scalar > | ResidualModelAbstract |
typedef StateAbstractTpl< Scalar > | StateAbstract |
typedef MathBase::VectorXs | VectorXs |
Public Member Functions | |
CostModelResidualTpl (std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ActivationModelAbstract > activation, std::shared_ptr< ResidualModelAbstract > residual) | |
Initialize the residual cost model. More... | |
CostModelResidualTpl (std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual) | |
Initialize the residual cost model. More... | |
virtual void | calc (const std::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override |
Compute the residual cost based on state only. More... | |
virtual void | calc (const std::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override |
Compute the residual cost. More... | |
virtual void | calcDiff (const std::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override |
Compute the derivatives of the residual cost with respect to the state only. More... | |
virtual void | calcDiff (const std::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override |
Compute the derivatives of the residual cost. More... | |
template<typename NewScalar > | |
CostModelResidualTpl< NewScalar > | cast () const |
Cast the residual cost model to a different scalar type. More... | |
virtual std::shared_ptr< CostDataAbstract > | createData (DataCollectorAbstract *const data) override |
Create the residual cost data. | |
virtual void | print (std::ostream &os) const override |
Print relevant information of the cost-residual model. More... | |
![]() | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t nr) | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t nr, const std::size_t nu) | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, std::shared_ptr< ActivationModelAbstract > activation) | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, std::shared_ptr< ActivationModelAbstract > activation, const std::size_t nu) | |
Initialize the cost model. More... | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, std::shared_ptr< ActivationModelAbstract > activation, std::shared_ptr< ResidualModelAbstract > residual) | |
Initialize the cost model. More... | |
CostModelAbstractTpl (std::shared_ptr< StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual) | |
const std::shared_ptr< ActivationModelAbstract > & | get_activation () const |
Return the activation model. | |
std::size_t | get_nu () const |
Return the dimension of the control input. | |
template<class ReferenceType > | |
ReferenceType | get_reference () |
Return the cost reference. | |
const std::shared_ptr< ResidualModelAbstract > & | get_residual () const |
Return the residual model. | |
const std::shared_ptr< StateAbstract > & | get_state () const |
Return the state. | |
template<class ReferenceType > | |
void | set_reference (ReferenceType ref) |
Modify the cost reference. | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
![]() | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Protected Attributes | |
std::shared_ptr< ActivationModelAbstract > | activation_ |
Activation model. | |
std::size_t | nu_ |
Control dimension. | |
std::shared_ptr< ResidualModelAbstract > | residual_ |
Residual model. | |
std::shared_ptr< StateAbstract > | state_ |
State description. | |
VectorXs | unone_ |
No control vector. | |
![]() | |
std::shared_ptr< ActivationModelAbstract > | activation_ |
Activation model. | |
std::size_t | nu_ |
Control dimension. | |
std::shared_ptr< ResidualModelAbstract > | residual_ |
Residual model. | |
std::shared_ptr< StateAbstract > | state_ |
State description. | |
VectorXs | unone_ |
No control vector. | |
Additional Inherited Members | |
![]() | |
virtual void | get_referenceImpl (const std::type_info &, void *) |
Return the cost reference. | |
virtual void | set_referenceImpl (const std::type_info &, const void *) |
Modify the cost reference. | |
Residual-based cost.
This cost function uses a residual model to compute the cost, i.e.,
\[ cost = a(\mathbf{r}(\mathbf{x}, \mathbf{u})), \]
where \(\mathbf{r}(\cdot)\) and \(a(\cdot)\) define the residual and activation functions, respectively.
Note that we only compute the Jacobians of the residual function. Therefore, this cost model computes its Hessians through a Gauss-Newton approximation, e.g., \(\mathbf{l_{xu}} = \mathbf{R_x}^T \mathbf{A_{rr}} \mathbf{R_u} \), where \(\mathbf{R_x}\) and \(\mathbf{R_u}\) are the Jacobians of the residual function, and \(\mathbf{A_{rr}}\) is the Hessian of the activation model.
As described in CostModelAbstractTpl()
, the cost value and its derivatives are calculated by calc
and calcDiff
, respectively.
CostModelAbstractTpl
, calc()
, calcDiff()
, createData()
Definition at line 39 of file residual.hpp.
CostModelResidualTpl | ( | std::shared_ptr< typename Base::StateAbstract > | state, |
std::shared_ptr< ActivationModelAbstract > | activation, | ||
std::shared_ptr< ResidualModelAbstract > | residual | ||
) |
Initialize the residual cost model.
[in] | state | State of the multibody system |
[in] | activation | Activation model |
[in] | residual | Residual model |
CostModelResidualTpl | ( | std::shared_ptr< typename Base::StateAbstract > | state, |
std::shared_ptr< ResidualModelAbstract > | residual | ||
) |
Initialize the residual cost model.
We use ActivationModelQuadTpl
as a default activation model (i.e. \(a=\frac{1}{2}\|\mathbf{r}\|^2\)).
[in] | state | State of the multibody system |
[in] | residual | Residual model |
|
overridevirtual |
Compute the residual cost.
[in] | data | Residual cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Implements CostModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the residual cost based on state only.
It updates the total cost based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Residual cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented from CostModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the derivatives of the residual cost.
[in] | data | Residual cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Implements CostModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the derivatives of the residual cost with respect to the state only.
It updates the Jacobian and Hessian of the cost function based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Residual cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented from CostModelAbstractTpl< _Scalar >.
CostModelResidualTpl<NewScalar> cast | ( | ) | const |
Cast the residual cost model to a different scalar type.
It is useful for operations requiring different precision or scalar types.
NewScalar | The new scalar type to cast to. |
|
overridevirtual |
Print relevant information of the cost-residual model.
[out] | os | Output stream object |
Reimplemented from CostModelAbstractTpl< _Scalar >.